Skip to content

把工作委派给其他 Agent ​

当工作可以拆成各自产出结果的部分时,可以让飞书里的主 Agent 委派给其他专家,再汇总 结果。本文说明如何提出可执行的分工、核实委派、继续同一位专家的工作,以及处理失败。

先决定需要哪一种协作 ​

需求合适的对象应记录的身份
继续与当前助手讨论当前 Session 的下一轮对话当前话题或会话,不要求产生 Task ID
做完一次检查、分析或修改就交付临时 TaskRuntask_id
同一专家分几轮持续处理一个工作区持久 Agent Instanceagent_instance_id,以及每次执行的 task_id
调用原生 Agent 自己的子 Agent由原生 Agent 提供的功能不自动拥有 amux Task 或 Instance 身份

Profile 是可复用的专家定义,不是某次执行。两次指定 builtin/codex 可以创建两次 独立工作;要继续某个持久专家,需要复用实例 ID。

准备足够明确的分工 ​

主 Agent 需要能使用 amux 委派工具,并能找到可用 Profile。机器人能聊天,不代表它一定 具备这些工具;Profile 的存在也不证明其凭据、工作区和目标机器已准备好。

首次使用时,可以先让主 Agent 列出可用专家,并说明各自能处理什么。正式委派包含:

要素示例
输入与范围指定仓库和提交、附上需要检查的差异或文档段落
分工一位检查正确性,一位检查测试覆盖
允许的操作只读审阅,先不要修改文件或创建远端记录
交付标准每条结论包含文件位置、依据和建议
执行环境使用哪台 Runtime 上的仓库或工作区,是否需要凭据
时间边界每个子任务的时限;超时后报告已有证据和未完成部分
汇总方式主 Agent 合并重复项,标明分歧和缺少证据的判断

下面是自然语言请求示例,不是飞书斜杠命令:

@助手 请审阅指定仓库的这次改动。先确认可用专家和仓库位置,再通过 amux 将正确性检查 与测试覆盖检查分别委派给两位专家,只做只读分析。为每位专家明确提供改动范围和材料。 创建后返回各自的任务 ID;完成后合并问题列表,每条附文件依据,并标出未完成项。

Agent 是否按请求使用 amux 工具仍取决于模型、工具和权限。它在文本中写“我让另一个 专家看了”不足以证明委派发生,应核对工具返回的任务或实例 ID。

跟踪一次有边界的委派 ​

通常的可验证流程是:主 Agent 选择 Profile → amux.task_submit 返回 Task ID → 子执行准备与运行 → amux.task_get / amux.task_stream 返回状态与结果 → 主 Agent 汇总。 amux.task_run 是等待结果的同步入口;需要把权限请求上报给主 Agent 时,不能使用这种 阻塞形式,应采用异步提交和查询。

Task 在被选中的 Runtime 上执行。默认工作区是临时目录,并不会自动把父会话的当前 目录、未提交修改、整段飞书话题或所有附件复制过去。审阅仓库时需提供可访问的仓库身份 或目标机器上的路径;使用 git-worktree 时还要满足仓库目录或缓存标识要求。

如何阅读子任务卡 ​

在已绑定的飞书对话中,amux 观察到相关委派后,会为子工作显示独立进度卡,并在原卡上 持续更新。卡片标签使用专家短名和实例或子 Session 的身份片段;Task ID 可能作为启动前 的临时标识。因此,用完整 Task ID 核对记录,比仅凭卡片标题更可靠。

  • 主卡显示主 Agent 的活动摘要;子卡的执行过程、模型和结果属于那个子执行。
  • 子任务成功后,主 Agent 可能仍在比较结论,不能把一张子卡完成当成整个请求完成。
  • 父回答结束也不等于所有子任务都被取消,仍应检查各自状态。
  • 子卡的累计用量来自其 Provider 对话;持久专家可能包含之前 TaskRun 的用量,不能把 父子卡数字简单相加作为本次工作的计费结果。
  • 没有子卡时,先检查 Task ID 和记录。卡片是展示入口,任务记录才用于确认是否实际创建。

状态和结果分别看什么 ​

状态读者应该怎么理解
pending / preparing / running 等非终态工作尚未完成,可能仍在准备资源或执行
waiting_permission有权限请求需要按该 Task 的策略处理
succeeded系统记录执行成功,仍需核对报告、补丁或文件是否满足验收要求
failed执行失败,读取错误与已产生的结果,不应冒充完整交付
cancelled已取消,不等于已执行过的修改被撤销
timed_out超过截止时间,检查已完成内容后决定是否重新分工

