单 Agent 的工程问题上一篇聊过(工具调用可靠性)。多 Agent 的翻车点完全不同——不是模型不行,是上下文当全局变量用,最后没人知道现状是什么。这篇讲怎么给 Agent 协作补上"分布式系统该有的一课"。

一、上下文传递的三种姿势(从坏到好)

1. 聊天记录接力(最常用也最容易烂):A 的完整输出塞进 B 的 prompt 头部。问题:token 爆炸 + 噪声淹没 + B 不知道哪段是事实哪段是 A 的猜测;
2. 摘要传递:压缩了 token,但摘要器把"关键不确定项"摘要没了的情况极多("大概是 5 月交付"被摘要成"5 月交付");
3. 结构化状态契约:Agent 之间传的是类型化对象(JSON Schema/typed 消息)——每条带来源、置信、时间戳、证据引用。这是唯一能调试的方式。

二、状态契约的最小字段集

{ "fact": ..., "source": {agent, step, tool_call_id}, "confidence": ..., "evidence_refs": [...], "as_of": timestamp, "status": confirmed|tentative|stale }

配套铁律:
- 状态可写单点:一个字段只有一个 Agent 有写权(类似 DB 所有权),其余只读或提案;
- 禁止把"未验证的中间假设"与"已证实事实"混在同一个 message 里裸传(这是级联幻觉的主通道);
- 下游使用前查 status/stale,过期事实自动触发重验证。

三、任务图(Plan-as-DAG 而不是 Plan-as-Text)

把计划建模成 DAG:节点=带验收口径的可交付产物,边=数据依赖。收益全部来自结构化:

- 节点级重试(不是整链重跑,成本砍半);
- 无依赖并行(多 Agent 的加速来源,text plan 做不到);
- 失败回滚按 cut:某节点失败,只作废其下游,兄弟分支产物保留;
- 审计回放:任务图+每节点状态快照=可解释、可复盘、可向甲方交代。

工程陷阱:让模型一次性生成完美 DAG 不现实。成熟做法:粗粒度 DAG(任务级而非步骤级)+ 节点内 Agent 自由发挥(ReAct 循环),节点边界处用验收契约强制校验。

四、人机混合的断点(最省钱的一条)

预算/置信度双阈值触发人工闸门:置信低 + 动作不可逆(付款、外发邮件、上线)必须挂起等人。别把人工闸门只设计成"失败才叫"——成功路径上也要抽查回写。

五、评估

多 Agent 评测集必须记录中间状态轨迹而不只是最终答案归因:"最终对了但第 3 步瞎猫撞死耗子"在生产里一定会复现——且以错误姿势复现。评估指标三件套:任务完成率、无证据事实引用率(幻觉传播的代理指标)、人工升级触发恰当率。

同行有把 LangGraph/CrewAI 类框架的 checkpoint 机制做成生产级回滚的,欢迎回帖聊聊和自研状态机的成本对比。