본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 26. 00:52

MADCAP: 당신이 직접 할 필요 없이 스스로 논쟁하는 멀티 에이전트 토론 CLI 구축하기

요약

MADCAP은 LLM 간의 구조화된 멀티 에이전트 토론을 구현한 실험적 CLI 프로젝트입니다. 답변자, 비평가, 판사 역할을 하는 세 개의 에이전트가 상호작용하며, 질문 재작성과 정보 병목 설계를 통해 AI의 아첨(sycophancy) 현상을 방지합니다.

핵심 포인트

  • 답변자, 비평가, 판사의 3자 토론 구조 채택
  • 질문 재작성을 통한 사용자 유도 심문 및 편향 차단
  • 정보 병목 설계를 통한 에이전트 간 무의미한 합의 방지
  • 실험적 성격의 토이 프로젝트 및 오픈소스 라이브러리

MADCAP (Multi-Agent Debate with a Critic-And-Profile loop). LLM(Large Language Models) 간의 구조화된 멀티 에이전트 토론을 탐구하는 토이 프로젝트(toy project)입니다. 정보 병목(information bottleneck), 메모리가 없는 비평가(memoryless critic), 그리고 라운드 간 프로파일링 루프(cross-round profiling loop)를 포함합니다.

주의 사항: 이 프로젝트는 현재 진행 중인 작업입니다. 흥미로운 점이 발견될 때마다 리포지토리(repo)에 변경 사항이 푸시되며, 예고 없이 기존 기능이 작동하지 않을 수 있습니다. 최신 버전은 아예 작동하지 않을 수도 있습니다. 이것은 안정적인 라이브러리가 아닌 실험을 위한 놀이터(playground)입니다. 이에 따라 적절히 취급해 주세요.

이 리포지토리는 MIT 라이선스이며 다음 위치에 있습니다: https://github.com/arepetti/madcap

요약 버전

단일 LLM의 답변을 신뢰하는 대신, 세 개의 LLM이 서로 논쟁하게 만들면 어떤 일이 발생하는지 보고 싶었습니다. 자신감 넘치는 **답변자 (Answerer)**가 답변 초안을 작성하면, 회의적인 **비평가 (Critic)**가 이를 스트레스 테스트(stress-tests)하고, 공정한 **판사 (Judge)**가 진행을 맡아 판결을 내립니다. 사용자는 재구성된 질문, 모든 토론 라운드, 그리고 신뢰도 라벨(confidence label)이 붙은 최종 답변까지 모든 과정이 전개되는 것을 지켜보게 됩니다.

이것이 바로 MADCAP (Multi-Agent Debate with a Critic-And-Profile loop)입니다. 이것은 토이(toy)이며, 놀이터(playground)입니다. 제품이 되려고 노력하는 것이 아닙니다.

결과적으로 논문들은 많은 실패 모드(failure modes)를 지적하고 있었습니다. 따라서 흥미로운 부분은 "세 개의 LLM이 서로 대화하는 것"이 아닙니다 (그것은 주말이면 끝낼 수 있는 프로젝트입니다). 흥미로운 부분은 그들이 서로 무의미할 정도로 합의해 버리지 않도록 만드는 것입니다.

이 프로젝트가 다른 점

메커니즘 측면에서 이것은 Du et al. [1] 및 Liang et al. [11]의 계보를 잇는 멀티 에이전트 토론 (Multi-Agent Debate, MAD) 설정이며, 기존의 "토론을 통한 AI 안전성 (AI safety via debate)" [2] 아이디어의 실용적인 사촌 격입니다. 정(thesis), 반(antithesis), 합(synthesis): 답변자가 제안하고, 비평가가 반박하며, 판사가 무게를 달아 판결을 내립니다. 이 자체는 급진적이지 않습니다.

