多 Agent 图式工作流:从单循环到可控协作

数字严选大约 8 分钟实战手册ClaudeAgent 工作流多 Agent架构设计

多 Agent 图式工作流:从单循环到可控协作

适合谁: 已经在用 LLM + 工具循环,但开始遇到上下文膨胀、任务串扰、返工难定位问题的开发者与团队。
先说结论: 多 Agent 的价值不在于“多开几个模型”,而在于把任务拆成可观察的状态、明确的分工、可验证的边界。如果任务仍能被一个清晰的流程完成,就不要为了架构感而上图。

很多 Agent 最初都长这样:收到任务,调用模型,必要时调工具,再把结果塞回下一轮上下文。它能快速交付原型,也适合边界清楚的小任务。

问题出现在一个循环同时承担研究、规划、执行、审查与汇总时:错误会沿着上下文继续传递;每轮都带着无关历史;出了问题也很难判断是检索、推理、工具还是验收出了错。

这时需要的不是把循环跑得更久,而是把它改造成一个可控的任务图。

先判断:单循环还够不够

不要把“多 Agent”当成默认答案。先给现有任务贴标签:

任务特征更合适的起点不必急着拆分的原因
单一目标、固定步骤、结果可直接验收单次调用或单循环增加节点只会增加协调成本
固定的多步转换串行链 + 每步检查路径已知,不需要动态调度
输入类别不同、处理方式不同路由先分类,再交给专长路径
多个子问题彼此独立并行 fan-out可缩短总耗时,也能保留各自证据
子任务数量或类型事前未知编排器—执行器由主控根据任务实时拆解
输出能被明确标准反复改进生成器—评估器闭环让评估反馈成为下一轮的输入
涉及生产发布、权限、支付或删除人工审批门不可逆动作不能只靠模型判断

一个实用原则是:先能画出失败路径,再决定是否增加节点。 如果说不清“哪个节点失败后该做什么”,图只会把复杂性藏起来。

图式工作流的四个骨架

无论选哪种框架,先把下面四件事写清楚;它们比模型名更决定系统能否维护。

1. 节点:只承担一种可验收职责

一个节点可以是模型调用、搜索、代码执行、数据库查询或人工操作。但它应有单一目标,例如“提取事实候选”“按规则分类”“执行测试”“生成发布草稿”。

不要让一个节点同时研究、写作、审稿和上线。职责混合时,失败原因会消失在一大段自然语言里。

2. 状态:用结构化数据传递,不靠聊天记录猜测

状态是任务图的共享工作台。每个节点只读取自己需要的字段,并写回可检查的结果。开始时不需要复杂的状态机,一个 JSON 对象已经足够:

state = {
    "task": task,
    "facts": [],
    "draft": None,
    "checks": [],
    "status": "running",
    "attempts": 0,
}

关键不是字段多,而是给重要字段定义来源和所有者:谁能写入、谁负责验证、何时失效。比如事实记录要带来源 URL;测试结果要来自真实命令输出;批准状态只能由人工节点写入。

3. 边:把正常、失败与停止都写成路径

节点之间的连线不能只有“成功后继续”。至少定义三类出口:

  • 继续: 输出满足下游输入契约;
  • 回退: 缺少证据、工具失败或质量不达标,回到哪个节点补什么;
  • 停止: 达到最大尝试次数、预算、时间上限,或等待人工判断。

没有停止条件的自我修正循环,最后常常只是更昂贵的重复。

4. 闸门:把不可逆决策从模型循环中拿出来

模型可以整理“准备发布什么、影响谁、验证是否通过”,但真正的发布、权限变更、付款和删除,应在明确的审批节点暂停。

好闸门展示的是具体行动,而不是抽象问题:变更内容、目标环境、验证结果、风险与回滚方式。这样人工审批才是判断,而不是替系统猜测。

五种最常用的图式模式

模式一:串行链——路径固定时最省心

