멀티 에이전트 토론: 페르소나가 논쟁하고, 비평가가 조사하며, 합의를 통해 신뢰도가 도출된다
요약
멀티 에이전트 토론(Multi-agent debate) 프레임워크를 통해 AI 답변의 신뢰도를 높이는 방법을 설명합니다. 서로 다른 페르소나를 가진 에이전트들이 논쟁하고 비평가가 결함을 지적하며, 최종적으로 합의를 통해 신뢰도를 도출하는 구조를 다룹니다.
핵심 포인트
- 서로 다른 시스템 프롬프트를 가진 페르소나를 설계하여 답변의 다양성 확보
- 비평가(Critic)는 직접 답하지 않고 답변의 결함만을 지적하여 반박 유도
- 모델의 자기 보고가 아닌, 정규화된 입장(Stance) 변화를 통해 마음의 변화 측정
- 에이전트 간의 합의 여부를 통해 결정론적인 신뢰도(Confidence) 산출
하나의 모델에게 동일한 질문을 세 번 던지면, 답변의 실제 논쟁 여부와 상관없이 세 개의 의역된 문장과 자신감 넘치는 어조를 얻게 됩니다. 멀티 에이전트 토론 (Multi-agent debate)은 그 반대로 동작합니다. 세 명의 페르소나 (Personas)가 독립적으로 답변하고, 비평가 (Critic)가 각 답변의 결함을 지적하며, 모든 에이전트가 답변을 수정하거나 방어하고, Python이 투표를 집계하며, 판사 (Judge)가 최종 답변을 종합합니다. 이때 신뢰도 (Confidence)는 합의 그 자체가 됩니다: 만장일치면 HIGH, 의견이 갈리면 LOW입니다.
'Agentic AI from Zero'의 프로젝트 9는 이를 NVIDIA NIM (meta/llama-3.1-8b-instruct)을 대상으로 실제로 실행합니다. 토론당 8번의 모델 호출, 총 2번의 토론, 16번의 라이브 호출이 캡처되었습니다.
다양성은 희망하는 것이 아니라 설계하는 것이다
토론은 토론자들이 의견이 일치하지 않을 때에만 유용합니다. 이는 동일한 모델에 대해 세 가지 별도의 **시스템 프롬프트 (System prompts)**를 사용하여 수행됩니다:
PERSONAS = [
Persona("cautious", "Cautious", "🛡️",
"You are the CAUTIOUS debater. Risk-averse and conservative: prefer proven, low-downside "
...
각 페르소나는 다른 사람의 답변을 보기 전에 차갑게 (Temperature 0.7) 제안을 내놓습니다. 논쟁의 여지가 있는 질문에 대해, 이들은 시작부터 2개의 부트스트랩 (Bootstrap) 대 1개의 벤처 캐피털 (Venture capital)로 의견이 갈립니다. 이는 단순한 세 번의 재진술이 아닌 진정한 발산 (Divergence)입니다. 결정적으로, 각 제안은 짧은 정형화된 입장 (Stance) — 방법론에 대한 설명이 아닌 입장 그 자체 — 을 포함하므로, 의견이 일치하는 두 에이전트는 동일한 라벨을 출력하여 집계될 수 있습니다.
비평가는 아무것도 답하지 않는다; 반박이 마음을 움직인다
한 명의 비평가가 모든 제안을 읽고, 각 제안에 대해 판결 (sound / flawed / unsupported)과 가장 중요한 단 하나의 결함을 반환합니다. 비평가는 답변을 하지 않습니다. 비평가의 유일한 임무는 반박 (Rebuttal)이 밀어붙일 수 있는 대상을 제공하는 것입니다. 그 후 모든 제안자는 비평과 타인의 의견을 읽고 다시 답변하며, 진정으로 설득되었을 때만 입장을 변경합니다. 그리고 이러한 마음의 변화는 모델의 자기 보고에 의존하는 것이 아니라, 측정됩니다:
def detect_mind_changes(before, after): # 자기 보고가 아닌, STANCES(입장)로부터 측정됨
pre = {p.persona_id: normalize_stance(p.stance) for p in before}
return [p.persona_id for p in after if pre[p.persona_id] != normalize_stance(p.stance)]
투표와 신뢰도는 결정론적인 Python 코드입니다
입장(Stance)은 투표 용지입니다. "$0.05", "0.05", ".05"가 함께 집계되도록 정규화(Normalize)한 다음, 개수를 셉니다:
def tally(final_proposals):
ballots = {p.persona_id: normalize_stance(p.stance) for p in final_proposals}
counts = dict(Counter(ballots.values()))
...
판사(Judge)는 신뢰도를 직접 *단언(assert)*하지 않습니다. 신뢰도는 수학적 계산 결과로 도출됩니다.
두 가지 실제 토론, 상반된 결과
배트와 공(bat-and-ball) 질문에 대해 패널은 다음과 같이 수렴합니다: "0.05"×3, 비율 1.00, 판사는 "$0.05"라고 말하며, **높음(HIGH) 100%**를 기록합니다. 반면, 부트스트랩(bootstrap) 대 VC(Venture Capital) 토론에서는 비평(critique)으로 인해 두 명의 마음이 바뀝니다 (벤처 캐피털 → 하이브리드, 부트스트랩 → 벤처 캐피털). 하지만 수렴하는 대신, 패널은 1/1/1의 삼자 대립으로 분산되어 비율 0.33, **낮음(LOW) 33%**로 표시됩니다. 이것이 핵심입니다. 수렴하지 않는 토론은 유효한 결과이며, 진정한 의견 불일치는 억지로 꾸며내는 대신 눈에 보이게 낮은 신뢰도로 나타납니다.
모델은 논쟁합니다. 논거를 평결로 전환하는 모든 부분은 읽고 테스트할 수 있는 결정론적인(deterministic) Python 코드입니다. 여기에서 두 토론의 각 단계를 단계별로 확인해 보세요: https://dev48v.infy.uk/agentic/project9-debate.html — 리포지토리(repo)는 https://github.com/dev48v/agentic-ai-from-zero에 있습니다.
다음 단계, 프로젝트 10: 자신의 작업물을 스스로 채점하는 자기 성찰적 에이전트(self-reflective agent)입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기