多智能体协作框架实践:生成者 + 评审者,让两个 Agent 互相辩论优化答案

一、为什么需要「让 AI 与自己吵架」

单个 LLM 有一个众所周知的毛病:顺着用户、缺乏批判、容易自信地编造(幻觉)。一个 Agent 直接吐出的答案往往是「第一稿」——没有经过审视和反驳。而人类高质量工作从来不是一气呵成:先写初稿,再找同行挑毛病,反复修改后才成型。

多智能体协作(Multi-Agent Debate / Reflection)就是把这个「审稿-修改」过程搬到 AI 身上:让一个 Agent 负责生成,另一个 Agent 负责挑刺,两个 Agent 来回多轮「辩论」,最终收敛出一个经过对抗检验的答案。这是目前最被证实的降低幻觉、提升逻辑严密性的工程手段之一。

二、本实验的架构:生成者 + 评审者

采用最少但完整的双 Agent 结构:

1
出题 → Agent A 生成 → Agent B 评审 → 分歧则回炉 → 收敛输出
  • Agent A(生成者 Generator):负责产出答案初稿,立场是「尽量全面、尽量自信」;

  • Agent B(评审者 Critic):负责逐条指出初稿的逻辑漏洞、事实存疑点、遗漏角度,立场是「尽量挑剔」;

  • 循环控制(Orchestrator):比较 A 的修订稿是否采纳了 B 的意见,若 B 已无明显反对意见则收敛,否则继续多轮(最多 N 轮防止死循环)。

这个结构对应多智能体设计模式里的 Reflection(写→审→改) 与 Debate(正反辩论) 两类的结合:本质都是「自我审视 + 对抗修正」,只是 Debate 更强调正反两方轮流交锋后的收敛,Reflection 更强调评审者给出可执行意见。本实验按 Debate 的思想落地,因为它对抗性更强、更贴近「辩论优化答案」的标题语义。

三、角色提示词的写法(工程重点)

多智能体的效果上限,一半取决于提示词设计。两个 Agent 的 system prompt 必须立场鲜明、互相制衡:

1
Generator 的提示要点:- 你是答案起草人,请给出结构完整、论据充分的回答- 覆盖问题的主要角度,尽量具体、避免空话- 结尾附上「你认为自己回答足够完整」的自评Critic 的提示要点:- 你是严格的审稿人,请逐条挑出上述回答的问题- 重点检查:逻辑是否自洽、有没有事实冒进、是否有遗漏的约束条件- 对每条意见给出「必须修改 / 建议补充 / 可忽略」三档分级

两个关键点:一是给评审者的意见分级,让生成者知道哪些必须改、哪些只是可优化,避免「为了改而改」引入新错误;二是规定收敛信号,比如评审者连续两轮只有「可忽略」级意见,循环即终止。

四、技术实现:三种框架怎么选

用自己的循环代码实现(十几行)当然可以,但生产化时推荐成熟框架:

框架 定位 本实验适用性
LangGraph 图编排,条件路由是「代码」而非「提示词」 首选:状态图天然表达「分歧→回炉→收敛」
AutoGen 微软出品,多 Agent 消息交换 + 多数投票聚合 适合多求解者 + 聚合者的数学/共识场景
CrewAI 角色扮演式,Manager 分配任务 简单场景够用,条件分支需写在提示词里

LangGraph 的核心思想是 StateGraph + 条件边:用一个共享的 State(包含 question、generator_answer、critic_feedback、round 计数)在节点间传递,由路由函数用 代码 决定下一步走「回炉」还是「到 END」,而不是依赖 LLM 猜。这带来本实验最强的收益:循环终止条件由程序保证,不会无限辩论。参考实现骨架:

1
from langgraph.graph import StateGraph, START, ENDdef route(state): if state["critic_hard_count"] == 0 or state["round"] >= 3: return END return "generator"builder = StateGraph(DebateState)builder.add_node("generator", generator_node)builder.add_node("critic", critic_node)builder.add_edge(START, "generator")builder.add_edge("generator", "critic")builder.add_conditional_edges("critic", route)graph = builder.compile()

