Files
openclaw/docs/zh-CN/tools/subagents.md
Tyler Yust 64849e81f5 feat(config): default thinking for sessions_spawn subagents (#7372)
* feat(config): add subagent default thinking

* fix: accept config subagents.thinking + stabilize test mocks (#7372) (thanks @tyler6204)

* fix: use findLast instead of clearAllMocks in test (#7372)

* fix: correct test assertions for tool result structure (#7372)

* fix: remove unnecessary type assertion after rebase
2026-02-02 12:14:17 -08:00

157 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
read_when:
- 你希望通过智能体进行后台/并行工作
- 你正在修改 sessions_spawn 或子智能体工具策略
summary: 子智能体:生成独立的智能体运行并将结果回报给请求者聊天
title: 子智能体
x-i18n:
generated_at: "2026-02-01T21:43:16Z"
model: claude-opus-4-5
provider: pi
source_hash: 0e88b4a52d2f0df3dc7c7de87af7ab86f73b81aed91c01e676aa0bd2512d7d21
source_path: tools/subagents.md
workflow: 15
---
# 子智能体
子智能体是从现有智能体运行中生成的后台智能体运行。它们在自己的会话(`agent:<agentId>:subagent:<uuid>`)中运行,完成后会将结果**回报**到请求者的聊天渠道。
## 斜杠命令
使用 `/subagents` 检查或控制**当前会话**的子智能体运行:
- `/subagents list`
- `/subagents stop <id|#|all>`
- `/subagents log <id|#> [limit] [tools]`
- `/subagents info <id|#>`
- `/subagents send <id|#> <message>`
`/subagents info` 显示运行元数据(状态、时间戳、会话 ID、转录路径、清理方式
主要目标:
- 并行化"研究/长任务/慢工具"工作,不阻塞主运行。
- 默认保持子智能体隔离(会话分离 + 可选沙箱)。
- 保持工具表面难以被滥用:子智能体默认**不**获取会话工具。
- 避免嵌套扇出:子智能体不能生成子智能体。
费用提示:每个子智能体有其**独立的**上下文和 token 用量。对于繁重或重复的任务,建议为子智能体设置较便宜的模型,主智能体保持使用更高质量的模型。可通过 `agents.defaults.subagents.model` 或按智能体覆盖进行配置。
## 工具
使用 `sessions_spawn`
- 启动子智能体运行(`deliver: false`,全局队列:`subagent`
- 然后运行回报步骤,将回报回复发布到请求者的聊天渠道
- 默认模型:继承调用者,除非你设置了 `agents.defaults.subagents.model`(或按智能体 `agents.list[].subagents.model`);显式的 `sessions_spawn.model` 仍然优先。
- 默认思考级别:继承调用者,除非你设置了 `agents.defaults.subagents.thinking`(或按智能体 `agents.list[].subagents.thinking`);显式的 `sessions_spawn.thinking` 仍然优先。
工具参数:
- `task`(必填)
- `label?`(可选)
- `agentId?`(可选;如果允许,在另一个智能体 ID 下生成)
- `model?`(可选;覆盖子智能体模型;无效值会被跳过,子智能体将使用默认模型运行并在工具结果中发出警告)
- `thinking?`(可选;覆盖子智能体运行的思考级别)
- `runTimeoutSeconds?`(默认 `0`;设置后,子智能体运行在 N 秒后中止)
- `cleanup?``delete|keep`,默认 `keep`
允许列表:
- `agents.list[].subagents.allowAgents`:可通过 `agentId` 指定的智能体 ID 列表(`["*"]` 允许任意)。默认:仅请求者智能体。
发现:
- 使用 `agents_list` 查看当前允许用于 `sessions_spawn` 的智能体 ID。
自动归档:
- 子智能体会话在 `agents.defaults.subagents.archiveAfterMinutes`默认60后自动归档。
- 归档使用 `sessions.delete` 并将转录重命名为 `*.deleted.<timestamp>`(同一文件夹)。
- `cleanup: "delete"` 在回报后立即归档(仍通过重命名保留转录)。
- 自动归档为尽力而为;如果 Gateway网关重启待处理的定时器会丢失。
- `runTimeoutSeconds` **不会**自动归档;它仅停止运行。会话保留直到自动归档。
## 认证
子智能体认证按**智能体 ID** 解析,而非按会话类型:
- 子智能体会话键为 `agent:<agentId>:subagent:<uuid>`
- 认证存储从该智能体的 `agentDir` 加载。
- 主智能体的认证配置文件作为**回退**合并;冲突时智能体配置文件覆盖主配置文件。
注意:合并是叠加的,因此主配置文件始终作为回退可用。目前尚不支持按智能体完全隔离的认证。
## 回报
子智能体通过回报步骤汇报结果:
- 回报步骤在子智能体会话内运行(而非请求者会话)。
- 如果子智能体回复的内容恰好为 `ANNOUNCE_SKIP`,则不发布任何内容。
- 否则,回报回复通过后续的 `agent` 调用(`deliver=true`)发布到请求者的聊天渠道。
- 回报回复在可用时保留线程/话题路由Slack 线程、Telegram 话题、Matrix 线程)。
- 回报消息被规范化为稳定的模板:
- `Status:`:根据运行结果推导(`success``error``timeout``unknown`)。
- `Result:`:回报步骤的摘要内容(如缺失则为 `(not available)`)。
- `Notes:`:错误详情和其他有用的上下文。
- `Status` 不从模型输出推断;它来自运行时结果信号。
回报负载末尾包含统计行(即使被包装时也是如此):
- 运行时间(例如 `runtime 5m12s`
- Token 用量(输入/输出/总计)
- 配置了模型定价时的预估费用(`models.providers.*.models[].cost`
- `sessionKey``sessionId` 和转录路径(以便主智能体可通过 `sessions_history` 获取历史记录或检查磁盘上的文件)
## 工具策略(子智能体工具)
默认情况下,子智能体获取**除会话工具外的所有工具**
- `sessions_list`
- `sessions_history`
- `sessions_send`
- `sessions_spawn`
通过配置覆盖:
```json5
{
agents: {
defaults: {
subagents: {
maxConcurrent: 1,
},
},
},
tools: {
subagents: {
tools: {
// deny 优先
deny: ["gateway", "cron"],
// 如果设置了 allow则变为仅允许模式deny 仍然优先)
// allow: ["read", "exec", "process"]
},
},
},
}
```
## 并发
子智能体使用专用的进程内队列通道:
- 通道名称:`subagent`
- 并发数:`agents.defaults.subagents.maxConcurrent`(默认 `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`)。