Skip to content

智能体编排

智能体编排把多个已发布的设备智能体组合起来完成一个目标。编排引擎内置在设备智能体网关里,随 bun run dev:agent 一起启动,通过 A2A over MQTT 调用所选智能体。编排分为两种方式:场景任务

前提条件

  • 已经开启 A2A 协作并发布了至少两个在线设备智能体。参见 A2A 协作
  • 网页控制台开启了 VITE_FF_A2A_MARKETPLACE_ENABLE=true,能看到 A2A 市场 入口。
  • 网关已配置可用的大模型。编排引擎用它生成场景流程图和任务执行计划。参见 大模型配置

场景

场景是预定义的多智能体流程:先勾选智能体、填写目标,编排引擎用大模型把目标拆成一张有向无环图(DAG),每个节点是一次智能体调用,节点之间的依赖决定执行顺序。

创建场景

  1. 打开 A2A 市场,点击右侧场景面板的 创建场景
  2. 填写场景名称和目标描述。目标描述越具体,生成的流程图越准确。
  3. 勾选要参与协作的在线智能体。
  4. 点击 创建场景

创建后场景状态先显示为“创建中”,编排引擎在后台分析所选智能体的能力并生成流程图,生成完成后变为“就绪”。如果所选智能体离线、目标无法拆解或大模型调用失败,状态会变为“失败”。

生成时模型会反思校验:每个步骤用到的信息是否能从某个智能体或用户输入获得。如果缺少关键参数(例如“温度太高”没有给出阈值),场景会进入“待补充”状态,并列出需要确认的问题;在创建页面回答后,模型会结合你的输入重新生成。如果流程不可行,模型会重新规划后再试。

重要:模型不会把生成时刻的临时事实(比如今天的日期、当前时间)写进任务,因为执行时这些值已经失效。每个条件所需的运行时信息(当前温度、当前时间、门是否开着等)必须由某个已选智能体在执行时提供。如果目标需要某种运行时观测,但已选智能体都没有这个能力(例如“在夜晚”需要当前时间,但没有智能体能报时),场景生成会失败,并说明缺少什么能力、建议补充哪种智能体;你可以加入具备该能力的智能体后重新创建。

查看流程图

点击场景卡片可以打开流程图视图。图里每个节点对应一次智能体调用,显示目标智能体和该步骤的指令;节点之间的连线表示执行依赖。标记为 terminal 的节点是最终输出步骤,其结果会拼接到场景的最终回复里。下游步骤的指令里可以用 {<上游任务 id>} 引用上游步骤的输出,运行时会被替换成实际结果。

启动场景

在场景卡片或流程图视图上点击 启动,相当于对场景说一句 go。编排引擎按依赖顺序调度智能体:先执行没有依赖的步骤,某一步完成后会触发依赖它的后续步骤;任意一步失败会把失败向下游传播。依赖上游输出的步骤会把上游结果注入到自己的指令里(条件判断也写在下游步骤的指令中),整个过程的进度会实时显示在编排聊天框里,包括每一步发出了什么、收到了上游什么、返回了什么。

任务

任务是临时的多智能体指令,不需要预先定义流程图。在编排聊天框里用自然语言描述目标,编排引擎用大模型生成执行计划(选择哪些智能体、对每个智能体说什么),然后依次调用这些智能体,按普通对话方式返回结果。

适合一次性、临时性的跨智能体需求,例如“查一下所有房间的温度,把偏高的房间空调调到 24 度”。

实时状态

场景和任务的运行进度都显示在 A2A 市场页面的编排聊天框里:

  • 每个步骤开始、完成或失败时会更新一条进度。
  • 最终结果以消息形式返回。
  • 失败会标明出错步骤和原因。

进度通过 SSE 实时推送到页面,不需要手动刷新。

限制

  • 运行状态保存在内存里。网关重启时,进行中的运行会中断;场景定义本身会持久化,重启后仍可再次启动。
  • 编排引擎调用的是当前在线的智能体。运行过程中某个智能体离线,对应步骤会失败。
  • 场景流程图和任务计划都由大模型生成,结果取决于模型能力和目标描述的清晰程度。