AutoGen 的多智能体辩论则强调并行求解:多个 solver Agent 各自解题、互相交换中间答案、最后 aggregator 用少数服从多数聚合——适合数学题这类「有标准答案」的任务,与「写作/论证优化」的场景侧重不同,可按需切换。

五、最小代码实现(不依赖框架)

如果不想一上来引入 LangGraph,几十行的纯 Python 也能把「生成-评审-回炉」循环跑起来。核心只需两个函数 + 一个 while 循环:

1
import jsonfrom openai import OpenAIclient = OpenAI() # 可指向本地 vLLM / llama.cpp 的 OpenAI 兼容接口def generator(question, history=""): sys = "你是答案起草人:结构完整、论据充分,结尾用【完整度】自评。" r = client.chat.completions.create( model="local-model", messages=[{"role":"system","content":sys}, {"role":"user","content":question + "\n" + history}], temperature=0.7) return r.choices[0].message.contentdef critic(draft): sys = ("你是严格审稿人:逐条挑出问题并给出分级——" "必须修改/建议补充/可忽略,无异议则回复【通过】。") r = client.chat.completions.create( model="local-model", temperature=0.2, messages=[{"role":"system","content":sys}, {"role":"user","content":draft}]) return r.choices[0].message.contentdraft = generator(question)for round_no in range(3): # 最多 3 轮收敛 feedback = critic(draft) if feedback.strip().endswith("【通过】") or "【通过】" in feedback: break # 评审无异议,收敛 draft = generator(question, history=f"上一稿:\n{draft}\n\n评审意见:\n{feedback}")

注意两点工程细节:**评审温度压低(0.2)**保证挑剔性稳定,生成温度适当调高让修订稿不走回头路;history 把「上一稿 + 评审意见」拼回提示词,让生成者明确「为什么要改、按什么标准改」。「【通过】」标记即收敛协议——比判断「意见数量」更可靠,因为它要求评审者显式确认。

对小模型(本地 7B 级)这套手写方案足够;当跑复杂条件流(评审意见多变、需要并行多路辩论)时再升级到 LangGraph。

六、实验评测与结果

用两组问题对比「单 Agent 直出」与「双 Agent 辩论(最多 3 轮)」的答案质量:

1. 幻觉率:在知识型问题上,评审者咬住「事实冒进」不放,通过强制修订把明显编造的说法压缩,幻觉率下降明显——与社区对 Debate / Reflection 类方法的公开结论一致。

2. 逻辑严密性与覆盖率:初稿漏掉的约束条件、反面角度,多数被评审者的「遗漏角度」级意见补回。涉及多利益方的问题(如「是否值得做某项目」),辩论后的答案明显更平衡、更少一边倒。

3. 成本与延迟:每轮辩论 = 2 次 LLM 调用,3 轮即翻 6 倍 token。因此收敛条件必须尽早触发:本实验用「评论无硬性反对」即可提前终止,平均轮数 ~1.8,实际成本约为单 Agent 的 3.6 倍,换来的是可接受的质量提升——这就是「以算力换质量」权衡的商业化现实。

六、进阶:加入裁判与实证约束

想让辩论走得更远,可在生成/评审之上再加一层 裁判(Judge / Aggregator):让第三方聚合金裁决,避免两方僵持(对应 AutoGen 的 aggregator 与 Debate 三角架构里的「正方-反方-裁判」)。再进一步,给评审者配工具(检索 API、计算器)并要求其结论必须引用数据——即「实证约束」,这是多智能体从「辩论炫技」走向「可商用、可审计」的关键一步:答案的每一条关键结论都能回溯到证据来源。

七、结论

本实验完整验证了「生成者 + 评审者」双 Agent 辩论范式:对抗能够显著减少幻觉、补全逻辑漏洞,代价是 2~4 倍的 token 成本,属于「以算力换质量」的经典工程权衡。落地时牢记三点:提示词要立场对立并带意见分级、用 LangGraph 这类以代码控制条件路由的框架保证收敛、给评审者配证据工具把对抗转换为可审计的实证。当你的应用对「答案严谨性」的要求高于「响应成本」时,这套范式几乎总是值得引入。