[AI] RAG 적용 설계 - 100-hours-a-week/21-iceT-wiki GitHub Wiki

RAG 아키텍처 기반 백준 해설 챗봇 설계안

전체 데이터 흐름 설계

단계 설명
오프라인 외부 지식 수집, 문서 전처리 및 임베딩 후 벡터 DB에 저장
온라인 사용자 질의에 따라 벡터 DB 검색 및 프롬프트 구성 후 생성 모델 추론
  • 오프라인 단계

    1. 외부 지식 수집/전처리 (알고리즘/자료구조 설명, 언어 공식 문서 등)
    2. 문서 청크 단위로 분할
    3. 청크 단위 임베딩 생성 (예: Sentence-BERT)
    4. 벡터 DB 색인 (FAISS 또는 Pinecone)
  • 온라인 단계

    1. 사용자 질의 입력 (문제 설명, 코드, 자연어 질문 등)
    2. 질의 임베딩 → 벡터 DB top-k 검색
    3. 검색된 문서를 기반으로 프롬프트 구성
    4. Qwen2.5-Coder-7B-Instruct 모델로 추론
    5. 답변 생성 및 반환

외부 지식 소스 (선정 기준 및 신뢰성)

출처 내용 신뢰성 근거
위키백과 알고리즘/자료구조 개념 설명 전문가 공동 편집, 높은 정확도
공식 언어 문서 함수 정의, 복잡도, 사용법 언어 개발팀 제공, 최신 정보 반영
기타 문헌 알고리즘 서적, 튜토리얼 등 2차 소스, 필요 시 보조적 활용
비선호 출처 Stack Overflow, 임의 블로그 정보 불일치 가능성, 직접 인용 지양

검색 구현 상세

항목 구현 방식
임베딩 단위 문단 단위 (수백 토큰), Sentence-BERT 기반
벡터 DB FAISS, Pinecone, Chroma 등
쿼리 처리 방식 - 자연어 질의 직접 임베딩 - 코드 질의는 (1) 코드 요약 후 자연어 변환 (2) 주요 키워드 추출 기반 검색 - 복합 임베딩 방식도 고려 가능

프롬프트 구성 예시

[질문]
사용자의 질문 혹은 코드 입력

[참고 자료]
1. 위키백과 발췌 ...
2. 공식 문서 내용 ...

[명령]
위 자료를 바탕으로 질문에 답하세요.

또는

시스템: 당신은 프로그래밍 도움봇입니다. 아래는 관련 문서 정보입니다. 이 정보를 활용해 질문에 답하세요.

참고:
- 문서1: ... (이분 탐색 설명)
- 문서2: ... (std::sort 설명)

사용자: 이분 탐색과 퀵정렬의 차이를 설명하고, C++에서 정렬에 어떤 함수를 쓰면 되나요?
항목 설명
프롬프트 구성 요소 사용자 질문, 검색된 문서, 응답 지시어
삽입 문서 수 제한 일반적으로 상위 3~5개 문서 (128K 토큰 이내)
모델 컨텍스트 한계 Qwen2.5-Coder-7B-Instruct 기준 128K tokens

RAG 적용 전후 비교

항목 적용 전 (기존 LLM 단독) 적용 후 (RAG 기반)
정확도 헛소리(hallucination) 발생 가능 사실 기반 응답 생성, 오류 감소
전문성 설명 부족, 용어 부정확 전문용어 정확 사용, 심화 해설 가능
확장성 미학습 주제 대응 불가 외부 문서 검색으로 실시간 정보 대응 가능
정량 평가 가능성 주관적 평가에 의존 질문 세트 기반 정량 비교 및 전문가 리뷰 가능

서비스 목표 기여도

목표 항목 기여 내용
정확한 해설 제공 외부 지식 인용으로 신뢰도 향상
전문성 강화 단순 정답 제공 → 개념 + 구현 원리까지 해설
학습 효과 증가 설명을 통한 사용자의 문제 이해 촉진
지식 업데이트 유연성 모델 재학습 없이 문서 갱신만으로 대응 가능

📌 본 RAG 구조는 정확성, 전문성, 확장성을 동시에 확보할 수 있는 설계로, 백준 문제 해설 중심의 AI 서비스에 최적화된 접근이다.