[AI] RAG 적용 설계 - 100-hours-a-week/21-iceT-wiki GitHub Wiki
RAG 아키텍처 기반 백준 해설 챗봇 설계안
전체 데이터 흐름 설계
단계 |
설명 |
오프라인 |
외부 지식 수집, 문서 전처리 및 임베딩 후 벡터 DB에 저장 |
온라인 |
사용자 질의에 따라 벡터 DB 검색 및 프롬프트 구성 후 생성 모델 추론 |
-
오프라인 단계
- 외부 지식 수집/전처리 (알고리즘/자료구조 설명, 언어 공식 문서 등)
- 문서 청크 단위로 분할
- 청크 단위 임베딩 생성 (예: Sentence-BERT)
- 벡터 DB 색인 (FAISS 또는 Pinecone)
-
온라인 단계
- 사용자 질의 입력 (문제 설명, 코드, 자연어 질문 등)
- 질의 임베딩 → 벡터 DB top-k 검색
- 검색된 문서를 기반으로 프롬프트 구성
- Qwen2.5-Coder-7B-Instruct 모델로 추론
- 답변 생성 및 반환
외부 지식 소스 (선정 기준 및 신뢰성)
출처 |
내용 |
신뢰성 근거 |
위키백과 |
알고리즘/자료구조 개념 설명 |
전문가 공동 편집, 높은 정확도 |
공식 언어 문서 |
함수 정의, 복잡도, 사용법 |
언어 개발팀 제공, 최신 정보 반영 |
기타 문헌 |
알고리즘 서적, 튜토리얼 등 |
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 서비스에 최적화된 접근이다.