RAG 제대로 만들기
문서에 근거해 답하는 RAG는 가장 흔한 AI 서비스입니다. "문서 넣고 물어보기"처럼 보이지만, 품질은 파이프라인 각 단계에 달려 있습니다.
파이프라인
문서 업로드 → (악성검사) → 파싱 → 청킹 → 임베딩 → 벡터저장
→ 검색 → 리랭킹 → LLM 답변 → 출처 표시 → 평가·로그
단계별 핵심 & 함정
1. 청킹 (chunking)
- 너무 크면: 관련 없는 내용이 섞여 검색 정밀도·답변 품질 하락.
- 너무 작으면: 문맥 단절.
- 권장: 문단 우선, 길면 문장 경계로 400~800자. 원문 추적용
doc_index보존.
2. 임베딩
POST /v1/embeddings(예:bge-m3). 다국어 문서면 다국어 임베딩 모델을 쓰세요.- 질의와 문서를 같은 모델로 임베딩.
3. 검색 + 리랭킹 (2단계가 핵심)
- 임베딩 코사인 유사도만으론 순위가 부정확합니다.
- 임베딩으로 top-N 프리필터 → 리랭커(
/v1/rerank)로 최종 top-k 재정렬. 정밀도가 크게 오릅니다. - 리랭커 미가용 시 코사인 순위로 폴백.
4. 답변 생성 (근거 주입 + 인용)
context = "\n".join(f"[{i+1}] {p}" for i, p in enumerate(passages))
messages = [
{"role": "system", "content": "주어진 근거만 사용해 답하고 [번호]로 인용하라. 근거에 없으면 모른다고 답하라."},
{"role": "user", "content": f"근거:\n{context}\n\n질문: {question}"},
]
[n]으로 참조하게.
5. 평가
- 지표: 답변 관련도(answer_relevance), 인용 정확도(citation_accuracy), 지연(latency).
- 골든셋(질문↔정답 문서)으로 회귀 측정.
빠른 시작
플랫폼 템플릿을 쓰면 위 파이프라인이 한 번의 호출로 실행됩니다:
hasa templates run rag-document-qa \
--input question="환불 규정?" --input documents='["환불은 7일 이내 가능합니다."]'
직접 조립하려면 /v1/embeddings + /v1/rerank + /v1/chat/completions를 순서대로 호출하세요.