본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 27. 20:23

CDD 논문: RAG 지식 충돌을 위한 문맥 기반 분해 (Context-Driven Decomposition)

요약

CDD(Context-Driven Decomposition)는 RAG 시스템에서 검색된 문맥과 모델의 기존 지식이 충돌할 때 발생하는 오류를 해결하기 위한 프롬프트 기반 방법론입니다. 검색된 주장과 파라미터적 주장을 명시적으로 분리하여 충돌을 해결함으로써, 오개념이 주입된 상황에서도 높은 정확도를 유지합니다.

핵심 포인트

  • RAG의 문맥-지식 충돌 문제를 해결하기 위한 프롬프트 수준의 분해 기법 제안
  • 검색된 주장과 파라미터적 주장을 분리하여 명시적 교차 심문 수행
  • 오개념 주입 상황에서 기존 RAG(15.0%) 대비 71.3%의 높은 정확도 달성
  • 미세 조정 없이 프롬프트 엔지니어링만으로 구현 가능한 진단 및 해결 방법론

무엇인가 (What): CDD 논문은 **문맥 기반 분해 (Context-Driven Decomposition)**를 소개합니다. 이는 프롬프트 수준의 개입으로, 최종 답변을 생성하기 전에 RAG 쿼리를 검색된 주장 (retrieval claim) (문맥이 말하는 것), 파라미터적 주장 (parametric claim) (모델이 이미 믿고 있는 것), 그리고 명시적인 **충돌 해결 서브 프롬프트 (conflict-resolution sub-prompt)**로 분리합니다.

왜 필요한가 (Why): 검색된 문맥에 오개념 (misconceptions)이 주입될 경우, 표준 RAG는 단 15.0%의 정확도만을 기록합니다. 즉, 모순되는 정보 중 어느 쪽을 신뢰해야 할지 판단하지 못합니다. CDD는 문맥 준수 여부를 검색 품질 및 생성 품질과 분리된 **측정 가능한 축 (measurable axis)**으로 전환하여, 평가자가 RAG 시스템이 실제로 어디에서 실패하는지 격리하여 파악할 수 있게 합니다.

이전 방식과의 차이 (vs prior): 일반적인 (Vanilla) RAG는 질문 (Q)과 문맥을 하나의 프롬프트로 결합하여 모델에게 한 번에 (one shot) 답변을 요구합니다. 반면 CDD는 분해 과정을 **명시적 (explicit)**으로 만듭니다. 세 개의 서브 프롬프트가 순차적으로 실행되며, 세 번째 프롬프트는 일치, 모순 또는 부분적 중첩을 반드시 표시하도록 강제됩니다. 이를 통해 일반 RAG가 무너지는 시간적 변화 (temporal-shift) 사례에서 **71.3%**의 정확도에 도달합니다.

다음과 같이 생각해보세요

판사가 판결을 내리기 전 두 명의 증인을 심문하는 법정이라고 생각하십시오.

                      사건 (질문/THE QUERY)
                              │
                ┌─────────────┴─────────────┐