세 가지 설계 선택이 이 프로젝트만의 독특한 풍미를 부여합니다:

  • 사용자의 질문은 토론에 절대로 있는 그대로 전달되지 않습니다. 판사는 먼저 질문을 중립적이고 정밀한 형태로 재작성합니다(그 과정에서 사용자에게 명확한 설명을 요청할 수도 있습니다). 모든 참여자는 이렇게 정제된 버전을 바탕으로 토론합니다. 핵심은 아첨 (sycophancy) [3, 4]을 입구에서부터 차단하여, 답변자가 사용자가 입력한 유도 심문 성격의 프레이밍 (framing)을 전혀 접하지 못하게 하는 것입니다. 이는 새로운 아이디어는 아니지만 (프롬프트 재작성 (prompt rewriting)은 편향 관련 문헌 [8, 9, 20]에서 다양한 이름으로 등장합니다), 사후적인 기교가 아니라 토론이 시작되기 에 이를 수행한다는 점이 이 설정의 특징입니다.

  • 답변자 (answerer)와 비판자 (critic) 사이의 단방향 정보 병목 (information bottleneck). 답변자가 답변을 할 때마다, 판사는 이를 (수사학, 완곡한 표현, 설득적 프레이밍을 제거한) 중립적인 사실로 다시 진술하며, 비판자는 오직 이 재진술된 내용만을 봅니다. 답변자는 비판자의 말을 가감 없이 듣지만, 비판자는 오직 판사의 필터를 거친 답변자의 내용만을 듣게 됩니다. 목표는 비판자가 문체 (prose)가 아닌 주장 (claim)을 두고 논쟁하게 하는 것입니다 [8, 16].

  • 라운드를 관통하는 답변자의 약점 프로필. 판사는 답변자의 실패에서 반복되는 패턴을 조용히 관찰하고, 이를 향후 비판자들에게 전달합니다. 예를 들어, 답변자가 단일 사례로부터 계속해서 과도한 일반화를 한다면, 5라운드의 비판자는 이미 그 부분을 파고들 준비가 되어 있습니다.

세 명의 등장인물

답변자 (Answerer)

실제로 질문에 답하려고 시도하는 주체입니다. 답변자에게는 직설적으로 말하고, 틀렸을 때는 인정하며, 출처를 지어내지 말라고 지시됩니다. 답변자는 라운드 전반에 걸쳐 자신의 기억을 유지할 수 있어 (이전 논의를 바탕으로 발전할 수 있음) 이전 내용을 활용할 수 있지만, 비판자가 무언가를 기억할 것이라고는 기대할 수 없습니다. 왜냐하면...

비판자 (Critic)

...비판자는 매 질문마다 처음부터 다시 구축됩니다. 기억이 없습니다. 지난 토론을 본 적도 없습니다. 비판자의 유일한 임무는 스트레스 테스트 (stress-test)입니다. 즉, 가장 강력한 반대 입장을 논증하고, 근거 없는 주장을 지적하며, 숨겨진 가정을 드러내는 것입니다.

이 시스템이 사용하는 한 가지 구체적인 기법은 **부정-으로서-반전 (negation-as-inversion)**입니다. 어떤 주장 X를 가져와서, "만약 X가 아니라면 어떨까?"라고 스스로 논증하도록 강제하는 것입니다. 숨겨진 가정은 부정된 형태에서 훨씬 더 쉽게 발견됩니다 ("마이크로서비스를 사용해야 한다" vs "마이크로서비스를 사용하지 않는다면 어떨까?"). 이는 고전적인 인지 편향 (cognitive-bias) 연구 [21]에서 나온 "반대 상황을 고려하라 (consider the opposite)"라는 편향 제거 (debiasing) 전략의 런타임 (runtime) 버전입니다.

결정적으로: 비판자 (critic)는 답변자 (answerer)의 실제 단어를 절대 보지 못합니다. 오직 판사 (judge)의 중립적인 재진술만이 비판자에게 전달됩니다. 그리고 비판자는 진정으로 끝났을 때만 "더 이상의 이의 없음"이라고 말합니다. 인위적인 드라마를 만들어내지 않습니다.

왜 메모리리스 (memoryless)인가요? MAD 관련 문헌 [6, 10, 11]에서 계속해서 동일한 사실을 발견하고 있기 때문입니다. 에이전트들이 컨텍스트 (context)를 공유하고 이력을 축적하면, "토론"은 대립적인 성격을 잃고 에코 체임버 (echo chamber, 반향실)가 되어버립니다. 아첨하는 순응 (sycophantic conformity) [10], 사고의 퇴화 (degeneration of thought) [11], 더 강력한 모델이 더 약한 동료의 틀린 답으로 표류하는 현상 등 흔히 발생하는 문제들이 나타납니다. 비판자의 메모리를 지우는 것은 이 모든 문제에 대한 가장 저렴한 방어책입니다.

판사 (Judge)

