记忆与上下文

记忆与上下文

OpenClaw 通过其网关控制平面跨会话维护对话上下文。这使得代理能够记住之前的对话,实现自然的上下文交互。

记忆工作原理

OpenClaw 的记忆系统内置于网关架构中:

用户消息  网关  会话管理器  代理(带上下文)
              
        上下文存储
        (对话历史)

网关自动:

  • 跟踪对话会话
  • 维护消息历史
  • 向代理提供上下文
  • 跨重启持久化会话

会话管理

查看活动会话

列出所有活动的对话会话:

openclaw session list

查看会话详情

获取特定会话的详细信息:

openclaw session info <会话ID>

重置会话

开始新对话(清除上下文):

openclaw session reset <会话ID>

或在聊天中使用 /new/reset 命令:

/reset

上下文配置

配置代理维护的上下文量:

{
  "context": {
    "maxMessages": 100,
    "maxTokens": 8000,
    "summarization": true,
    "summaryThreshold": 50
  }
}

配置选项

  • maxMessages: 上下文中保留的最大消息数
  • maxTokens: 上下文窗口中包含的最大令牌数
  • summarization: 启用旧消息的自动摘要
  • summaryThreshold: 在 N 条消息后进行摘要

上下文策略

滑动窗口

仅保留最近的消息:

{
  "context": {
    "strategy": "sliding-window",
    "maxMessages": 20
  }
}

摘要

自动摘要对话的旧部分:

{
  "context": {
    "strategy": "summarization",
    "summarization": true,
    "summaryThreshold": 50,
    "summaryModel": "claude-sonnet-4-6"
  }
}

混合

结合最近的消息和摘要:

{
  "context": {
    "strategy": "hybrid",
    "recentMessages": 20,
    "summarizeOlder": true
  }
}

多会话上下文

OpenClaw 可以为不同的渠道或用户维护单独的上下文:

{
  "sessions": {
    "isolation": "per-channel",
    "persistence": true,
    "ttl": 86400
  }
}

隔离模式

  • per-channel: 每个通信渠道单独的上下文
  • per-user: 每个用户单独的上下文
  • per-conversation: 每个对话线程单独的上下文
  • global: 所有交互共享上下文

持久化记忆

启用持久化

将对话历史存储到磁盘:

{
  "memory": {
    "persistence": {
      "enabled": true,
      "path": "~/.openclaw/sessions",
      "format": "json"
    }
  }
}

备份会话

备份对话历史:

openclaw session backup --output ./backup.json

恢复会话

从备份恢复:

openclaw session restore --input ./backup.json

多代理路由中的上下文

使用多代理路由时,每个代理维护自己的上下文:

{
  "routing": {
    "whatsapp:+1234567890": {
      "agent": "personal",
      "context": {
        "maxMessages": 50
      }
    },
    "slack:#work": {
      "agent": "work",
      "context": {
        "maxMessages": 100,
        "summarization": true
      }
    }
  }
}

记忆命令

在聊天中使用这些命令管理上下文:

  • /status - 查看当前会话状态和上下文大小
  • /new/reset - 清除上下文并重新开始
  • /verbose on - 在响应中显示上下文信息

示例:

/status
当前会话: abc123
上下文中的消息: 45
使用的令牌: 3,200

上下文优化

减少上下文大小

为了更快的响应和更低的成本:

{
  "context": {
    "maxMessages": 20,
    "maxTokens": 4000,
    "compression": true
  }
}

为复杂任务增加上下文

对于需要更多历史的任务:

{
  "context": {
    "maxMessages": 200,
    "maxTokens": 16000,
    "summarization": true
  }
}

隐私与安全

清除敏感数据

从上下文中删除敏感信息:

openclaw session clear <会话ID>

自动过期

自动使旧会话过期:

{
  "sessions": {
    "ttl": 86400,
    "autoCleanup": true,
    "cleanupInterval": 3600
  }
}

加密

加密存储的会话数据:

{
  "memory": {
    "persistence": {
      "enabled": true,
      "encryption": true,
      "encryptionKey": "env:OPENCLAW_ENCRYPTION_KEY"
    }
  }
}

最佳实践

  1. 设置适当的上下文限制:在记忆和性能之间取得平衡
  2. 使用摘要:压缩旧对话以节省令牌
  3. 启用持久化:不要丢失重要的对话
  4. 隔离上下文:使用按渠道或按用户隔离以保护隐私
  5. 定期清理:删除旧会话以节省存储空间
  6. 加密敏感数据:在生产环境中启用加密

故障排除

上下文过大

如果响应缓慢或成本高昂:

{
  "context": {
    "maxMessages": 30,
    "maxTokens": 4000
  }
}

丢失上下文

如果代理不记得之前的消息:

# 检查会话状态
openclaw session info <会话ID>

# 验证持久化已启用
openclaw config get memory.persistence.enabled

内存泄漏

如果内存使用随时间增长:

{
  "sessions": {
    "ttl": 86400,
    "autoCleanup": true,
    "maxSessions": 1000
  }
}

下一步