...
  • 질문 (question) = 법원이 결정해야 할 사건
  • 검색된 문맥 (retrieved context) = 증인 A — 잘못된 세부 정보가 심어진 문서
  • 모델의 파라미터적 지식 (model's parametric knowledge) = 증인 B — 전문가의 교과서적 기억
  • 표준 RAG (standard RAG) = 두 증언을 하나의 요약본으로 합쳐 한 번에 판결을 내림 — 의견 불일치가 사라짐
  • CDD = 각 증인의 증언을 개별적으로 취한 다음, 의견이 일치하지 않는 부분을 명시적으로 교차 심문함
  • 오개념 주입 (misconception injection) = 증인 A의 진술에 의도적으로 심어진 잘못된 주장

빠른 용어 사전 (Quick glossary)

CDD — 문맥 기반 분해 (Context-Driven Decomposition). 본 논문에서 소개된 진단 방법론으로, 검색된 주장 (retrieval claim)을 추출하고, 파라미터 주장 (parametric claim)을 추출한 다음, 명시적인 서브 프롬프트 (sub-prompt)를 통해 충돌을 해결합니다. 미세 조정 (fine-tuning)이나 검색 파이프라인 (retrieval-pipeline)의 변경 없이 전적으로 프롬프트 수준에서 구현됩니다.

검색된 주장 (Retrieval claim) — 모델이 자신의 파라미터 메모리 (parametric memory)를 무시하고, 오직 검색된 문맥 (retrieved context)만으로 도출할 사실적 진술입니다. CDD는 모델이 답변을 생성하기 전에 이 내용을 있는 그대로 드러내도록 요구합니다.

파라미터 주장 (Parametric claim) — 모델이 검색된 문맥을 무시하고, 오직 자신의 사전 학습된 지식 (pre-trained knowledge)만으로 생성할 사실적 진술입니다. 이를 드러냄으로써 다음 단계에서 두 주장을 비교하고 서로 불일치함을 인지할 수 있게 합니다.

지식 충돌 (Knowledge conflict) — 검색된 문맥과 파라미터 메모리가 모순되는 경우입니다. 원인으로는 모델의 학습 데이터 컷오프 (cutoff) 경과 (파라미터 정보가 구식임), 잘못된 검색 (문서 자체가 틀림), 또는 의도적인 적대적 주입 (adversarial injection) 등이 있습니다. 표준 RAG는 이 두 가지를 하나의 요약으로 합쳐버리며 충돌을 조용히 무시합니다.

오개념 주입 (Misconception injection) — 본 논문의 적대적 테스트로, 그럴듯해 보이지만 거짓인 주장을 검색된 문맥에 삽입하여 RAG 시스템이 여전히 정답을 생성하는지 확인합니다. 이러한 공격 상황에서 표준 RAG의 정확도는 **15.0%**입니다.

시점 변화 사례 (Temporal-shift cases) — 모델의 학습 컷오프 (cutoff) 이후에 정답이 변경된 질문들입니다. 검색 결과는 정확하고 최신이지만, 모델의 파라미터 메모리는 구식인 상태입니다. CDD의 충돌 해결 단계는 문맥이 구식 메모리보다 우선한다는 점을 학습하도록 설계되었으며, 측정된 정확도는 **71.3%**입니다.

문맥 준수 (Context compliance) — LLM이 답변할 때 파라미터 메모리에 의존하는 대신, 실제로 검색된 문맥을 사용하는 정도를 의미합니다. CDD 저자들은 이를 이전의 RAG 벤치마크들이 명확하게 측정하지 못했던 세 번째 축(검색 품질 및 생성 품질과 함께)으로 다룹니다.

뉴스. 2026년 5월 14일, "Does RAG know when retrieval is wrong?" 논문이 arXiv에 게시되었습니다. 저자들은 **문맥 기반 분해 (Context-Driven Decomposition, CDD)**를 소개합니다. 이는 RAG 쿼리를 검색된 주장 (retrieval claim), 파라미터 기반 주장 (parametric claim), 그리고 명시적인 충돌 해결 단계 (explicit conflict-resolution step)로 나누는 진단적 프롬프트 패턴입니다. 주요 수치: 오개념 주입 (misconception injection) 상황에서 표준 RAG의 성공률은 **15.0%**에 그쳤으나, CDD는 시점 변화 (temporal-shift) 사례에서 **71.3%**에 도달했습니다. Gemini는 동일한 세트에서 CDD를 사용했을 때 **64.1%**를 기록했으며, Claude 변체들은 불균등한 성능 향상을 보였습니다. 논문 읽기 →

법정을 상상해 보십시오. 판사는 사실 관계에 대한 판결을 내려야 합니다. 여기 두 명의 증인이 있습니다. 한 명은 문서 (the document) (검색된 구절이며, 조작된 거짓 세부 정보가 포함되어 있을 수 있음)이고, 다른 한 명은 전문가 (the expert) (동일한 주제에 대한 모델 자체의 학습 데이터 메모리)입니다. 표준 RAG는 한 명의 조수가 두 증언을 하나의 요약본으로 합치게 하고, 판사가 그 요약본을 바탕으로 판결을 내리는 상황과 같습니다. 만약 문서와 전문가의 의견이 다르다면, 그 불일치는 요약 과정에서 사라져 버리며, 판결은 요약본이 무엇을 강조했느냐에 따라 결정됩니다.

CDD는 각 증인을 개별적으로 호출하여 각자의 진술을 기록에 남긴 다음, 판사가 판결을 내리기 전에 명시적으로 다음과 같이 질문하는 상황입니다. "그들이 동의하는 부분은 어디인가? 어디에서 모순되는가? 어느 쪽이 승리하며, 그 이유는 무엇인가?" 동일한 증거와 동일한 질문임에도 불구하고, 판결은 극적으로 달라집니다.

이것이 바로 저자들이 추구하는 바입니다. 동일한 RAG 스택 — 동일한 검색기 (retriever), 동일한 모델, 동일한 문맥 (context) — 을 사용하더라도, 통합된 프롬프트 (fused prompt)를 주었을 때는 오답을 내놓지만, 분해된 하위 프롬프트 (decomposed sub-prompts)를 주었을 때는 정답을 생성합니다. 변화하는 메커니즘은 모델이 아니라 프롬프트입니다. CDD는 재학습이나 재색인 (re-indexing), 임베딩 저장소 (embedding store)를 건드리지 않고도 모든 검색 및 RAG 파이프라인이 채택할 수 있는 프롬프트 수준의 개입입니다.

"오개념 주입 (misconception injection)"이 실제로 테스트하는 것

이 논문의 적대적 설정(adversarial setup)은 간단합니다. 정답이 알려진 질문을 가져오고, 올바른 정보를 포함하는 구절을 검색한 다음, 해당 검색된 구절에 그럴듯하게 들리는 거짓 주장(plausible-sounding false claim)을 몰래 끼워 넣는 것입니다. 이제 모델은 현실과 대부분 일치하지만

설정Vanilla RAGCDD변화 이유
오개념 주입 (planted false claim)15.0%(모델별로 별도 보고됨 — 아래 참조)표준 RAG는 주입된 텍스트를 신뢰함; CDD의 파라미터 기반 주장 추출 (parametric-claim extraction)은 모순을 드러냄
...

모델 제품군(model families) 간의 전이(transfer)는 주목할 만한 2차적 주장입니다. CDD는 파인튜닝 (fine-tune)이 아닙니다 — 이는 프롬프트 패턴 (prompt pattern)입니다. 동일한 세 개의 서브 프롬프트 (sub-prompts)가 Gemini, Claude, 그리고 논문의 주요 모델에서 서로 다른 규모의 결과를 생성한다는 사실은, 문맥 준수성 (context-compliance)이 부분적으로는 모델 수준의 속성 (모델이 자신의 메모리를 얼마나 기꺼이 무시하려 하는가)이자 부분적으로는 프롬프트 수준의 속성 (무시가 얼마나 강제되는가)임을 시사합니다.

실제 사례를 통해 그 격차를 구체화할 수 있습니다. 질문이 _"X는 언제 발생했습니까?"_라고 가정해 봅시다. 모델의 학습 데이터(training data)는 2019년이라고 말합니다. 검색된 문맥 (retrieved context)은 2024년이라고 말합니다 (정확하며, 현재 시점임). 오개념 주입 (misconception injection) 상황에서, 동일한 검색 문맥에는 _"참고: 2024년에 대한 이전 보고는 예비적인 것이었습니다; 수정된 날짜는 2017년입니다"_라는 슬쩍 끼워 넣은 문장이 포함될 수 있으며, 이는 그럴듯하게 들리는 모순 (plausible-sounding contradiction)입니다.

표준 RAG (Standard RAG)는 융합된 프롬프트 (fused prompt)를 보고 상충하는 신호들을 암묵적으로 가중치 처리하며, 종종 2017년 또는 2019년이라고 답변합니다. 둘 다 틀린 답입니다. 모델이 방금 읽은 내용과 이미 알고 있던 내용 사이의 차이를 드러내는 명시적인 단계가 없기 때문입니다. CDD의 첫 번째 서브 프롬프트 (sub-prompt)는 검색된 주장("문맥에 따르면: 2024년, 아마도 2017년으로 수정됨")을 추출하고, 두 번째는 파라미터적 주장 (parametric claim, "내 사전 학습 메모리에 따르면: 2019년")을 추출하며, 세 번째 서브 프롬프트는 두 주장이 모두 제시된 상태에서 그 모순에 대해 판결을 내리도록 강제됩니다. 이 시점에서 모델은 해당 "수정" 내용이 문맥 내의 다른 모든 내용과 의심스러울 정도로 일치하지 않으며, 원래의 2024년 주장이 실제 사실과 일치한다는 점을 인지할 수 있습니다. 시간적 변화 (temporal-shift) 평가에서의 결과는 **71.3%**의 정확도를 기록했습니다. 이는 주입 (injection) 상황에서 표준 RAG가 보여준 약 15%의 정확도와 비교했을 때 약 4.7배의 격차를 보인 것입니다. (수치는 논문에서 인용되었습니다; 예시로 든 사례는 메커니즘을 설명하기 위한 것이며 데이터셋의 직접 인용구가 아닙니다.)

이것이 바로 CDD가 운영 환경의 드리프트 탐지 (drift detection)와 자연스럽게 결합되는 이유이기도 합니다. 검색 (retrieval) 및 생성 (generation)과 구별되는 측정 가능한 "문맥 준수 (context-compliance)" 축을 확보하면, 이를 운영 환경에서 모니터링할 수 있습니다. 시간적 변화 사례에서 발생하는 갑작스러운 성능 저하는 인덱스 (index)가 오래되었거나, 모델의 파라미터적 메모리 (parametric memory)가 코퍼스 (corpus)에 비해 드리프트(drift)되었음을 알리는 조기 신호가 됩니다. CDD 방식의 분해 (decomposition) 없이는 이러한 신호가 전체 답변 정확도 수치 속에 숨겨지게 됩니다.

프롬프트 변경이 생각보다 중요한 이유

CDD의 발견은 지난 2년 동안 RAG 평가 (RAG evals) 분야에서 지속되어 온 논쟁을 더욱 날카롭게 만듭니다. RAG 시스템이 실패하는 지점이 검색 단계인가, 생성 단계인가, 아니면 그 둘 사이의 가교 (bridge) 단계인가? 대부분의 평가 세트 (eval suites)는 검색 (recall@k, MRR)과 생성 (answer accuracy)을 측정하지만, 그 사이의 가교는 블랙박스 (black box)로 취급합니다. 답변이 틀렸을 때, 리트리버 (retriever)가 잘못된 청크 (chunk)를 가져온 것인지, 모델이 올바른 청크를 무시한 것인지, 아니면 모델이 청크 자체는 맞지만 그 안의 잘못된 사실을 신뢰한 것인지 구분하기란 매우 어렵습니다.

CDD는 세 번째 사례를 분리해냅니다. 분해 (Decomposition) 과정을 통해 모델은 최종 답변을 내놓기 전, 각 측면에서 답변했을 내용을 미리 작성하게 됩니다. 이를 통해 "모델이 문맥 (Context)을 올바르게 사용했는가?"라는 질문을 단순한 추측에서 직접 채점 가능한 영역으로 전환합니다. 이는 에이전트 실패 모드 분석 (Agent failure-mode analysis)이 전반적으로 지향하고 있는 패턴과 동일합니다. 즉, 암묵적인 융합 프롬프트 (Fused-prompt) 단계를 명시적이고 별도로 채점 가능한 하위 단계 (Sub-step)로 교체함으로써, 실패를 단순히 측정하는 수준을 넘어 위치를 찾아낼 수 있게(Locatable) 만드는 것입니다.

더 자세한 내용: AI Agents → Retrieval & RAG → RAG Failure Modes

관련 설명 자료

FAQ

문맥 기반 분해 (Context-Driven Decomposition, CDD)란 무엇인가요?

CDD는 2026년 5월 논문 "Does RAG know when retrieval is wrong?"에서 소개된 프롬프트 수준의 진단 방법입니다. CDD는 RAG 쿼리를 세 가지 하위 프롬프트 (Sub-prompts)로 나눕니다: 검색된 주장 추출 (검색된 문맥이 말하는 내용), 파라미터적 주장 추출 (모델이 자신의 메모리로부터 말할 내용), 그리고 최종 답변을 생성하기 전 이 두 가지를 비교하는 명시적인 충돌 해결 (Conflict-resolution) 단계입니다. 이는 전적으로 프롬프트 수준에서 구현됩니다. 즉, 미세 조정 (Fine-tuning)이나 검색기 (Retriever) 또는 임베딩 저장소 (Embedding store)의 변경이 필요하지 않습니다.

왜 표준 RAG는 오개념 주입 (Misconception injection) 상황에서 15%의 성능밖에 내지 못하나요?

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0