会话(Session)是 OpenClaw Agent 与用户对话的核心单元。正确配置会话管理,对多用户场景的安全性和资源控制至关重要。
核心概念
OpenClaw 将 DM(私信)主会话视为「primary」,key 格式为 agent:<agentId>:<mainKey>(默认 main)。群组/频道聊天有各自独立的 key。
DM 会话隔离策略(多用户必读)
默认情况下,所有 DM 共享同一个会话(dmScope: main)。若你的 Agent 可以被多人私信,这会导致严重的隐私泄露:
Alice 和 Agent 聊了一个私密话题,之后 Bob 问「我们之前聊了什么?」——因为共用会话,Agent 可能用 Alice 的上下文回答 Bob。
修复方法:
json
{
"session": {
"dmScope": "per-channel-peer"
}
}四种隔离级别:
| 级别 | 说明 | 适用场景 |
|---|---|---|
main(默认) | 所有 DM 共享主会话 | 单用户 |
per-peer | 按发件人 ID 隔离 | 多用户,跨平台同人共享 |
per-channel-peer | 按平台+发件人隔离 | 多用户推荐 |
per-account-channel-peer | 按账号+平台+发件人 | 多账号多用户 |
何时必须启用隔离:
- 配对审批了多个发件人
- DM 白名单有多个号码
- 设置了
dmPolicy: open - 多个号码或账号可以给 Agent 发消息
会话重置规则
每日重置(默认)
json
{
"session": {
"reset": {
"mode": "daily",
"atHour": 4,
"idleMinutes": 120
}
}
}每日凌晨 4 点(Gateway 主机本地时间)重置。同时设置 idleMinutes 时,两者哪个先到就用哪个。
按会话类型分别设置
json
{
"session": {
"resetByType": {
"thread": { "mode": "daily", "atHour": 4 },
"direct": { "mode": "idle", "idleMinutes": 240 },
"group": { "mode": "idle", "idleMinutes": 120 }
}
}
}按频道覆盖
json
{
"session": {
"resetByChannel": {
"discord": { "mode": "idle", "idleMinutes": 10080 }
}
}
}手动重置
在聊天中发送:
/new或/reset:开始新会话/new claude-sonnet-4-5:切换模型并开始新会话/compact:手动压缩旧上下文
会话 Key 格式
| 场景 | Key 格式 |
|---|---|
| DM(main 模式) | agent:<agentId>:main |
| DM(per-peer) | agent:<agentId>:dm:<peerId> |
| 群组聊天 | agent:<agentId>:<channel>:group:<id> |
| Telegram Topic | agent:<agentId>:telegram:group:<id>:topic:<threadId> |
| Cron 任务 | cron:<jobId> |
| Webhook | hook:<uuid> |
磁盘清理(Session Maintenance)
长时间运行后,会话文件会积累占用磁盘。默认行为(mode: warn)只报告不清理。
推荐生产配置
json
{
"session": {
"maintenance": {
"mode": "enforce",
"pruneAfter": "45d",
"maxEntries": 800,
"rotateBytes": "20mb",
"resetArchiveRetention": "14d"
}
}
}硬盘容量上限
json
{
"session": {
"maintenance": {
"mode": "enforce",
"maxDiskBytes": "1gb",
"highWaterBytes": "800mb"
}
}
}手动触发清理
bash
openclaw sessions cleanup --dry-run # 预览,不实际删除
openclaw sessions cleanup --enforce # 立即执行查看会话状态
bash
openclaw status # Gateway 状态 + 最近会话
openclaw sessions --json # 所有会话详情
openclaw sessions --active 60 # 过去 60 分钟活跃会话在聊天中发送:
/status:查看上下文使用量、模型信息/context list:查看系统提示内容/stop:中止当前运行的任务
发送策略(Send Policy)
阻止特定类型会话发送消息:
json
{
"session": {
"sendPolicy": {
"rules": [
{ "action": "deny", "match": { "channel": "discord", "chatType": "group" } },
{ "action": "deny", "match": { "keyPrefix": "cron:" } }
],
"default": "allow"
}
}
}运行时覆盖(聊天中发送):/send on / /send off
原文:Session Management - OpenClaw | 来源:OpenClaw 官方文档