首页openclaw教程中心 › 会话管理教程

会话管理教程

什么是会话

在 OpenClaw 中,会话(Session) 是智能体与用户之间的一次完整对话。每个会话拥有独立的上下文——智能体在一个会话中记住的内容不会自动出现在另一个会话中。 你可以把会话想象成聊天软件里的"对话窗口": - 每个对话窗口有自己的聊天记录 - 切换窗口后,之前的对话内容不会混在一起 - 关闭窗口后,聊天记录仍然保存在本地 会话是 OpenClaw 上下文管理的基本单位。理解会话机制,能帮助你更好地控制智能体的行为和资源消耗。

会话存储位置

OpenClaw 将所有会话数据存储在本地文件系统中,使用 JSONL(JSON Lines)格式。

存储目录结构

`` ~/.openclaw/agents//sessions/ ├── .jsonl ├── .jsonl ├── .jsonl └── ... ` 每个 .jsonl 文件就是一个会话,文件中的每一行是一条消息记录(JSON 格式)。

查看会话文件

`bash

查看会话目录

ls ~/.openclaw/agents/default/sessions/

查看某个会话的内容(每行一条消息)

cat ~/.openclaw/agents/default/sessions/.jsonl

统计会话数量

ls ~/.openclaw/agents/default/sessions/ | wc -l
`

JSONL 格式说明

每条消息记录包含以下关键字段:
`json { "role": "user", "content": "你好,帮我写一个 Python 脚本", "timestamp": "2025-01-15T10:30:00Z" } ` `json { "role": "assistant", "content": "好的,我来帮你写一个 Python 脚本...", "timestamp": "2025-01-15T10:30:05Z", "tokens": { "input": 150, "output": 320 } } ` JSONL 格式的优势: - 追加写入:新消息直接追加到文件末尾,不需要重写整个文件 - 流式读取:可以逐行读取,不需要一次性加载整个会话 - 易于调试:纯文本格式,可以直接用文本编辑器查看

会话 ID 和路由

会话 ID 的生成规则

会话 ID 由渠道(Channel)联系人(Contact) 的组合决定:
` 会话 ID = 渠道类型 + 渠道标识 + 联系人标识 ` 例如: - Telegram 用户 @alice 的会话 → telegram:bot123:alice - WhatsApp 用户 +86138xxxx 的会话 → whatsapp:myphone:8613800001111 - WebChat 匿名用户的会话 → webchat:default:anonymous-abc123

路由机制

当一条消息到达 Gateway 时,OpenClaw 按以下步骤确定会话: 1. 识别渠道:消息来自哪个渠道(Telegram、WhatsApp、WebChat 等) 2. 识别联系人:消息来自哪个用户(用户 ID、手机号等) 3. 查找会话:根据渠道 + 联系人组合查找已有会话 4. 创建或复用:如果找到已有会话则继续对话,否则创建新会话 这意味着: - 同一个用户在同一个渠道上,始终使用同一个会话 - 同一个用户在不同渠道上,使用不同的会话 - 不同用户在同一个渠道上,各自有独立的会话

多智能体路由

如果你配置了多个智能体,会话路由还会考虑 Bindings 规则:
`json { "agents": { "list": [ { "id": "work-agent", "bindings": [ { "channel": "telegram", "peer": "@alice" } ] }, { "id": "personal-agent", "bindings": [ { "channel": "whatsapp" } ] } ] } } ` 在这个配置中: - Telegram 上 @alice 的消息路由到 work-agent - WhatsApp 上所有消息路由到 personal-agent - 每个智能体有自己独立的会话目录

会话压缩(Compaction)

为什么需要压缩

每次智能体回复时,都需要把整个会话历史发送给 AI 模型。随着对话越来越长,会出现两个问题: 1. 超出上下文窗口:模型有 Token 上限(如 128K),超长对话会被截断 2. 成本增加:发送的 Token 越多,API 费用越高 会话压缩(Compaction)就是解决这个问题的机制——当对话太长时,自动将早期对话总结为一段摘要,释放上下文空间。

压缩的工作原理

