多 Agent 系统最容易出现的假繁荣是:角色很多、对话很长、Demo 很热闹,但结果不可复现、任务不收敛、失败后只能重来。工程目标不是“让多个模型聊天”,而是稳定地产出经过验证的工件。

一、三个常见误区

  1. 把角色提示词当架构:“产品经理 Agent、架构师 Agent、开发 Agent”只是名称,没有输入输出契约。
  2. 让所有 Agent 共享完整对话:上下文越来越长,冲突信息和无关历史持续污染决策。
  3. 只让模型判断完成:模型说“代码已完成”不能替代编译、测试、静态检查和验收用例。

二、用任务图而不是群聊组织协作

把目标拆成有依赖关系的任务图:需求澄清 → 方案设计 → 代码变更 → 测试 → Review → 发布说明。每个节点定义负责人、输入工件、输出 schema、工具权限、完成条件和失败策略。

TaskNode {
  id
  objective
  dependencies[]
  input_artifacts[]
  output_schema
  allowed_tools[]
  acceptance_checks[]
  retry_policy
}

协调器只负责状态推进和路由,不应该亲自完成所有推理。专业 Agent 读取最小必要上下文,产出结构化结果;验证器根据客观证据决定是否进入下一节点。

三、共享的是状态与证据,不是无限对话

推荐把上下文分成四层:

每个结论都应尽量附带证据引用,例如文件路径、代码行、测试输出或文档段落。这样 Reviewer 可以验证,而不是相信另一个模型的自然语言总结。

四、质量门禁:把“完成”改成“通过检查”

阶段机器门禁模型门禁
需求字段完整、约束无冲突场景与边界是否覆盖
设计接口 schema、依赖检查取舍是否合理
编码编译、Lint、类型检查可维护性与风险 Review
测试单测、集成测试、覆盖率是否遗漏关键场景
发布变更清单、回滚脚本说明是否清晰

模型擅长发现语义风险,工具擅长给出确定结果。两者需要组合:先运行工具,再把结构化输出交给 Reviewer,而不是让 Reviewer 猜代码能否运行。

五、失败恢复:让系统从检查点继续

每个任务节点完成后保存输入、输出、工具调用摘要和检查结果。失败时根据类型处理:工具暂时失败可重试;输出不满足 schema 让原 Agent 修复;方案冲突回退到上游节点;预算耗尽或连续失败进入人工接管。

if tool_error.retryable:
    retry_with_backoff()
elif validation_failed:
    send_feedback_to_owner_agent()
elif upstream_assumption_invalid:
    reopen_dependency_node()
else:
    escalate_with_evidence_bundle()

为了防止循环,需要设置节点最大尝试次数、全局 token/时间预算、重复结论检测和终止条件。真正的“收敛”来自有限状态和明确验收,而不是提示词里写一句“请务必完成”。

最小可行实现:先从单协调器 + 3 个角色开始:Planner 生成任务图,Worker 执行工具,Reviewer 基于测试证据验收。等状态、工件和门禁稳定后,再扩展专业 Agent。
多 Agent 的价值不是模拟一个组织,而是把复杂工作拆成可追踪、可验证、可恢复的流水线。