가장 바쁜 역할입니다. 이 역할은 LLM-as-a-Judge [5]인 동시에, 중재하고, 정규화하며, 판결을 내린다는 의미에서 Ma et al. [6]이 정의한 메타-판사 (Meta-Judge) 역할을 수행합니다. 질문 하나당 세 단계로 진행됩니다:

  • 1단계: 재진술 (rephrase). 질문이 충분히 명확한가? 그렇다면 중립적으로 다시 작성합니다. 그렇지 않다면 사용자에게 명확히 해달라고 요청하고 준비될 때까지 루프 (loop)를 돕니다.
  • 2단계: 중재 및 판결 (mediate and verdict). 각 답변자의 답변을 중립적인 사실로 재진술합니다 (이 과정이 병목 (bottleneck) 구간입니다). 마지막으로, 비판자의 이의 제기를 컨텍스트로 삼아 신뢰도 라벨 (confidence label)과 함께 최종 답변을 내놓습니다.
  • 3단계: 프로필 노트 (profile note). 토론이 끝난 후, 답변자의 성향에 대해 최대 한 개의 관찰 사항을 생성합니다. 스타일적인 요소(길이, 형식, 어조)는 거부됩니다. 오직 실질적인 약점만이 고려됩니다.

질문 하나에 대한 엔드투엔드 (End-to-end) 흐름

  1. 설정 (Setup). 판사 (Judge)와 비판자 (Critic)는 새롭게 재구축됩니다. 답변자 (Answerer)는 자신의 메모리를 유지합니다.
  2. 재구성 (Rephrase). 판사는 만족할 때까지 질문을 다시 쓰거나 명확한 설명을 요구합니다.
  3. 토론 (Debate). 제한된 루프: 답변자가 응답함 → 판사가 이를 중립적인 사실로 재진술 (Restate) 함 → 비판자는 오직 재진술된 내용만을 보고 이의를 제기하거나 종료를 선언함 → 종료되지 않았다면, 답변자는 비판 내용을 있는 그대로 전달받아 다시 응답함.
  4. 평결 (Verdict). 판사는 비판자의 이의 제기를 컨텍스트 (Context)로 받아 최종 답변 + 신뢰도 라벨 (Confidence label) + 남은 불확실성 (Remaining uncertainty)을 전달합니다.
  5. 프로필 업데이트 (Profile update). 활성화된 경우, 판사는 프로필 노트를 추출합니다. 중복 제거 (Deduplication), 스타일 필터 (Stylistic filter), 그리고 표출 임계값 (Surfacing threshold) 규칙에 따라 해당 내용이 저장될지 결정됩니다.

메모리 모델 (Memory model)

라운드 사이에 유지되는 것:

  • 답변자의 전체 대화 메모리 (참여한 모든 토론).
  • 재구성된 질문 목록 (비판자와 판사가 용어 측면에서 일관성을 유지할 수 있도록 함).
  • 답변자 프로필 (활성 항목 + 대기 중인 후보).

매 질문 시작 시 소멸되는 것:

  • 비판자와 판사 자체. 이들은 시스템 프롬프트 (System prompts)가 최신 상태를 반영하도록 재구축됩니다.

각 행위자 (Actor)가 한 라운드 내에서 보는 것:

  • 답변자는 재구성된 질문 + 비판자의 모든 답변을 있는 그대로 봅니다.
  • 비판자는 오직 판사의 재진술 내용만을 봅니다. 답변자의 말은 절대 보지 못합니다.
  • 판사는 모든 답변자의 응답을 보고 (재진술하기 위해) 확인하며, 평결 시점에 비판자의 이의 제기를 확인합니다.

지속되지 않는 것:

  • 토론 기록 (Debate transcripts) (답변자가 자신의 메모리에 이를 보유하며, 다른 누구도 보유하지 않습니다).
  • 명확화 응답 (Clarification replies) (해당 라운드 내에만 머뭅니다).
  • 재진술 내용 (Restatements) (투명성을 위해 사용자에게 보여준 후 폐기됩니다).
  • 평결 자체 (Verdict) (답변자의 대화 메모리의 일부로만 남으며, 이를 통해 후속 질문이 자연스럽게 이어집니다).

프로필 (The profile)

이것은 시스템이 수행하는 유일한 라운드 간 학습이며, 단 한 번의 잘못된 라운드가 전체를 오염시키지 않도록 규칙을 의도적으로 보수적으로 설정했습니다:

  • Source (출처): 오직 판사(judge)만이 작성합니다. 비판자(critic)가 실질적이고 본질적인 비판을 제기했을 때만 작성됩니다.
  • Stylistic filter (스타일 필터): 길이, 서식, 어조, 이모지에 관한 모든 내용은 즉시 거부됩니다. 프로필의 핵심은 답변자가 어떻게 쓰느냐가 아니라, 답변자가 무엇에 대해 추론을 잘못하고 있느냐입니다.
  • Deduplication (중복 제거): 단순한 단어 중복을 확인합니다. 새로운 노트가 기존 노트와 충분히 유사하면, 중복을 추가하는 대신 카운트(count)를 올립니다.
  • Surfacing threshold (표면화 임계값): 노트가 비판자에게 가시화되려면 최소 두 번 이상 관찰되어야 합니다. 단 한 번의 관찰은 숨겨진 상태로 유지됩니다.
  • Capacity cap (용량 제한): 용량이 가득 차면, 확인(corroborated)되지 않은 가장 오래된 후보가 축출됩니다. 확인된 항목은 보호됩니다.
  • Effect (효과): 활성화된 항목은 비판자의 지침에 "관찰된 답변자 성향: 이 부분을 각별히 주의하여 조사할 것"과 같은 형태로 나타납니다.

