Solon v4.1.0

自动编排、图微调与自由编排

</> markdown
2026年9月18日 上午11:50:53

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
PromptTeamProtocol 参与准备Activity 显式准备
Agent 记录自动进入 TeamTrace默认没有 TeamTrace
最终答案TeamAgent 收敛业务节点自行写 Context
FlowEngineTeamAgent 内部持有应用自行创建和配置
Executor由 TeamAgent 当前实现决定应用可配置 Driver/Executor

6、选型建议

只是固定团队协作?
  -> 优先预置 TeamProtocol

保留协议但增加业务控制?
  -> 协议 + graphAdjuster

多 Agent 拓扑完全由业务规则决定?
  -> NONE + graphAdjuster

普通业务流程只嵌入少量 Agent?
  -> 独立 Graph + 显式 Agent 适配节点

不要为了“更智能”把确定性规则交给 LLM;也不要为了“更可控”把所有文本理解任务写成大量脆弱规则。Graph 和 Agent 各自承担擅长的部分,才是本系列的设计边界。