前言
在 AI 助手基础部署与技能开发完成后,若需让 AI 同时处理多项任务,如并行代码编写、资料查询及消息回复,OpenClaw 的多会话管理与子代理(Sub-agents)功能可实现从单兵作战到团队协作的升级。
一、什么是多会话?
1.1 会话的概念
会话(Session)是 AI 与用户的一次对话上下文。每次交互都会创建一个新的会话,用于记录聊天历史。
默认情况下,存在一个主会话(main session),即用户直接交互的会话。
1.2 为什么需要多会话?
多会话适用于以下场景:
- 讨论项目 A 时突然涉及项目 B 的内容
- 需要 AI 查询资料而不打断当前对话
- 需同时执行多个独立任务
每个会话拥有独立的上下文,互不干扰。
1.3 会话类型
OpenClaw 中的会话主要分为:
- 主会话(main):直接对话的会话
- 子会话(sub-agent):由主会话创建的独立会话
- 临时会话:执行特定任务后自动销毁
二、会话管理基础
2.1 查看会话列表
openclaw sessions list
输出示例:
Session ID Type Status Last Active
main:001 main active 2 minutes ago
sub:code-001 sub running 5 minutes ago
sub:research-001 sub idle 1 hour ago
2.2 创建新会话
openclaw session new --label=my-task
--label 参数用于命名会话以便识别。
2.3 切换到指定会话
openclaw session switch sub:code-001
2.4 查看会话状态
openclaw session status sub:code-001
输出包括运行时长、Token 使用量、模型信息及最后活跃时间。
2.5 结束会话
# 结束指定会话
openclaw session end sub:code-001
# 结束所有子会话
openclaw sessions end --all
三、子代理(Sub-agents)详解
3.1 什么是子代理?
子代理是主会话创建的下属 AI,具备独立上下文,可执行特定任务并向主会话汇报,不会干扰主会话对话。
3.2 子代理的工作流程
主会话 → 创建子代理 → 分配任务 → 子代理执行 → 返回结果 → 主会话处理
3.3 什么时候用子代理?
| 场景 | 是否需要子代理 | 理由 |
|---|---|---|
| 简单问答 | ❌ 不需要 | 主会话直接处理 |
| 长时间任务 | ✅ 需要 | 不阻塞主会话 |
| 独立上下文 | ✅ 需要 | 避免污染主对话 |
| 并行多任务 | ✅ 需要 | 同时执行多个任务 |
| 敏感操作 | ✅ 需要 | 隔离风险 |
3.4 创建子代理
可在对话中自动创建或手动配置:
const subAgent = await sessions_spawn({
label: 'code-reviewer',
model: 'qwen-portal/coder-model',
task: 'Review this PR and provide feedback'
});
3.5 给子代理分配任务
await sessions_send({
sessionKey: subAgent.sessionKey,
message: '请帮我 review 这个 Pull Request,关注代码质量和潜在 bug'
});
3.6 获取子代理结果
子代理完成任务后会自动通知主会话,也可主动查询:
const history = await sessions_history({
sessionKey: subAgent.sessionKey,
limit: 50
});
四、实战:多会话协作案例
4.1 案例一:并行代码审查
假设需审查 3 个 PR,可创建 3 个子代理并行处理:
// 创建 3 个子代理
const agents = await Promise.all([
sessions_spawn({ label: 'reviewer-1', task: 'Review PR #101' }),
sessions_spawn({ label: 'reviewer-2', task: 'Review PR #102' }),
sessions_spawn({ label: 'reviewer-3', task: 'Review PR #103' })
]);
// 分配任务
agents.forEach((agent, i) => {
sessions_send({
sessionKey: agent.sessionKey,
message: `请 review PR #${101+i},关注代码风格和潜在 bug`
});
});
4.2 案例二:资料搜集 + 内容创作
分工模式:
- 主会话:负责整体构思和写作
- 子代理 A:搜集相关资料
- 子代理 B:整理数据成表格
- 主会话:整合内容完成文章
4.3 案例三:定时任务监控
创建子代理定期执行检查任务:
const monitor = await sessions_spawn({
label: 'heartbeat-monitor',
task: '每 30 分钟检查一次邮件和日历'
});
五、会话通信机制
5.1 主会话 → 子会话
使用 sessions_send 发送消息:
await sessions_send({
sessionKey: 'sub:code-001',
message: '任务更新:请优先处理这个 bug'
});
5.2 子会话 → 主会话
子会话完成任务后自动推送结果:
// 子会话中
await sessions_send({
label: 'main',
message: '任务完成!发现 3 个潜在问题,详情如下...'
});
5.3 会话间数据共享
会话之间默认不共享上下文以保护独立性。如需共享数据可通过以下方式:
- 通过消息传递
- 写入共享文件
- 使用外部存储
六、最佳实践
6.1 合理划分会话
- 主会话:处理核心对话和决策
- 子会话:执行具体任务、长时间运行、独立上下文
6.2 控制子代理数量
子代理消耗资源且难以管理过多实例,建议同时运行的子代理不超过 5 个。
6.3 及时清理会话
任务完成后及时结束子会话:
openclaw session end sub:completed-task
6.4 会话命名规范
建议使用有意义的名称,例如 code-reviewer-001, research-agent。
6.5 错误处理
主会话需能处理子代理失败的情况:
try {
const result = await sessions_send({ ... });
if (result.status === 'error') {
// 处理错误
}
} catch (error) {
// 异常处理
}
七、高级技巧
7.1 会话链
子代理可再创建子代理,形成层级结构:
主会话 └── 子代理 A(协调者)
├── 子代理 A-1(执行者)
└── 子代理 A-2(执行者)
7.2 会话持久化
默认会话结束后会销毁,如需持久化可配置:
await sessions_spawn({
label: 'persistent-agent',
persist: true
});
7.3 模型差异化
不同会话可使用不同模型以平衡效果与成本:
// 主会话用高级模型
main: model='claude-sonnet'
// 子代理用经济模型
sub: model='qwen-portal/coder-model'
八、常见问题
Q1: 子代理和主会话会互相干扰吗?
A: 不会。每个会话有独立的上下文和记忆,互不影响。
Q2: 子代理创建后有数量限制吗?
A: 理论上没有限制,但建议同时运行的不超过 5 个,避免资源浪费。
Q3: 子代理完成后会自动销毁吗?
A: 默认会保留一段时间,建议手动结束不需要的会话。
Q4: 如何查看子代理的历史记录?
A: 使用 sessions_history 命令或 API。
Q5: 子代理能访问主会话的文件吗?
A: 可以访问工作区文件,但会话上下文是隔离的。