각 구성 요소가 존재하는 이유

이 중 어느 것도 임의로 결정된 것이 아닙니다. 각 선택은 기존 문헌에서 언급된 특정 실패 모드(failure mode)를 제거하기 위한 시도입니다. 그 매핑(mapping)은 다음과 같습니다.

재진술 병목 현상 (The restatement bottleneck)

두 가지 아이디어가 바탕이 되었습니다:

"손실이 있는 패러프레이징 (lossy paraphrase)" 직관: Tishby의 정보 병목 (Information Bottleneck) [7] 이론은 "유용한 것만을 남기고 압축하라"는 고전적인 프레임워크입니다. 우리는 이 직관(주장은 유지하되 수사법은 버림)만을 빌려왔을 뿐 그 이상은 아닙니다. 판사는 프롬프트에 의한 패러프레이저 (paraphraser)이지, 학습된 인코더 (encoder)가 아닙니다.

맹목적인 검토자가 아닌 중재자: 이것은 저자의 신원을 숨기는 이중 맹검 검토 (double-blind review; 검토자는 여전히 원문 산문을 읽음)가 아닙니다. 이는 법정 중재자나 위키피디아 스타일의 중립적인 재작성에 더 가깝습니다. LLM 비판자들은 내용보다는 _쓰기 스타일 (writing style)_에 기반하여 답변을 선호하거나 거부한다는 사실이 밝혀진 바 있습니다 [8, 9, 16]. 편향 제거 (debiasing)로서의 패러프레이징은 [8]에서 직접 연구되었습니다. 따라서: 답변자에서 비판자로 전달되는 모든 메시지는 판사의 재작성을 거치며, 비판자는 실질적인 내용(substance)을 바탕으로 논쟁합니다.

주의 사항 [8]: 이것이 도움이 되기는 하지만 마법은 아닙니다. 저자성은 퍼플렉시티 (perplexity), 단어 선택, 구조를 통해 유출될 수 있습니다. 이를 완벽한 방책이 아닌 유용한 도구로 취급하십시오.

메모리리스 비판자 (The memoryless critic)

에코 체임버(Echo chambers, 반향실 효과)는 MAD 문헌에서 가장 흔히 발생하는 실패 모드입니다 [6, 10, 11]. 에이전트들이 컨텍스트(Context)를 공유할 때 다음과 같은 문제가 발생합니다: 아첨하는 순응(sycophantic conformity), 사고의 퇴보, 그리고 더 강력한 모델이 약한 동료의 오답을 따라가는 현상입니다. 순진한 방식의 MAD는 편향을 교정하기보다 오히려 이를 _증폭(amplify)_할 수 있습니다. 매 라운드마다 새로운 비판자(Critic)를 투입하면, 비판자가 점진적으로 예의 바르게 훈련되거나

  • 판사(Judge)는 단일 장애점(Single point of failure)입니다. 만약 판사가 내용을 잘못 재진술(restate)한다면, 비판자(Critic)는 허수아비 공격(strawman)을 하게 됩니다. 이는 LLM 텔레폰 게임(LLM telephone game)과 같으며, 나란히 보기(side-by-side display, 원문 답변 + 재진술) 기능이 존재하는 이유도 바로 인간이 이를 잡아낼 수 있도록 하기 위함입니다.
  • 지연 시간(Latency) 및 토큰 비용. 한 라운드당 발생하는 비용은 다음과 같습니다: 답변(answer) + 재진술(restate) + 비판(critique) + 판결(verdict). 로컬 모델(local models)에서는 이 과정이 번거롭고, 호스팅된 API(hosted APIs)에서는 실제 비용 부담으로 이어집니다. 이러한 추가 비용은 병목 현상(bottleneck)과 프로필(profile)을 통해 그 가치를 증명해야 합니다. 아직 Self-Refine [18]과의 격차를 측정하지는 않았습니다.

다음에 시도할 것들

제가 고민 중인 몇 가지 방향은 다음과 같습니다:

AI 자동 생성 콘텐츠

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

원문 바로가기
1

댓글

0