Skip to content

6.5 产品实战:Agent 间的协作与纠错

LeadAgent 编排逻辑

4 个 SubAgent 不是自己串联的,由 LeadAgent 统一编排:

用户消息


LeadAgent 意图识别

    ├─ 工作流相关 → 按流水线处理:

    │  ① TaskTool → WorkflowPlanner
    │      ↓ 返回: 规划方案

    │  ② 是否确认规划?
    │     ├─ 用户确认 → 继续
    │     └─ 用户修改 → 回到①重新规划

    │  ③ TaskTool → WorkflowCreator(输入规划方案)
    │      ↓ 返回: workflowId

    │  ④ TaskTool → WorkflowChecker(输入workflowId)
    │      ↓ 返回: 校验报告

    │  ⑤ 是否有问题?
    │     ├─ 有严重问题 → 回到③(修复)或①(重规划)
    │     ├─ 有警告 → 询问用户是否继续
    │     └─ 通过 → 继续

    │  ⑥ TaskTool → WorkflowExecutor(输入workflowId)
    │      ↓ 返回: 执行结果

    │  ⑦ 汇总报告给用户

    └─ 非工作流 → 通用对话

流水线是 LeadAgent 的职责,不是 SubAgent 自己管的。LeadAgent 控制流程,决定何时调用哪个 SubAgent,以及遇到错误时如何处理。

Checker → Creator 修正循环

检查 Agent 发现问题后,不是直接告诉用户"有错",而是自动触发修正:

Checker 发现 ERROR


LeadAgent 判定问题严重性

    ├─ Error → 自动重新派发 Creator
    │   └─ Creator 收到原 WorkflowPlan + Checker 的问题列表
    │       └─ 按问题列表修正(不是重新创建,是针对性修改)
    │       └─ 修正后再次派发 Checker
    │       └─ 循环直到无 Error 或达到最大重试次数

    ├─ Warning → 询问用户是否处理
    │   ├─ 用户确认 → 派发 Creator 修正
    │   └─ 用户忽略 → 继续下一步

    └─ Info → 记录但不阻塞

最大修正循环次数

默认最多 3 轮修正循环。超过后无论结果如何都返回给用户手动处理。

为什么要限制?防止死循环。LLM 可能反复犯同一个错误,Checker 反复检查出来,Creator 反复修正不了。3 轮是一个合理的平衡点——大部分问题 3 轮内能解决,解决不了的说明需要人介入。

修正的数据流

第一轮:
  Planner → WorkflowPlan → Creator → 工作流 v1 → Checker → [Error: URL未填]

第二轮:
  Creator 收到 WorkflowPlan + [Error: URL未填] → 修改参数 → 工作流 v2 → Checker → [通过]

结果:工作流 v2 交付

Creator 在修正时收到的不是全新的任务,而是"原方案 + 问题列表"。它只需要针对性修改,不需要重新创建整个工作流。

执行失败 → 回退链路

执行 Agent 发现运行时问题后,根据问题类型决定回退到哪一步:

Checker 通过 → Executor 执行 → 失败


                           分析失败原因

                            ┌─────┴─────┐
                            │           │
                         参数问题     环境/超时问题
                            │           │
                            ▼           ▼
                     LeadAgent 判断    LeadAgent 告知用户
                     ├─ 自动重规划?    └─ 需要用户介入
                     └─ 用户确认?

静态检查 vs 动态分析

关键区别:

  • Checker 检查的是"设计是否正确"(静态分析)
  • Executor 发现的是"运行时问题"(动态分析)

静态检查通过不代表运行时一定能成功——网络不通、文件不存在、FTP 密码错误,这些问题只有执行时才会暴露。

失败后的用户引导

失败类型Agent 建议
参数错误"请问是否需要调整参数?我可以帮你重新创建"
环境错误"系统中缺少 XXX 工具,请安装后再试"
权限错误"请检查 FTP/文件路径的访问权限"
超时"工作流执行时间超过限制,建议拆分成多个子工作流"

EvalCheck 的具象化

在 6.2 中,EvalCheck 是一个抽象概念——"输出后校验"。在这个产品里,EvalCheck 具象化为一个独立的 Agent。

对比:

维度抽象的 EvalCheck产品中的 Checker Agent
触发时机LLM 输出后工作流创建后
检查方式函数式委托LLM 智能检查 + 规则引擎
失败处理自动重试/降级/人工自动修正循环(最多 3 轮)
检查内容JSON 格式、必填字段结构完整性、参数正确性、控制流逻辑

Checker Agent 本质上是 EvalCheck 的"放大版"——把一个函数级的检查,放大为一个 Agent 级的检查。它拥有自己的工具集、自己的 Skill 文档、自己的 Prompt 设计。

这个设计选择的原因:当检查逻辑足够复杂时,一个函数不够用,需要一个完整的 Agent。

监控在产品中的体现

Monitor 在产品中体现为执行 Agent 的实时监控能力:

  1. 状态轮询:每 2 秒查询执行状态
  2. 进度报告:实时向用户报告当前执行到哪个节点
  3. 超时控制:单个工作流最大 60 分钟,单个节点最大 15 分钟
  4. 失败分析:执行失败时自动分析原因并分类

这不是 6.2 中的 MonitoringContextProvider(那个是框架级的监控),而是业务级的监控——面向用户的执行状态报告。

协作模式总结

协作场景触发条件回退到哪一步最大次数
规划确认用户不确认重新规划无限(用户驱动)
检查修正Checker 发现 ErrorCreator 修正 → Checker 再查3 轮
执行回退Executor 失败视情况:Creator 修正或 Planner 重规划3 轮
环境错误外部条件不满足告知用户,不自动回退

整个流水线的核心设计思想:每一步的输出都是结构化的,可以传递给下一步作为输入,也可以传递给上一步作为修正依据。

这就是为什么 4 Agent 流水线能工作——不是因为每个 Agent 很聪明,而是因为 Agent 之间的数据流转设计得好。