把固定流程拆成窄步骤:提纲 → 草稿 → 事实检查 → 格式化。每一步的输出都先过程序化或人工定义的检查,再交给下一步。

适合转换、资料整理、固定格式报告等任务。它的风险是上游错误逐步放大,所以要把检查靠近错误发生处,而不是只在最后做一次“看起来对不对”。

模式二:路由——先分类,再匹配工具和提示

当输入类型不同,先用轻量规则、分类器或模型把任务送到正确路径。例如把工单分为产品咨询、故障与退款;把研究请求分为公开资料检索、代码分析与内部数据核验。

路由节点应输出可审计的类别与理由。路由错了并不可怕;可怕的是所有任务都带着全部工具和全部提示一路向下,直到在不相关的能力上误操作。

模式三:并行 fan-out——只并行真正独立的工作

多个来源检索、多个模块测试、多个竞品对比,适合并行。每条支线应拥有自己的输入快照与输出格式,最后由一个汇总节点负责去重、处理冲突和标注证据强弱。

不要把相互依赖的步骤硬拆成并行。后一个节点必须依赖前一个结论时,伪并行通常只会制造竞态与重复调用。

模式四:编排器—执行器——任务结构未知时再使用

复杂改造、开放式研究等任务,往往无法事先列出完整子任务。此时可以让一个主控节点先提出工作拆分,再把独立项交给执行器,最后回收结果并决定是否继续。

这里的控制点是预算和范围:限制同时运行数量、单项最大轮次与允许调用的工具。主控节点不应拥有无边界的递归委派权。

模式五:评估器闭环——只有标准明确时才值得重试

生成器产出结果,评估器依据明确标准给出通过或具体修改项;未通过时将反馈写回状态,生成器再尝试一次。

它适合有可观察质量标准的任务,例如测试失败的代码修复、字段齐全的结构化抽取、已定义风格的文稿。若评估标准只是“更好一些”,循环会变成主观消耗;此时应改为人工审阅或先补评价标准。

一个最小可控架构

从单循环升级时,不必一开始就引入复杂框架。先实现一个能运行、能观测、能停下的骨架:

def run_task(task):
    state = initialize(task)
    state = classify(state)
    state = dispatch_to_specialist(state)
    state = verify_with_real_evidence(state)

    if state["status"] == "needs_human_approval":
        return await_human_decision(state)
    if state["status"] == "retryable" and state["attempts"] < 2:
        return run_retry(state)
    return finalize(state)

这段结构刻意没有绑定 Claude、某个框架或特定模型。先用最少的代码把状态、验证、重试和人工门定义出来;当你确实需要可视化、持久化、并发调度或恢复执行时,再引入对应框架。

上线前的六项检查

  1. 每个节点有输入与输出契约。 下游不应靠解析一段随意的自然语言来猜字段。
  2. 关键结论来自环境证据。 工具调用结果、测试输出和一手文档应进入状态,而不是只留在模型叙述中。
  3. 并行分支彼此独立。 否则改用串行或显式依赖图。
  4. 重试有上限。 同时限制次数、时间和预算,并记录最后失败原因。
  5. 高风险动作有人工门。 发布、删除、权限与付费不能被“任务完成”自动触发。
  6. 能回放一次失败。 至少保留输入快照、关键状态变更、工具结果与最终决策。

不该照搬的地方

  • 不要因为“多 Agent”听起来高级,就把一个三步任务拆成五个模型调用。
  • 不要让同一个模型既生成又无限制地批准自己;需要评审时,给它独立的标准与失败出口。
  • 不要把上下文窗口当作数据库。可复用事实、权限状态、预算与审批应落在结构化状态中。
  • 不要把自动化等同于取消人工判断。系统越接近生产影响,越需要明确的暂停点。

来源与边界

本文是基于公开原文与 Anthropic 官方模式说明写成的中文原创实战总结,不是原文翻译,也不代表 Anthropic 或原作者的官方立场。框架、模型能力与成本会持续变化;落地前请用自己的任务集、预算与安全边界验证。