自动编排、图微调与自由编排
Graph 与 Agent 结合有三种主要模式。选择模式前,应先判断“拓扑由协作协议决定,还是由业务规则决定”。
1、三种模式
| 模式 | 典型写法 | 适用场景 |
|---|---|---|
| 协议自动编排 | protocol(...).agentAdd(...) | 团队协作模式稳定,可由预置协议表达 |
| 协议图微调 | 预置协议 + graphAdjuster | 保留协议能力,同时插入校验或业务节点 |
| 自由编排 | NONE + graphAdjuster | 拓扑完全由业务约束决定 |
本系列优先使用 NONE 展示可见、可控的 Agent Graph,但这只是教程主线,并非 TeamAgent 的框架默认值。未调用 .protocol(...) 时,TeamAgent 默认使用 HIERARCHICAL。
2、协议自动编排
例如顺序协作:
TeamAgent team = TeamAgent.of(null)
.name("review_team")
.protocol(TeamProtocols.SEQUENTIAL)
.feedbackMode(false)
.agentAdd(analyst, reviewer)
.build();
协议负责构建 Graph,也负责相应的 Prompt 和协作语义。适合:
- 固定顺序协作;
- 主管动态派发;
- Agent 主动接力;
- 已有协议能够覆盖的团队形态。
这时不必为展示 Graph 而手写一遍相同拓扑。
3、协议图微调
TeamAgent 构建时会先让协议执行 buildGraph(spec),然后再应用 graphAdjuster。因此使用非 NONE 协议时,graphAdjuster 修改的是 协议已经生成的图。
典型用途:
- 在输出前插入合规校验;
- 在高风险路径加入人工审核;
- 调整已有节点连接;
- 加入确定性数据准备节点。
示意:
TeamAgent team = TeamAgent.of(supervisor)
.name("delivery_team")
.protocol(TeamProtocols.HIERARCHICAL)
.agentAdd(coder, tester)
.graphAdjuster(spec -> {
// 先读取协议生成的节点,再有针对性地调整连接。
spec.getNode("some_node").linkClear();
spec.getNode("some_node").linkAdd("compliance_check");
spec.addActivity("compliance_check")
.task((ctx, node) -> validate(ctx))
.linkAdd(Agent.ID_END);
})
.build();
具体节点 ID 取决于协议定义。调整前应先导出 team.getGraph().toYaml() 或阅读协议源码,不要猜测节点名称。
同 ID 的节点可能被替换;调整已有节点时应特别检查旧连接是否仍然保留。
4、自由编排
TeamProtocols.NONE 不预建任何节点:
TeamAgent team = TeamAgent.of(null)
.name("order_risk_graph")
.protocol(TeamProtocols.NONE)
.agentAdd(classifier, reviewer)
.graphAdjuster(spec -> {
spec.addStart(Agent.ID_START).linkAdd(classifier.name());
spec.addActivity(classifier).linkAdd("risk_route");
// 自行添加网关、分支、汇聚和 End
})
.build();
自由编排适合:
- 金额、权限、状态机决定路径;
- 需要 Exclusive、Inclusive、Parallel 或循环;
- Agent 与数据库查询、审批、通知等业务节点混排;
- 恢复位置和副作用边界需要精确设计。
NONE 只表示不预建拓扑,不表示没有 TeamAgent 运行时。它仍然创建 TeamTrace、使用 AgentSession,并执行团队结果收敛。
5、独立业务 Graph
如果系统本体是业务流程,AI 只是其中少量节点,不必把整个业务流程包装成 TeamAgent:
独立 Graph
-> 数据校验
-> Agent 适配节点
-> 人工任务
-> 数据落库
这种模式由外层 FlowEngine 执行,并在 Agent Activity 中显式组装 Prompt。它与 TeamAgent 内部 Graph 的区别:
| 维度 | TeamAgent 内部 Graph | 独立业务 Graph |
|---|---|---|
| Prompt | TeamProtocol 参与准备 | Activity 显式准备 |
| Agent 记录 | 自动进入 TeamTrace | 默认没有 TeamTrace |
| 最终答案 | TeamAgent 收敛 | 业务节点自行写 Context |
| FlowEngine | TeamAgent 内部持有 | 应用自行创建和配置 |
| Executor | 由 TeamAgent 当前实现决定 | 应用可配置 Driver/Executor |
6、选型建议
只是固定团队协作?
-> 优先预置 TeamProtocol
保留协议但增加业务控制?
-> 协议 + graphAdjuster
多 Agent 拓扑完全由业务规则决定?
-> NONE + graphAdjuster
普通业务流程只嵌入少量 Agent?
-> 独立 Graph + 显式 Agent 适配节点
不要为了“更智能”把确定性规则交给 LLM;也不要为了“更可控”把所有文本理解任务写成大量脆弱规则。Graph 和 Agent 各自承担擅长的部分,才是本系列的设计边界。