` 压缩前: [消息1] [消息2] [消息3] ... [消息50] [消息51] [消息52] ↑ 上下文快满了 压缩后: [摘要:消息1-50的总结] [消息51] [消息52] ↑ 上下文空间充足 ` 压缩过程: 1. OpenClaw 检测到上下文使用率超过阈值(通常 70-80%) 2. 自动将早期消息发送给模型,生成一段总结摘要 3. 用摘要替换原始消息,大幅减少 Token 数量 4. 最近的消息保持原样,确保对话连贯性

压缩配置

~/.openclaw/openclaw.json 中配置压缩行为: `json { "compaction": { "enabled": true, "threshold": 0.75, "keepRecent": 10 } } ` | 参数 | 说明 | 默认值 | |------|------|--------| | enabled | 是否启用自动压缩 | true | | threshold | 上下文使用率触发阈值 | 0.75(75%) | | keepRecent | 压缩时保留最近的消息数 | 10 |

压缩的影响

压缩后,智能体对早期对话的记忆会变成"概括性"的: - ✅ 记得讨论过什么主题 - ✅ 记得关键的结论和决定 - ❌ 可能忘记具体的措辞和细节 - ❌ 可能忘记中间的推理过程 如果你需要智能体记住某些重要信息,建议使用 Memory 系统(长期记忆)而不是依赖会话历史。

会话修剪(Pruning)

为什么需要修剪

随着时间推移,会话文件会越来越多,占用磁盘空间。会话修剪(Pruning)用于删除旧的、不再需要的会话文件。

修剪策略

OpenClaw 支持按时间修剪会话:
`bash

删除 30 天前的会话

openclaw sessions prune --older-than 30d

删除 7 天前的会话

openclaw sessions prune --older-than 7d

预览将被删除的会话(不实际删除)

openclaw sessions prune --older-than 30d --dry-run
`

修剪注意事项

- 修剪是不可逆的,删除后无法恢复 - 建议先用
--dry-run 预览,确认无误后再执行 - 修剪不会影响正在进行的会话 - 如果某些会话很重要,可以手动备份 .jsonl 文件 `bash

备份重要会话

cp ~/.openclaw/agents/default/sessions/important-session.jsonl ~/backup/
`

CLI 会话管理命令

OpenClaw 提供了一组 CLI 命令来管理会话。

查看会话列表

`bash

列出所有会话

openclaw sessions list

列出指定智能体的会话

openclaw sessions list --agent work-agent

以表格形式显示

openclaw sessions list --format table
` 输出示例: ` Session ID Agent Channel Last Active telegram:bot123:alice default telegram 2 hours ago whatsapp:myphone:8613800001111 default whatsapp 1 day ago webchat:default:anonymous-abc123 default webchat 3 days ago `

查看会话历史

`bash

查看某个会话的对话历史

openclaw sessions history

只看最近 20 条消息

openclaw sessions history --limit 20

以 JSON 格式输出

openclaw sessions history --format json
`

修剪旧会话

`bash

删除 30 天前的会话

openclaw sessions prune --older-than 30d

预览将被删除的会话

openclaw sessions prune --older-than 30d --dry-run

删除指定智能体的旧会话

openclaw sessions prune --older-than 14d --agent work-agent
`

会话统计

`bash

查看会话统计信息

openclaw sessions stats

输出示例:

Total sessions: 42

Active (last 7 days): 8

Disk usage: 12.3 MB

Oldest session: 2024-12-01

`

多渠道会话隔离

OpenClaw 的会话是按渠道 + 联系人隔离的。这意味着同一个人在不同渠道上与智能体的对话是完全独立的。

隔离示例

假设用户 Alice 同时使用 Telegram 和 WhatsApp 与你的智能体对话:
` Telegram 会话(telegram:bot123:alice): Alice: 帮我分析这份销售报告 Agent: 好的,我来看看这份报告... WhatsApp 会话(whatsapp:myphone:alice): Alice: 今天天气怎么样? Agent: 让我查一下天气... ` 两个会话完全独立: - Telegram 会话中的"销售报告"上下文不会出现在 WhatsApp 会话中 - WhatsApp 会话中的"天气"话题不会影响 Telegram 会话 - 两个会话可以同时进行,互不干扰

隔离的好处

1. 上下文清晰:每个渠道的对话主题不会混淆 2. 隐私保护:不同渠道的对话内容互相隔离 3. 灵活使用:可以在不同渠道处理不同类型的任务

