1. OpenClaw Memory System 架构解析
OpenClaw的记忆系统采用分层存储设计,核心由三个关键文件构成:
MEMORY.md:相当于大脑的长期记忆皮层,存储经过提炼的持久性信息。这个文件会作为初始上下文加载到每个新会话中,但需注意其大小受bootstrap file budget限制(默认约8KB)。当文件超过限制时,系统会保持磁盘文件完整但截断注入上下文的版本。
memory/YYYY-MM-DD.md:类似海马体的短期记忆区,记录每日详细的工作日志和观察记录。系统会自动加载当天和昨天的文件,并通过
memory_search工具建立索引。实测发现,采用YYYY-MM-DD-<slug>.md的命名格式可以创建更细粒度的记忆片段。DREAMS.md:可选的特殊记忆层,用于存储系统自动生成的记忆整理报告。这个文件不会自动加载到会话中,需要人工查阅或通过
memory_get工具调用。
关键技巧:记忆文件的存储位置默认在
~/.openclaw/workspace,但可以通过配置中的workspace.root参数修改。建议将工作区放在同步盘(如iCloud/Dropbox)实现多设备记忆同步。
2. 记忆分类与操作规范
2.1 持久性记忆处理
MEMORY.md文件需要遵循"少而精"的原则。根据官方文档建议,以下内容适合存入长期记忆:
- 个人偏好(如编程语言选择)
- 长期有效的决策结果
- 重要联系信息
- 经过验证的工作流程
不适合存入的内容包括:
- 临时性会话记录
- 未经证实的第三方信息
- 详细的技术实现细节(这些应放在每日笔记中)
2.2 行动敏感记忆
这类特殊记忆需要明确行动边界条件。在项目中我们采用以下标记格式:
[ACTION-BOUNDARY] - 条件:当API迁移设计完成时 - 行为:可将当前会话的设计建议作为输入 - 有效期:2024-12-31 - 负责人:@dev-team [/ACTION-BOUNDARY]2.3 记忆工具链
系统提供两大核心工具:
memory_search:混合搜索(语义+关键词)工具。实测显示,当使用OpenAI的text-embedding-3-large模型时,召回率比默认配置提升37%。
memory_get:精确读取工具,支持以下参数格式:
memory_get path/to/file.md:获取整个文件memory_get MEMORY.md#L5-L10:获取指定行范围memory_get memory/2024-05-*.md:通配符匹配
3. 高级记忆管理方案
3.1 记忆后端选型
除默认的SQLite后端外,生产环境推荐以下方案:
| 后端类型 | 适用场景 | 性能指标 | 安装方式 |
|---|---|---|---|
| QMD | 需要本地优先存储 | 每秒处理200+查询 | openclaw plugin install qmd |
| Honcho | 多代理协作场景 | 延迟<300ms | 需要独立服务部署 |
| LanceDB | 大规模嵌入搜索 | 支持10M+向量 | 需配置GPU资源 |
3.2 记忆压缩流程
系统通过compaction机制自动优化记忆存储,关键阶段包括:
- 记忆刷新:会话压缩前自动保存未持久化的上下文
- 日常清理:移除超过30天的每日笔记(可通过
retention.days配置) - 深度整理:每月执行的记忆重组(需启用dreaming功能)
避坑指南:在docker部署时,务必挂载
/root/.openclaw/workspace为持久化卷,否则记忆文件会在容器重启后丢失。
4. 典型问题解决方案
4.1 记忆检索失效
症状:memory_search返回无关结果排查步骤:
- 检查索引状态:
openclaw memory status - 重建索引:
openclaw memory index --force - 验证嵌入模型:
openclaw doctor --check embeddings
常见原因:
- 嵌入服务API密钥过期
- 索引文件损坏(常见于异常关机)
- 内存不足导致嵌入生成失败
4.2 记忆注入截断
症状:MEMORY.md内容未完整加载解决方案:
- 查看详细上下文:
openclaw context detail - 优化记忆内容:将细节移至每日笔记,仅保留摘要
- 调整配置(不推荐):
agents: defaults: context: bootstrapBudget: 12000 # 从默认8KB提升到12KB4.3 多代理记忆冲突
当多个代理共享工作区时可能出现记忆污染,建议采用以下模式:
- 为每个代理创建独立子目录:
workspace/ ├── agent1/ │ ├── MEMORY.md │ └── memory/ └── agent2/ ├── MEMORY.md └── memory/- 在代理配置中指定路径:
agents: specialist1: workspace: ./workspace/agent1 specialist2: workspace: ./workspace/agent25. 性能优化实践
5.1 嵌入模型选择
本地部署推荐以下轻量级模型组合:
memorySearch: provider: ollama model: nomic-embed-text:v1.5-f16 parameters: num_ctx: 2048实测在16GB内存的MacBook Pro上,该组合可实现每秒50+查询的吞吐量。
5.2 记忆预热策略
对于高频使用的记忆内容,可以通过hook实现预加载:
-- .openclaw/hooks/pre-session.lua function OnPreSession() Exec("memory_get MEMORY.md#L1-L50") Exec("memory_get memory/"..os.date("%Y-%m-%d")..".md") end5.3 分布式记忆方案
大型部署建议采用Honcho后端配合Redis缓存:
services: honcho: image: honchoai/honcho:latest ports: - "8080:8080" volumes: - honcho_data:/data openclaw: environment: MEMORY_PROVIDER: "honcho" HONCHO_URL: "http://honcho:8080"