콘텐츠로 이동

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를 순서대로 호출하세요.

관련: 트러블슈팅 · 비용·지연