에러가 아닌 RAG 버그: 잘못된 검색 (Bad Retrieval)
요약
RAG 파이프라인에서 발생하는 잘못된 검색(Bad Retrieval) 문제를 해결하는 두 가지 실무적인 방법을 제시합니다. 관련성 하한선을 설정하여 노이즈를 차단하고, 쿼리 재작성을 통해 검색 정확도를 높이는 전략을 다룹니다.
핵심 포인트
- 벡터 검색 시 유사도 점수 하한선을 설정하여 노이즈 제거
- 관련 정보가 없을 경우 환각 대신 거부 응답 반환
- LLM을 활용한 쿼리 재작성으로 검색 벡터 정교화
대부분의 고장 난 RAG (Retrieval-Augmented Generation) 파이프라인은 충돌(crash)하지 않습니다. 파이프라인은 정상적으로 작동하며 LLM (Large Language Model)에 조용히 잘못된 컨텍스트 (context)를 제공합니다. 그 결과, 당신은 확신에 차 있지만 약간 틀린 답변을 받게 됩니다. 대부분의 문제를 해결할 수 있는 두 가지 방법은 다음과 같습니다:
- 관련성 하한선 (relevance floor) 추가하기. 벡터 검색 (Vector search)은 실제로 관련 있는 내용이 없을 때도 항상 상위 k개의 결과를 반환합니다. 모델에 노이즈를 제공하는 대신, 약한 매칭 결과는 거부하세요:
results = store.similarity_search_with_score(query, k=5)
relevant = [doc for doc, score in results if score >= 0.75]
if not relevant:
return "I couldn't find anything relevant." # 환각 (hallucination)을 일으키는 것보다 낫습니다
- 검색하기 전에 쿼리 (query) 재작성하기. 사용자들은 지저분한 질문을 던집니다. 이를 깔끔하게 정리하기 위해 저렴한 LLM 호출을 한 번 사용하는 것만으로도 쿼리 벡터 (query vector)를 크게 날카롭게 만들 수 있습니다: python
search_query = llm.invoke(
f"Rewrite as a clear, standalone search query. Return only the query.\n\n{user_question}"
).content
results = store.similarity_search(search_query, k=5)
저는 풀스택 및 AI 시스템을 구축합니다. 제 작업물은 GitHub에서 확인하실 수 있습니다: github.com/OrienSpec.
저는 풀스택 및 AI 시스템을 구축합니다. 제 작업물은 GitHub에서 확인하실 수 있습니다: github.com/OrienSpec.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기