RAG Knowledge Conflict 실습
RAG Knowledge Conflict 실습
Day4 실습은 RAG에서 제일 불편하지만 중요한 부분을 다뤘다. 검색된 문서가 항상 맞다고 볼 수 없고, 문서끼리도 서로 다른 말을 할 수 있다는 점이다.
처음에는 “RAG를 쓰면 모델이 모르는 걸 문서에서 찾아오니까 더 정확해진다”고만 생각했다. 그런데 이 실습을 하면서 생각이 바뀌었다.
1
2
3
RAG는 정답을 보장하는 장치가 아니라
근거를 가져오는 장치다.
그 근거가 맞는지는 따로 봐야 한다.
실습에서 본 충돌 유형
Context-Memory Conflict
모델이 원래 알고 있는 내용과 검색된 context가 다를 때 생기는 충돌이다.
예를 들어 모델은 일반적인 사실을 알고 있는데, 검색 문서에는 그와 다른 정보가 들어 있을 수 있다. 회사 내부 정책이나 최신 문서라면 검색 문서를 우선해야 할 수도 있고, 반대로 검색 문서가 잘못된 자료라면 그대로 따르면 안 된다.
1
2
3
모델 내부 지식: 일반적으로 알려진 사실
제공 context: 수업에서 임의로 만든 상충 정보
질문: 둘 중 어느 쪽을 근거로 답하는가
Inter-Context Conflict
검색된 문서들끼리 서로 다른 말을 할 때 생긴다. 실제 서비스에서는 이쪽이 더 자주 문제 될 것 같다. 같은 정책이라도 날짜가 다른 문서가 있을 수 있고, 같은 제품이라도 가격이나 버전이 다르게 적혀 있을 수 있다.
이 경우 단순히 top-1 문서를 믿으면 위험하다. 최신성, 공식성, 출처 신뢰도 같은 기준이 필요하다.
충돌을 먼저 감지하기
실습에서 좋았던 점은 바로 답을 만들지 않고, 충돌 여부를 먼저 보게 만든 점이다.
1
2
3
4
5
충돌 여부: 있음/없음
충돌 유형: context-memory / inter-context
충돌 항목: 가격, 날짜, 정책, 수치 등
우선 출처: 최신 공식 문서 / 사용자 제공 문서 / 내부 정책
답변 전략: 단정 / 보류 / 추가 확인 요청
이런 중간 판단을 두면 답변이 조금 길어질 수는 있지만, 적어도 모델이 아무 근거 없이 확신하는 문제를 줄일 수 있다.
conflict-aware answer
충돌이 있으면 답변도 달라져야 한다. 하나의 답만 말하기보다 어떤 문서들이 충돌했고, 어떤 기준으로 판단했는지 같이 적어야 한다.
예를 들면 이런 식이다.
1
2
3
검색된 문서 A와 B의 적용일이 다릅니다.
이 답변에서는 더 최근에 작성된 공식 문서 B를 우선합니다.
따라서 현재 기준으로는 ...
이렇게 쓰면 “왜 이 답을 했는지”가 남는다. RAG 서비스에서는 이게 꽤 중요하다고 느꼈다.
보안과 연결되는 지점
이 실습은 LLM 보안과도 이어진다. RAG 문서 안에 “이전 지시를 무시하라” 같은 문장이 들어 있으면, 모델이 그걸 명령처럼 받아들일 수 있다.
그래서 RAG 문서는 정보로만 다뤄야 한다. context 안의 내용이 시스템 지시보다 우선하면 안 된다.
다시 정리
이 실습 이후로 RAG를 볼 때 기준이 하나 늘었다.
1
2
3
검색 결과가 있는가? -> 부족함
검색 결과가 맞는가? -> 봐야 함
검색 결과끼리 충돌하는가? -> 더 봐야 함
앞으로 RAG를 구현할 때는 답변 생성 전에 conflict check를 어디에 넣을지 생각해야 한다.