25장. RAG는 지식을 넣는 기술이 아니라 근거를 찾는 시스템이다
RAG(Retrieval-Augmented Generation)는 질문과 관련된 자료를 검색해 모델 입력에 추가한다. 최신 사내 문서나 긴 지식베이스를 다룰 때 유용하다. 그러나 벡터 데이터베이스를 설치했다고 답이 근거를 갖는 것은 아니다.
RAG 품질은 다음 사슬의 곱이다.
문서 품질 × 권한 필터 × 분할 × 검색 × 재순위 × 인용 × 답변 검증
낡은 문서가 많거나 권한이 잘못되면 검색이 좋아도 위험하다. 문서마다 owner, version, valid_from, valid_to, data_class를 둔다. 사용자 권한을 검색 전에 적용한다. 검색 결과 뒤에 필터링하면 이미 민감한 내용이 모델로 전송될 수 있다.
평가는 검색과 답변을 분리한다.
- retrieval recall: 필요한 근거가 상위 결과에 있는가?
- precision: 무관 자료가 너무 많이 섞이지 않는가?
- citation correctness: 인용 문서가 주장을 직접 지지하는가?
- answer completeness: 필요한 쟁점을 빠뜨리지 않았는가?
- abstention: 근거가 없을 때 답을 보류하는가?
문서를 너무 작게 나누면 맥락을 잃고 너무 크게 나누면 관련 없는 내용이 들어온다. 제목과 계층을 함께 저장하고 실제 질문으로 chunk 크기를 실험한다.
RAG가 필요 없는 경우도 많다. 자료가 다섯 개이고 매번 명확히 선택할 수 있다면 직접 컨텍스트로 넣는 편이 단순하다. 검색 인프라는 운영 비용과 새로운 공격 표면을 만든다.
RAG 장애를 위치별로 진단한다
정답이 틀렸을 때 모델부터 바꾸지 않는다. 필요한 문서가 원문에 있는지, 색인되었는지, 사용자 권한을 통과했는지, top-k에 들어왔는지, 모델 입력에 전달되었는지 순서대로 본다.
원문 → ingestion → chunk → index → permission filter
→ retrieval → rerank → context → answer → citation check
검색 로그에는 민감 원문 대신 source ID, chunk ID, 점수, 필터, index version을 남긴다. 문서 삭제와 권한 회수가 색인·캐시에 전파되는 시간을 시험한다. 답에 인용이 있어도 해당 chunk가 주장을 직접 지지하는지 별도로 검사한다.