생성 단계의 진짜 기술은 프롬프트 문구가 아니라 무엇을 컨텍스트에 넣지 않을지, 그리고 언제 답하지 않을지를 결정하는 파이프라인이다. 근거가 되는 발견 네 가지부터.
컨텍스트 조립의 과학
- 배치 순서 — Lost in the Middle(TACL 2024): 정답 청크가 중간에 있으면 정확도 20점+ 하락, 클로즈드북보다도 낮아진다. 최고 점수 청크를 맨 앞에(LangChain LongContextReorder가 구현). k를 늘릴수록 좋은 청크가 죽은 중간으로 밀린다는 것도 k를 아끼는 이유.
- 가장 위험한 건 "비슷하지만 쓸모없는" 청크 — The Power of Noise(SIGIR 2024): 검색기의 고점수 근접 오답(distractor)이 정확도를 적극적으로 깎는다. 코사인 유사도가 아니라 answer-bearing 여부로 리랭킹해야 하는 이유.
- "컨텍스트에 없으면 모른다고 해" 프롬프트는 실패한다 — Sufficient Context(ICLR 2025): 프런티어 모델들은 컨텍스트가 불충분해도 자신 있게 오답한다. 지시가 아니라 명시적 충분성 게이트(저렴한 분류기/오토레이터)로 abstention을 트리거하면 정답률 2~10% 개선.
- 모델은 틀린 문서도 충실히 반복한다 — ClashEval(NeurIPS 2024): 문서를 조작해 틀리게 만들면 모델이 자기 정답 지식을 버리고 틀린 문서를 60%+ 채택. 낡은 정책 문서 방치가 곧 생성 품질 문제다. 상충 문서가 있으면 출처 분리·귀속 후 답하게 하는 Astute RAG 레시피(ACL 2025) 참고.
인용 — 정규식 파싱의 시대는 끝났다
프롬프트로 [1][2] 마커를 시키는 방식은 ALCE 벤치마크 기준 주장의 50%가 인용 미지원일 만큼 부정확하다. 2026년의 답은 API 네이티브: Anthropic Citations API — RAG 청크를 custom content 블록으로 넣으면 검증된 cited_text와 위치 인덱스가 반환되고(환각 인용 불가), cited_text는 출력 토큰에 과금 안 되며, citations_delta로 스트리밍 인용 UX까지 해결된다. 함정 하나: 인용과 structured output은 한 호출에서 양립 불가(400 에러) — "인용 달린 JSON"은 2회 호출 또는 Cohere식 span 인용으로.
출고 전 검증 — CPU로 돌아가는 환각 게이트
응답을 문장 단위로 쪼개 검색 청크가 지지하는지 NLI로 검사: MiniCheck(770M, GPT-4급 정확도를 ~400분의 1 비용) 또는 Vectara HHEM-2.1(0.1B, CPU에서 2k토큰 ~1.5초, Apache 2.0). 임계값 ~0.5 미만이면 재생성 또는 abstain — 전 응답에 돌릴 수 있을 만큼 싸다.
롱컨텍스트 시대의 top-k
Databricks 13개 모델 실측: 대부분의 모델이 32~64K 이후 성능 저하 + 기괴한 모델별 실패(Claude 3 Sonnet의 저작권 거부 3.7%→49.5%, DBRX는 요약으로 퇴행). 리랭킹된 top 5~10 청크(~8-32K 토큰)를 유지하고, 필요하면 Self-Route로 라우팅. 멀티턴 챗봇이면 두 가지 필수: 검색 전 질문을 독립형으로 재작성 + 턴마다 답변 가능성 체크(MTRAG 벤치마크가 보여준 후반 턴 붕괴 대응).
한 줄 요약: 생성기는 먹인 것을 충실히 반복한다 — 그래서 생성 단계의 기술은 먹이지 않을 것과 답하지 않을 때를 정하는 것이다.
— RAG 실전 시리즈 ⑦ / 다음 글: 고급 패턴 — GraphRAG의 비용, agentic RAG의 손익
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.