본문 바로가기
Q&A해결2026년 8월 15일1분 읽기

RAG인데도 검색된 근거를 무시하고 지어내서 답합니다. 컨텍스트를 안 읽는 걸까요

r
rag_narae
조회 487댓글 4

RAG 파이프라인을 붙였는데 환각 문제가 안 잡힙니다. 벡터 검색으로 관련 문서를 뽑아서 프롬프트에 컨텍스트로 넣고 답변을 생성하는데, 검색된 청크를 제가 눈으로 확인해보면 정답이 분명히 들어있어요. 그런데 모델은 그걸 무시하고 엉뚱한 걸 지어내서 답합니다.

프롬프트는 대략 "다음 문서를 참고해서 질문에 답하세요" 뒤에 검색 청크들 붙이고 마지막에 질문 넣는 구조예요. 컨텍스트가 프롬프트에 실제로 들어가는 것도 로그로 확인했고요.

모델이 컨텍스트를 아예 안 읽는 것도 아닌 게, 부분적으론 문서 내용을 반영하기도 해요. 근데 결정적인 숫자나 사실 부분에서 문서랑 다른 값을 자신있게 뱉습니다. 검색은 되는데 왜 근거를 안 쓰는 건지 모르겠어요.

댓글 4

김김영삼2개월 전
원인이 몇 갈래라 하나씩 짚어야 해요.

1) 먼저 정말 그 청크에 답이 온전히 들어있는지 다시 보세요. 사람 눈엔 관련 문단으로 보여도, 청크가 문장 중간에 잘려서 결정적인 숫자가 다음 청크로 넘어가 있는 경우가 흔합니다. 그러면 모델 입장에선 근거가 반쪽이라 나머지를 지어내요. 청크 오버랩을 늘리거나 경계 기준으로 자르면 이게 줄어듭니다.

2) 프롬프트가 모델한테 사전지식 쓸 여지를 주고 있어요. "참고해서 답하세요"는 약합니다. "주어진 문서에 있는 내용만으로 답하고, 문서에 없으면 모른다고 말하라"고 명시적으로 못 박고, 컨텍스트를 구분자로 확실히 감싸세요. 가능하면 어느 문장을 근거로 썼는지 인용하게 하면 지어내기가 확 줄어요.

3) 청크를 너무 많이 넣으면 중간에 있는 정보를 흘립니다. 긴 컨텍스트에서 가운데가 묻히는 현상이에요. top-k를 줄이고 리랭커로 진짜 관련된 상위 몇 개만 남기세요.

숫자를 자신있게 틀리는 건 대부분 1번이나 2번입니다. 그 둘부터 잡아보세요.
rrag_narae(guest)2개월 전
"문서에 있는 내용만 쓰고 없으면 모른다고 하라"로 프롬프트를 바꿨더니 지어내는 건 확 줄었어요. 근데 이번엔 반대로 너무 몸을 사립니다. 청크에 답이 나눠서 들어있는 경우엔 조합하면 답할 수 있는데도 "문서에 없습니다"라고 해버려요. 어떻게 균형을 잡나요?
김김영삼2개월 전
과하게 거부하는 쪽으로 넘어간 거네요. 지시를 조금 풀어주면 됩니다. "문서에 없으면 모른다고 하라"에 "단, 여러 문서에 나눠져 있는 정보는 종합해서 답해도 된다"를 덧붙이세요. 그러면 완전 없는 건 거부하되, 조각난 근거는 합쳐서 답합니다.

그리고 이 증상 자체가 1번 문제(청크가 답을 반토막 낸다)의 신호이기도 해요. 답이 두 청크에 걸쳐 있으면 모델이 각각은 불완전하다고 보고 몸을 사리는 거예요. 오버랩을 좀 늘리거나 관련 청크를 top-k에서 넉넉히 확보해주면 한 프롬프트 안에 답 조각이 다 모여서 종합이 쉬워집니다. 지시 문구랑 청킹을 같이 만지면 균형이 잡혀요.
rrag_narae(guest)2개월 전
종합해도 된다는 문구 넣고 오버랩 늘리니까 딱 원하는 수준으로 답합니다. 근거 무시도 안 하고 과하게 거부하지도 않고요. 두 개를 같이 만져야 했던 거네요. 감사합니다 🙏
Ctrl+Enter로 등록