子代理是从现有代理运行中产生的后台代理运行。它们在自己的会话中运行,完成后将结果通告回请求者聊天频道。
概述
子代理系统允许主代理派生独立的后台任务,实现并行处理和任务隔离,同时保持会话安全性。
主要目标
- 并行化"研究/长任务/慢工具"工作而不阻塞主运行
- 通过会话分离和可选沙箱保持子代理隔离
- 保持工具表面难以误用:子代理默认不获取会话工具
- 避免嵌套扇出:子代理无法产生子代理
斜杠命令
使用 /subagents 检查或控制当前会话的子代理运行:
# 列出子代理
/subagents list
# 停止子代理
/subagents stop <runId>
# 查看日志
/subagents log [limit] [tools]
# 查看详细信息
/subagents info <runId>
# 发送消息给子代理
/subagents send <runId> <message>
/subagents info 输出
显示运行元数据:
- 状态(运行中/完成/失败)
- 时间戳(开始/结束时间)
- 会话ID
- 转录路径
- 清理设置
工具使用: sessions_spawn
{
"tool": "sessions_spawn",
"task": "研究最新的AI技术趋势",
"label": "AI研究",
"agentId": "research",
"model": "gpt-4",
"thinking": "high",
"runTimeoutSeconds": 600,
"cleanup": "delete"
}
工具参数
task(必需): 任务描述label(可选): 运行标签agentId(可选): 指定代理IDmodel(可选): 覆盖子代理模型thinking(可选): 思考级别runTimeoutSeconds(可选,默认0): 运行超时cleanup(可选,默认keep): "delete"或"keep"
模型配置
子代理继承调用者的模型,除非配置覆盖:
{
"agents": {
"defaults": {
"subagents": {
"model": "gpt-3.5-turbo"
}
},
"list": [
{
"id": "main",
"subagents": {
"model": "gpt-4"
}
}
]
}
}
成本注意
每个子代理都有自己的上下文和token使用。对于大量或重复性任务,为子代理设置更便宜的模型,保持主代理使用高质量模型。
代理白名单
{
"agents": {
"list": [
{
"id": "main",
"subagents": {
"allowAgents": ["research", "data-processor", "*"]
}
}
]
}
}
使用 agents_list 工具查看允许的代理ID。
通告机制
子代理通过通告步骤报告结果:
- 通告步骤在子代理会话内运行(非请求者会话)
- 如果子代理回复
ANNOUNCE_SKIP,则不发送任何内容 - 否则通告回复通过follow-up
agent调用发送到请求者频道 - 通告消息在可用时保留线程/主题路由
通告消息格式
- Status: 从运行结果派生(success/error/timeout/unknown)
- Result: 通告步骤的摘要内容
- Notes: 错误详情和其他上下文
统计信息
通告有效载荷末尾包含统计行:
- 运行时间(如
runtime 5m12s) - Token使用(输入/输出/总计)
- 估算成本(如果配置了模型定价)
- sessionKey, sessionId 和转录路径
自动归档
子代理会话在一定时间后自动归档:
{
"agents": {
"defaults": {
"subagents": {
"archiveAfterMinutes": 60
}
}
}
}
- 默认: 60分钟后归档
cleanup: "delete": 通告后立即归档- 归档使用
sessions.delete并将转录重命名为*.deleted. - Gateway重启时,待处理的定时器会丢失
runTimeoutSeconds不会自动归档,仅停止运行
认证
子代理认证按代理ID解析:
- 子代理会话键:
agent::subagent: - 从该代理的
agentDir加载认证存储 - 主代理的认证配置文件作为回退合并
- 代理配置文件在冲突时覆盖主配置文件
工具策略
默认情况下,子代理获取除会话工具外的所有工具:
sessions_listsessions_historysessions_sendsessions_spawn
配置覆盖
{
"tools": {
"subagents": {
"tools": {
"deny": ["gateway", "cron"],
// 如果设置allow,则变为仅允许模式(deny仍优先)
// "allow": ["read", "exec", "process"]
}
}
}
}
并发控制
子代理使用专用的进程内队列通道:
{
"agents": {
"defaults": {
"subagents": {
"maxConcurrent": 8
}
}
}
}
- 通道名称:
subagent - 默认并发: 8
停止子代理
在请求者聊天中发送 /stop:
- 中止请求者会话
- 停止从中产生的所有活动子代理运行
限制
- 子代理通告是尽力而为的。Gateway重启时,待处理的"通告回复"工作会丢失
- 子代理共享相同的Gateway进程资源;将
maxConcurrent视为安全阀 sessions_spawn始终非阻塞:立即返回{ status: "accepted", runId, childSessionKey }- 子代理上下文仅注入
AGENTS.md+TOOLS.md(无SOUL.md,IDENTITY.md,USER.md,HEARTBEAT.md或BOOTSTRAP.md)
使用场景
- 长时间研究任务: 不阻塞主对话的深度研究
- 并行数据处理: 同时处理多个数据源
- 独立任务隔离: 风险任务在隔离环境中执行
- 多阶段工作流: 复杂任务分解为多个子任务
最佳实践
- 为子代理使用描述性标签
- 设置适当的超时避免无限运行
- 为重复性任务使用更便宜的模型
- 监控子代理的资源使用
- 使用cleanup: "delete"自动清理短期任务
- 定期检查子代理日志
提示
子代理是实现复杂并行任务的强大工具,合理使用可以大幅提升代理的处理能力和响应效率。