Developer Log
AI & RAG

RAG에서 검색 결과가 부족할 때: Sufficient Context Gate

RAG를 구현하면서 처음에는 검색 성능에 집중했습니다. 그러나 검색 결과의 관련도가 높더라도 사용자 질문에 답할 만큼 충분한 정보가 있는지는 별개의 문제였습니다.

예를 들어 질문에는 특정 조건과 수치가 필요한데, 검색된 문서는 비슷한 주제만 설명할 수 있습니다. 이 상태에서 언어 모델이 답변을 만들면 문서에 없는 값을 추론하거나 다른 맥락의 수치를 가져올 위험이 있습니다.

검색 성공과 답변 가능성은 다릅니다

Vantage의 검색은 임베딩 기반 Dense 검색과 BM25 기반 키워드 검색을 함께 활용합니다. 기사와 논문의 표현 방식이 다르기 때문에 의미 유사성과 정확한 용어 일치를 함께 고려합니다.

하지만 상위 결과에 문서가 등장했다는 사실만으로 답변 가능성을 보장할 수는 없습니다.

  • 관련 있음: 질문과 같은 주제를 다루고 있습니다.
  • 충분함: 질문이 요구한 내용과 조건을 실제 문서에서 확인할 수 있습니다.
  • 무관함: 질문의 답변에 실질적인 도움을 주지 못합니다.

핵심은 관련성만 보지 않고 충분성을 따로 판단하는 것입니다.

Sufficient Context Gate를 둔 이유

처음 실험한 C1 게이트는 질문의 요구를 분해해, 실제로 읽은 근거만으로 답할 수 있는지 따로 판정했습니다. 질문의 모든 요구에 근거가 없을 때는 답변을 근거 부족 안내로 교체하는 방식으로 시작했습니다. 이후에는 이 방식을 발전시켜 읽기 도구가 반환한 결과마다 요구별 충분성을 평가하고, 충분한 근거와 추가 검색이 필요한 단서를 구분해 에이전트에 전달하도록 바꿨습니다. 아래 실험 수치는 이 중 초기 C1 방식에 대한 당시 평가 결과입니다.

이 단계에서 중요한 것은 모든 질문을 반드시 대답하는 것이 아니라 확인 가능한 사실만 답변하도록 제약하는 것입니다.

어떻게 평가했나

질문과 정답을 포함한 합성 데이터셋을 만들고 검수한 뒤, DeepEval의 LLM-as-a-Judge 기반 평가 환경을 활용했습니다. 평가에서는 검색의 적합성과 최종 답변의 충실성을 나누어 관찰했습니다.

특히 검색 실패가 발생했을 때 모델이 유사한 문서의 수치를 잘못 인용하는 패턴을 확인했습니다. 이 문제를 단순 프롬프트 수정만으로 처리하지 않고, 답변 이전 단계에 충분성 검증을 두는 방향을 선택했습니다.

검색 지표가 높아지는 것과 환각이 줄어드는 것은 관련이 있지만 동일한 목표는 아닙니다. 따라서 검색 Recall이나 순위 품질과 함께 근거에 대한 답변 충실성을 따로 확인해야 합니다.

정량 평가: 답변을 만들 수 없을 때의 환각 감소

2026년 9월 실험 결과입니다. 평가 모델은 GPT-5.6 Terra를 사용했고, 질문과 근거를 바탕으로 만든 합성 골든셋을 검수한 뒤 DeepEval의 LLM-as-a-Judge로 채점했습니다. 초기 게이트가 실제로 개선한 부분을 보려면, 정답이 존재하는 질문(answer)과 근거가 없어 답을 보류해야 하는 질문(no_result)을 분리해야 합니다.

1. 오프라인 게이트의 오차단부터 줄였습니다

게이트를 실제 챗봇에 적용하기 전에 기존 질문과 검색 근거만으로 판정했습니다.

  • 근거 없는 질문 탐지: 14/14 (100%)로 유지
  • 답할 수 있는 질문을 잘못 차단한 경우: 3/36 (8.3%) → 0/36 (0%)
  • 개선 방법: 사용자가 묻지 않은 세부 조건을 임의의 요구로 추가하지 않도록 프롬프트를 수정

답할 수 없는 질문을 많이 걸러내는 것만으로는 충분하지 않습니다. 정상 질문에 대한 과잉 기권을 얼마나 막았는지가 필수 평가 항목이었습니다.

2. 실제 에이전트 평가: 공통 45문항

기준선 두 회차와 게이트 적용 회차에 모두 채점 결과가 존재하는 동일한 45문항만 비교했습니다.

지표게이트 OFF (2차)게이트 ON
전체 통과38/4543/45
answer 통과30/3130/31
no_result 통과8/1413/14
평균 correctness0.8110.944

게이트 적용 후 평균 correctness는 0.811에서 0.944로 0.133 상승했고, 전체 통과 문항은 38건에서 43건이 됐습니다. 핵심은 개선이 발생한 위치입니다.

  • 답할 수 있는 질문은 30/31로 유지됐습니다.
  • 답할 수 없는 질문에서 올바르게 답변을 보류한 경우가 8/14에서 13/14로 증가했습니다.
  • 당시 게이트 판정 로그에서 answer 질문에 대한 과잉 기권 0건을 확인했습니다.

따라서 전체 점수만 보면 놓치기 쉬운 결론은 정상 답변을 줄이지 않으면서 근거 부족 질문의 잘못된 답변을 감소시켰다는 것입니다.

별도로, 환각 저항 질문 14개를 세 차례씩 반복한 하네스에서는 전체 통과가 27/42 → 36/42로 증가했습니다. 반복 실험에서도 개선 방향을 확인했습니다.

3. 평가에서 주의할 점

최초 50문항 회차에서는 API 크레딧이 소진되어 게이트 ON 결과 중 5건이 미채점됐습니다. 따라서 50문항 전체를 단순 비교하면 분모가 다릅니다. 위 표는 공통 45문항으로 다시 계산한 수치이며, 미채점 5건은 모두 시간 범위 질문이었습니다.

또한 C1 게이트는 당시 모든 요구가 불충분할 때만 답변 전체를 보류했습니다. 하나의 질문에서 일부는 답할 수 있고 일부는 답할 수 없다면 잘못된 부분 답변이 남을 수 있었습니다. 충분성 판정 자체도 LLM 호출이라 실행별 차이가 발생할 수 있습니다.

이 한계를 개선하기 위해 후속 구조에서는 요구별 충분성 판정을 읽기 도구 결과에 붙여, 무엇이 실제 답변의 근거이고 무엇이 검색 단서인지 에이전트가 구분하도록 했습니다. 이는 위 45문항의 게이트 실험과 다른 단계의 설계 변경이므로 수치를 혼합하지 않았습니다.

남아 있는 과제

  • 질문의 복잡도에 따라 충분성 기준을 어떻게 조절할 것인가
  • 기사와 논문처럼 길이와 구조가 다른 자료에 동일한 기준을 적용할 수 있는가
  • 충분성 판정 비용과 응답 지연을 어떻게 관리할 것인가
  • 잘못된 답변을 줄이면서 유용한 답변까지 과도하게 거절하지 않도록 만들 수 있는가

RAG의 목적을 단순히 문서를 찾아 자연스러운 문장을 만드는 데 두지 않았습니다. 찾은 자료로 무엇을 말할 수 있고, 무엇은 말할 수 없는지 구분하는 것을 중요한 품질 기준으로 삼고 있습니다.