安全地委派给子 Agent
为协调 Agent 配置显式子路由、衰减后的能力、深度限制与策略中间件。
何时应该委派
子任务有独立指令、模型、工具集、权限边界或预算特征时,适合委派给子 Agent。不要只 为了包装一个函数就创建 Agent:类型化 Tool 更简单,也更确定。
好的 Coordinator 决定“由哪个专家处理”;审批、补偿和最终副作用仍由确定性业务代码 决定。
注册子 Agent 路由
模型看到 AgentDescriptor,Host 则管理真实子 Agent 与委派能力集合。
use std::sync::Arc;
use runifold::{AgentDescriptor, CapabilitySet};
let child = Arc::new(
runtime
.agent("researcher")
.system("Research one focused question.")
.build()?,
);
let coordinator = runtime
.agent("coordinator")
.child(
AgentDescriptor::new(
"ask_researcher",
"Delegate one focused research question",
),
child,
CapabilitySet::new(),
)
.max_delegation_depth(3)
.build()?;路由名与 Tool 共用模型可调用命名空间。名称重复会在 Build 时失败,不会静默覆盖。
权限衰减
父 Run 必须持有路由 Capability,子级请求的每项 Capability 也必须已由父级持有。 委派只能保持或减少权限,不能放大权限。
显式构造子级能力集合。研究 Agent 通常只需要只读搜索,不应该继承 Coordinator 的 发邮件或批准支付能力。
Gateway 策略
Gateway Middleware 是授权、审计、限流、输入转换与显式重试的 Around-call 边界。 它可以拒绝或观察调用,但不能替换路由身份,也不能绕过生命周期、深度、预算和权限 检查。
稳定业务策略应放进 Middleware 或应用代码,而不是 Coordinator Prompt。需要测试 “在任何 I/O 发生前拒绝”。
失败与记账
每次成功委派都会创建 Child Run,消耗共享 Delegation Budget,并把用量计入同一棵 运行树。父级取消与 Deadline 会传播给子级。
同时设置 max_delegation_depth 与 Budget.delegations。前者限制递归拓扑深度,
后者限制兄弟与后代的总工作量。
不要盲目重试被打断的子 Agent。它可能已经消耗模型 Token 或完成外部 Effect。需要 跨进程故障恢复时,使用 Checkpoint 或 Effect 边界。