agent_delegate - 委派
把任务交给会话中的另一个 Agent,等待它的答复
agent_delegate 让一个 Agent 把任务交给会话里的另一个 Agent 处理。被委派的是一个常驻的正式成员,它有自己的工作空间、记忆、技能和会话,在自己的环境里作答,结果回到发起方,不会直接发给用户。
这是 Agent 团队协作的底层能力。关于团队如何组建、群聊里主 Agent 如何决定委派,见团队文档。
只有在团队会话中,也就是会话里有两个及以上启用的 Agent 时,agent_delegate 工具才会出现。单 Agent 的部署看不到它。
与子 Agent 的区别
| 子 Agent | 委派 | |
|---|---|---|
| 生命周期 | 为一个任务创建,用完即弃 | 常驻 Agent,事先配置 |
| 工作空间 | 与调用方共享 | 独立 |
| 记忆 | 没有自己的 | 独立 |
| 身份 | 匿名 | 出现在 Agent 列表中,可绑定通道 |
需要把自己的活并行化,用子 Agent。任务本就属于别人,也就是拥有那个代码库、那个知识库、那个客户关系的 Agent 时,才用委派。
同步执行
委派会把任务交出去,等待对方作答,再把答复返回。调用会一直阻塞到对方完成,或时间预算耗尽,因此没有需要轮询的状态,也没有需要跟踪的句柄。
代码
agent_delegate(agent_id="research", task="...")
-> { status: "done", content: "..." }在底层,这次运行会记录在目标的工作空间中,父节点是发起委派的那个 run,因此一条委派链从两端都能追溯。
可委派的对象
能被委派的,是当前会话中的成员。委派始终限定在这个会话内部,不会把任务交给会话之外的 Agent,即便白名单本可放行。若指向的不是会话成员,工具会拒绝,并列出实际可以委派的对象。
参数
| 参数 | 说明 |
|---|---|
agent_id |
会话成员的 ID |
task |
一份自洽的任务说明,对方无需看到本会话即可据此行动 |
边界
委派发生在完整的 Agent 之间,因此设有边界:
| 边界 | 说明 |
|---|---|
| 成员 | 目标必须是当前会话中的成员 |
| 白名单 | 谁可以找谁,不设置则任意 Agent 之间都可委派 |
| 环路 | 已在链路中的 Agent 不能被再次委派 |
| 深度 | 一条链最多允许多少跳 |
| 长度 | 单次任务文本的上限 |
| 时间预算 | 一次委派运行最长可以跑多久,超出即放弃 |
配置
json
{
"agent_delegation": {
"enabled": true,
"allowed_targets": {
"assistant": ["research", "support"],
"research": []
},
"max_depth": 3,
"timeout_seconds": 600,
"max_message_chars": 8000
}
}| 字段 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
设为 false,或把整个配置块设为 false,即可完全不提供该工具 |
allowed_targets |
未设置 | 源 Agent ID 到其可访问 ID 的映射,"*" 表示任意。未设置则允许所有组合。目标还会进一步限定在当前会话的成员范围内 |
max_depth |
3 |
一条链的委派跳数(1-8) |
timeout_seconds |
600 |
单次委派运行的时间预算(0.01-600) |
max_message_chars |
8000 |
单次委派任务的长度上限 |
像上面的 "research" 那样配成空数组的 Agent,可以被委派,但不能再向外委派。