跨渠道共享信息

如果你希望智能体在不同渠道之间共享某些信息,可以使用 Memory 系统:
`

在 Telegram 中

Alice: 记住我的邮箱是 alice@example.com

智能体将信息写入 MEMORY.md(长期记忆)

在 WhatsApp 中

Alice: 我的邮箱是什么?

智能体从 MEMORY.md 中读取,跨渠道获取信息

` Memory 是跨会话、跨渠道的持久化存储,而会话只在单个渠道内有效。

/new 和 /reset 命令

/new — 开始新会话

在任何渠道中发送
/new 命令,可以结束当前会话并开始一个全新的会话: ` 用户: /new Agent: 好的,已开始新会话。之前的对话上下文已清除。 ` 使用场景: - 当前话题已经结束,想聊一个全新的话题 - 会话上下文太长,想从头开始 - 智能体"记混了",想重置上下文 /new 的效果: - 创建一个新的会话 ID - 旧会话的 .jsonl 文件保留在磁盘上 - 新会话从空白上下文开始(但 Memory 和 SOUL.md 仍然生效)

/reset — 重置当前会话

/reset/new 类似,但有细微区别: ` 用户: /reset Agent: 会话已重置。 ` /reset 的效果: - 清除当前会话的对话历史 - 保持同一个会话 ID - 相当于"清空聊天记录"

/new vs /reset 对比

| 特性 | /new | /reset | |------|------|--------| | 会话 ID | 创建新 ID | 保持原 ID | | 旧对话记录 | 保留在磁盘 | 被清除 | | 上下文 | 全新开始 | 全新开始 | | Memory | 仍然生效 | 仍然生效 | | SOUL.md | 仍然生效 | 仍然生效 | 一般来说: - 想保留旧对话记录用
/new - 想彻底清理用 /reset

实用技巧

1. 定期修剪旧会话

设置一个定时任务,自动清理旧会话:
`bash

添加 cron 任务,每周日凌晨清理 30 天前的会话

openclaw cron add "0 0 * * 0" "openclaw sessions prune --older-than 30d"
`

2. 监控会话磁盘使用

`bash

查看会话目录大小

du -sh ~/.openclaw/agents/*/sessions/

查看最大的会话文件

ls -lhS ~/.openclaw/agents/default/sessions/ | head -10
`

3. 导出重要会话

`bash

导出会话为可读格式

openclaw sessions history --format json > my-session-backup.json
`

4. 调整压缩阈值

如果你发现智能体经常"忘记"之前的对话内容,可以提高压缩阈值:
`json { "compaction": { "threshold": 0.85, "keepRecent": 20 } } ` 这会让压缩更晚触发,保留更多原始消息,但会增加 Token 消耗。

小结

会话是 OpenClaw 上下文管理的核心机制: - 每个对话是一个独立的会话,存储为 JSONL 文件 - 会话 ID 由渠道 + 联系人组合决定,确保多渠道隔离 - 压缩(Compaction)自动总结长对话,释放上下文空间 - 修剪(Pruning)删除旧会话,释放磁盘空间 -
/new 开始新会话,/reset` 重置当前会话 - 跨渠道信息共享需要使用 Memory 系统 理解会话机制,能帮助你更好地控制智能体的上下文、优化 Token 消耗、管理磁盘空间。 #会话管理 #Session #压缩机制 #会话隔离 #龙虾技能库
#会话管理#Session#压缩#修剪#中级教程

📚 相关教程

上下文引擎与压缩机制教程进阶
深入理解 OpenClaw 的上下文引擎如何构建提示词、管理 Token 窗口,以及对话压缩和消息队列的工作原理,帮助你优化 Token 使用和控制成本。
API 成本与 Token 管理教程中级
了解 OpenClaw 的 API 使用成本构成、Token 计算方式、使用量追踪方法,以及通过模型选择、Prompt 缓存和上下文压缩等手段优化成本的实用建议。
模型故障转移与流式传输教程中级
了解 OpenClaw 的模型故障转移机制和流式传输配置,确保智能体在主模型不可用时自动切换备用模型,并通过分块回复提升用户体验。
← 模型提供商配置教程工具使用教程 →