RAG가 환각을 일으키는 이유는 쓰레기 같은 검색 결과 때문입니다 — 3줄짜리 해결책(실제 점수 포함)
Your RAG is hallucinating because of garbage retrieval — here's the 3-line fix (with real scores)
핵심 요약
RAG의 환각은 LLM 문제가 아니라 검색된 노이즈 때문이며, 크로스 인코더 리랭킹으로 해결 가능함.
- 검색 품질 개선 — LLM에 전달되는 노이즈를 줄여 환각 현상을 방지함.
- 리랭킹 도입 — 크로스 인코더를 사용해 검색 결과의 우선순위를 재조정함.
- 임계값 설정 — 점수가 낮은 검색 결과는 LLM에 전달하지 않고 차단함.
- 성능 향상 — 검색 결과의 관련성을 높여 답변 정확도를 80%까지 끌어올림.
내 RAG 에이전트가 환각을 일으켰다. LLM이 나빠서가 아니라, 검색 과정에서 노이즈를 계속 주입했기 때문이다.
질문: "파이썬 데코레이터란 무엇인가?"
수정 전 리트리버가 반환한 결과:
| Rank | Score | Content | Relevant? |
|---|---|---|---|
| 1 | +5.80 | Decorator definition | Yes |
| 2 | +1.40 | Acknowledgments page | No |
| 3 | +1.13 | u/staticmethod example | Yes |
| 4 | -4.69 | Class exercises | No |
| 5 | -11.0 | Monty Python reference | No |
LLM은 5개 청크를 모두 받았다. 노이즈를 신뢰했기 때문에 환각이 발생했다.
해결책 — 크로스 인코더 리랭킹 (3줄):
scores = cross_encoder.score(pairs)
ranked = sorted(zip(scores, candidates), reverse=True)
filtered = [doc for score, doc in ranked if score > 1.5]
수정 후: 점수가 1.5를 넘는 청크만 LLM에 전달된다.
전체 결과(10개 질문): 평균 관련성이 -0.28에서 +3.80으로 상승. 80% 승률.
모델: cross-encoder/ms-marco-MiniLM-L-6-v2 (무료, 로컬, 허깅페이스).
챗봇이 환각을 일으킨다면, LLM을 탓하기 전에 검색 과정을 먼저 확인해라. 당신은 리랭커에 어떤 임계값을 사용하고 있는가?



