第40回 多智能体翻车记——失败模式、根因与止血法
人多未必就稳当,众口也能酿迷汤。
若无规矩来收口,越帮越忙更心慌。
第39回我们唱了协作的好:分工、拓扑、共识。
可看官都明白:
江湖从来不缺“看起来很合理的系统”,缺的是“摔过跤还能爬起来的系统”。
这一回专讲翻车。
有一篇 2025 年的研究专门做了系统性失败分析:
他们观察多个流行多智能体框架在 150+ 任务上的执行轨迹,归纳出 14 种失败模式,并把它们聚成三大类:
- 系统设计问题
- 智能体之间的不对齐
- 任务验证与终止问题
并且给了可扩展标注与评估工具链(LLM-as-a-Judge)以及数据集。1
你不必背 14 条清单,先把“三大类”钉牢;
遇事能定位到“是哪一类在作妖”,才是工程本事。
一、三大类失败:像三种“病根”
1)系统设计问题:规矩没立,系统先乱
常见表现:
- 角色说明不清:谁负责什么、谁能改最终输出,没写死
- 对话管理混乱:消息太多、摘要太差、关键约束丢了
- 工具与环境没隔离:权限不清、超时不管、错误不处理
这类失败不是模型“笨”,是系统“没骨架”。
第38回的状态机、审计与回滚,就是专治这一类。
2)智能体不对齐:各唱各的调
常见表现:
- 协作目标不一致:有人追速度,有人追完美,互相拖拽
- 信息不对称:一个代理掌握关键证据却没传出去
- 互相误导:自信的错误在群体里扩散,变成“共识幻觉”
你把它当成团队协作就懂:
目标不对齐,会议开到天亮也没结果。
3)验证与终止问题:没有“验收”,就没有“完成”
常见表现:
- 明明错了却以为对:缺验证门槛
- 明明做完了还在做:缺终止条件
- 一步错步步错:缺关键节点检查,错误滚雪球
第38回讲的“选择性验证”与“可验证执行”,就是给这一类装刹车。
二、14 种失败模式该怎么用:当成“排障索引”
工程里最怕两种对话:
- “它又坏了。”
- “我也不知道为什么坏。”
失败模式清单的真正价值不是论文炫技,而是把排障变成“可复用流程”:
- 把一次失败写成一条轨迹(谁说了什么、谁调用了什么工具)
- 标注它属于哪类失败(系统设计 / 不对齐 / 验证终止)
- 再细到具体模式(例如:角色冲突、对话漂移、过早终止……)
- 对症下药:改提示、改拓扑、加验证、加回滚、加隔离
这就像高二数学的错题本:
不分类,你永远在“重新学”;分类了,你才在“修弱点”。
三、止血三件套:把系统从“能跑”变成“能控”
把前几回串起来,止血法可以归成三件套:
- 骨架:状态机/工作流,把流程写死(第38回)
- 边界:角色权限与责任边界写死(第39回)
- 刹车:关键节点验证与终止条件写死(第38回)
多智能体系统若没这三件套,通常会出现一个现象:
“看起来努力得要命,结果离目标越来越远。”
四、极简可跑代码:用日志把失败粗分到三大类
下面代码不是要“自动判案”,只是演示一个工程做法:
把执行轨迹的关键事件(角色、动作、错误、验证结果)写成日志后,至少可以做粗粒度定位:
- 是否缺验证(VERIFY 缺失或频繁失败)
- 是否角色冲突(角色互相否定/改写)
- 是否系统层错误(超时/权限/工具失败高发)
def classify(log):
has_verify = any(e["type"] == "VERIFY" for e in log)
verify_fail = any(e["type"] == "VERIFY" and not e["ok"] for e in log)
tool_errors = sum(1 for e in log if e["type"] == "TOOL" and e.get("error"))
conflicts = sum(1 for e in log if e["type"] == "MSG" and "不同意" in e.get("text", ""))
if not has_verify or verify_fail:
return "任务验证与终止问题"
if conflicts >= 2:
return "智能体之间的不对齐"
if tool_errors >= 2:
return "系统设计问题"
return "难以粗分(需要更细标注)"
if __name__ == "__main__":
trace = [
{"type": "MSG", "role": "Planner", "text": "先检索,再写草稿,再验证。"},
{"type": "TOOL", "name": "search", "error": "timeout"},
{"type": "TOOL", "name": "search", "error": "timeout"},
{"type": "MSG", "role": "Writer", "text": "我先凭记忆写一个。"},
{"type": "VERIFY", "ok": False},
]
print(classify(trace))
这段代码的意义在于提醒你:
多智能体的改进不能只靠“换更大模型”,你必须能:
- 记录轨迹
- 标注失败
- 对症修复
否则你永远在“感觉它不稳”,而不是“知道它哪里不稳”。
五、小结:失败分析不是泼冷水,是把路修平
多智能体不是银弹。
它更像“多线程程序”——
性能可能更强,但 bug 也更隐蔽。
你想把系统做稳,最有效的顺序是:
- 先把单体做成可控工作流(第38回)
- 再把群体做成有边界的协作(第39回)
- 最后用失败模式做系统化排障与迭代(本回)
第四篇到此,图与智能体的主线已从“结构”走到“执行与协作”。
后面章节若继续扩展,就可以更深入:
- 更细的验证器设计与成本权衡
- 多智能体在软件工程、科研与产品场景的专门策略
欲知后事如何,且听后文分解。
幻觉核查
- “14 种失败模式、三大类归因、LLM-as-a-Judge 与数据集发布”:可核对论文摘要与方法概述。1
- 本回对三类失败的工程解释属于概括性总结,具体 14 模式的命名与边界以原论文定义为准。
- 本回代码是“粗分定位”的玩具示例,不应当被当作真实评估器。
逻辑审计
- 与第39回衔接:第39回讲“协作机制”,本回讲“机制为何失效”,把系统工程的风险补齐。
- 与导读一致:导读强调“慢思考与自校验”,本回把“自校验”扩展为“系统化诊断与迭代”,避免把错误当偶然。
- 与第38回闭环:失败一旦可归类,就能决定该加状态机、加验证、还是改拓扑与角色边界。
引用与溯源
Footnotes
-
Cemri, M., et al. Why Do Multi-Agent LLM Systems Fail? arXiv:2503.13657 (v1: 2025-03-17) https://arxiv.org/abs/2503.13657 ↩ ↩2