[AI]5단계_RAG_적용_설계_미션_생성 - 100-hours-a-week/12-marong-Wiki GitHub Wiki

마니또 미션 생성 시스템의 RAG 적용 설계


1. 전체 데이터 흐름도 (LangGraph + RAG 기반 생성)

사용자 요청 (LangGraph 파이프라인 실행)
    ↓
select_query_node: 난이도 조건에 따라 쿼리 랜덤 선택
    ↓
rag_node: SBERT 임베딩 기반 유사 쿼리 검색 (ChromaDB)
    ↓
generate_mission_node: 프롬프트 구성 + LLM 미션 생성
    ↓
postprocess_node: 금지 키워드/중복 제거, 태그/이모지 추가
    ↓
evaluate_node: EXAONE 기반 자동 평가 (일관성/수행 가능성 등)
    ↓
check_completion_node: 난이도별 목표 개수 충족 여부 판단
    ↓
update_state_node: 상태 업데이트 및 반복 여부 판단
  • LangGraph 기반 LangChain 파이프라인 사용
  • ChromaDB + SBERT를 통한 Retrieval Augmented Generation (RAG)
  • HyperCLOVA-X LoRA 모델로 LLM 생성, EXAONE 평가 모델 통합

2. 사용된 외부 지식 소스 및 구조적 선택

구성 요소 설명 선택 이유
ChromaDB 유사 쿼리 검색을 위한 벡터 저장소 난이도 조건에 맞는 적절한 query context 제공
SBERT (KR) 입력 쿼리 임베딩 생성 의미 기반 검색 정확도 확보
EXAONE 평가 모델 생성된 미션의 정량 평가 품질 통제 및 기준 이상 필터링 목적
HyperCLOVA-X LoRA LLM 기반 미션 생성기 경량화된 고성능 생성 모델 운영 가능
  • Prompt + Retrieval + Generation + Evaluation까지 통합된 구조
  • 사용자 조건 기반 반복 생성 → 품질 기준 만족까지 자동 반복

3. 생성 흐름 및 LangGraph 통합 방식

  • 각 단계는 LangGraph에서 상태 기반 node로 분리되어 실행
  • Retry 및 Loop 처리가 check_completion_nodeupdate_state_node를 통해 구현됨
# 초기 state 구성
        initial_state = {
            "attempt": 0,
            "difficulty_idx": 0,
            "difficulty_order": ["상", "중", "하"],
            "current_diff": "상",
            "mid_output": [],
            "final_output": {"상": [], "중": [], "하": []},
            "target_counts": {"상": 0, "중": 3, "하": 0},
            "clean_tool": CleanMission(),
            "emoji_generator": EmojiGen(),
            "sbert_model": sbert_model,
            "hated_mission_collection": hated_mission_collection,
            "mission_collection": mission_collection,
            "contents": contents,
            "group_description": g_desc,
            "user_query": None,
            "random_queries": RANDOM_QUERIES,
            "gen_llm_chain": gen_llm_chain,
            "eval_llm_chain": eval_llm_chain
        }

        result = mission_graph.invoke(initial_state, config={"recursion_limit": 200})
  • 생성 결과는 MySQL DB에 저장

4. RAG 방식 전/후 비교

항목 기존 방식 (단일 Prompt 기반) 현재 방식 (LangChain + LangGraph + RAG)
쿼리 다양성 제한적 SBERT 기반 의미 유사도 다양화
문맥 적합성 낮음 RAG 기반 query context 사용
생성 품질 불안정 평가 체인 도입으로 정량 통제
반복 제어 수동 반복 상태 기반 자동 반복 및 종료 판단

5. RAG 적용의 이점

  • 생성 다양성 증가: 유사 쿼리를 다양하게 선택 → prompt context 풍부해짐
  • 실패율 감소: 적절한 평가 기준 만족 시에만 미션 선택
  • 기계적 반복 방지: 중복 제거, 금지 키워드 필터링으로 무의미한 생성 방지
  • 확장성 보장: 평가 모델, 생성 모델, 임베딩 모델 교체가 독립적으로 가능

6. 운영 효율성과 목표 부합성

목표 적용 내용
품질 제어 평가 모델을 통한 통과 기준 만족 시에만 미션 채택
시스템 자동화 상태 기반 LangGraph 구조로 생성 루프 자동화
문맥 활용도 향상 RAG로 유사도 높은 쿼리를 활용해 문맥 적합도 상승
유지보수 용이성 각 단계가 모듈화되어 개별 수정 가능 (노드별 독립성 확보)