当前默认 Task 时限为 30 分钟,timeout_seconds 从接受任务起计算,包括准备和 Agent 启动。显式配置更短时限时,也要给资源准备留出时间。默认返回摘要;需要完整证据时再 读取事件或详细结果,完整文本也可能因大小限制截断,并提供继续获取的线索。

处理权限、停止和失败 ​

子任务权限策略控制的是权限请求的处理:默认的 policy-allow 自动处理符合规则的请求, 不保证逐项向人确认;deny-all 拒绝请求, escalate-to-main 将请求上报,由主流程通过任务工具响应。策略不会赋予文件系统权限、 绕过隔离、补上缺失凭据,也不能当作只读沙箱。

不要把在飞书里对主回答发送 /interrupt 当成“所有子任务已经取消”。需要停掉明确的 子工作时,让主 Agent 对对应 Task ID 使用 amux.task_cancel 并返回最终状态。取消只 处理该执行,已经写入的文件或外部系统变化仍需另行检查。

某个子任务失败后,可以先取回错误和已有证据,只重做缺失部分。结果验收时检查文件 所在的 Runtime 与工作区;子工作生成的补丁不会因为完成就自动合并到你的主分支,也 不能仅凭一段“已修改”说明判断父工作区已改变。

运维者可使用以下只读命令核对:

sh
amux task show <task-id>
amux task logs <task-id>

让同一位专家继续工作 ​

需要分几轮处理同一环境时,明确要求建立持久 Agent Instance,并保留实例 ID。例如:

请用持久专家完成第一轮审阅,返回实例 ID、这次的任务 ID 和主要发现。等我补充约束后, 继续使用同一个实例,不要重新创建另一个同名专家。

工具何时使用是否启动新工作
amux.instance_spawn第一次创建持久专家启动初次工作,返回稳定实例身份
amux.instance_followup让已有实例继续处理明确的新要求是,产生新的 TaskRun,保留原生对话历史
amux.instance_send暂存补充消息,供以后唤醒时读取否,只进入信箱,在之后的任务提示前交付
amux.instance_steer纠正实例此刻正在做的工作否,加入当前执行;没有执行在跑时回落到信箱(delivery=mailbox)
amux.instance_wait等待实例当前执行结束或等待超时否;结果仍通过 Task 工具获取
amux.instance_interrupt取消实例当前所属的执行保留实例和可恢复环境,不删除实例身份

追问可写:“继续使用实例 <agent_instance_id>,根据刚补充的约束重新评估第二个风险, 并返回新的 Task ID。”只有换成 instance_followup 等真正的执行入口才会唤醒工作; instance_send 成功不代表它已经开始回答。instance_steer 返回 delivery=mailbox 后, 用 instance_followup 继续:信箱里的纠正会先送达,新的提示里不要重复它。

instance_wait 的等待超时也不等于 Task 超时或取消。等待结束后,按对应 Task ID 使用 amux.task_get 或 amux.task_stream 查询结果。

实例会回到已经记录的 Runtime,保留可恢复的 Provider 历史和环境;这不是跨机器自动 故障转移承诺。实例的 active / idle / archived 与某次 Task 的成功或失败是不同 状态,查询时不要混用。

常见问题 ​

现象核对或修复
声称已委派,但找不到任务请主 Agent 返回真实工具结果和 Task / Instance ID,区分原生子 Agent
子任务找不到仓库或文件给出目标 Runtime 可访问的路径、仓库和明确输入,检查工作区策略
子任务一直等授权查询 waiting_permission 和权限 ID;检查主流程是否能响应上报请求
同一专家似乎忘记上次工作是否复用了实例 ID,还是仅重新选择相同 Profile
发了实例消息却没有回答是否只调用了 instance_send;需要 instance_followup 才启动新任务
主 Agent 已停止,子任务仍在运行单独取消指定 Task,并核对其最终状态
所有子卡成功但没有最终结论要求主 Agent 获取各自结果、处理分歧并完成汇总

其他飞书机器人属于另一种接入,不等于本机安装的 Profile。外部 Bot 发现和新委派要求 当前群的有效绑定,不能据此跨群发现机器人。产品对象见Agent 概念, 权限、工作区与完整工具参数见 Task 模型、 Task 操作指南和 MCP 参考。

Released under the Apache-2.0 License.