RAG 품질 문제의 절반은 모델이 아니라 검색에서 시작된다. 답변이 틀렸을 때 프롬프트를 먼저 고치고 싶지만, 실제로는 잘못 잘린 문서와 약한 rerank가 원인인 경우가 많다.

1. Chunk는 문장보다 의미 단위
문장을 기계적으로 800자씩 자르면 표, 목록, 코드가 자주 찢어진다. 문서 구조가 있는 경우 heading 단위로 먼저 자르고, 길이 제한을 넘는 블록만 2차 분할하는 편이 안정적이다.
function chunkByHeading(markdown) {
return markdown
.split(/\n(?=##\s+)/)
.map((section) => section.trim())
.filter(Boolean);
}
2. 검색 결과를 그대로 믿지 않는다
Top-k embedding 결과는 후보일 뿐이다. 최종 context에는 reranker를 한 번 더 거친 문서만 넣는다.
| 단계 | 목표 | 실패 신호 |
|---|---|---|
| Embedding | 넓게 후보 수집 | 관련 문서가 아예 없음 |
| Rerank | 질문과 직접 관련된 문단 선별 | 비슷하지만 다른 주제 포함 |
| Answer | 출처 기반 응답 | 출처 없는 단정 |
3. Evaluation은 질문 30개부터
처음부터 거대한 벤치마크를 만들 필요는 없다. 실제 사용자가 물어볼 질문 30개와 정답 출처를 표로 묶고, 매 배포마다 recall과 faithfulness를 기록하면 된다.
팀에서 바로 쓸 수 있는 최소 평가 항목
정답 문서 회수 여부, 인용 정확도, 답변 누락, 환각 문장 수, 응답 지연 시간.
Comments
Google 계정으로 로그인 후 댓글 작성