在构建智能 AI 助手时,记忆机制是决定智能体"智能程度"的关键因素。OpenClaw 作为强大的 AI 代理框架,提供了多种记忆方案供开发者选择。本文将详细介绍四种主流的记忆方案,并提供具体的部署步骤。
问题背景:为什么需要记忆方案?
OpenClaw 智能体每次会话都需读取庞大上下文文件,导致以下问题:
- Token 消耗过快:每次对话都要重新加载所有上下文,API 成本急剧上升
- 智能体混乱:过多的上下文信息可能导致智能体注意力分散,影响响应质量
- 效率低下:无法快速检索关键信息,响应速度变慢
⚠️ 注意:默认内存机制虽然简单,但长期使用会导致成本失控和性能下降。建议根据项目需求选择合适的持久记忆方案。
方案一:结构化记忆文件夹(简单透明)
这是最简单、最透明的记忆方案,适合初学者和小型项目。
核心思路
在项目目录中创建多个 Markdown 文件,分别存储不同类型的记忆信息:
goals.md- 项目目标和任务清单decisions.md- 重要决策和原因记录coding_style.md- 编码风格和偏好设置memory/YYYY-MM-DD.md- 每日会话日志
部署步骤
- 创建记忆文件夹结构
mkdir -p memory touch goals.md decisions.md coding_style.md MEMORY.md
- 初始化记忆文件
# goals.md # 项目目标 - 构建智能科研助手 - 支持文献搜索和整理 - 自动生成研究报告 # decisions.md # 重要决策 - 2026-03-05: 选择结构化记忆方案 - 原因:简单透明,无需额外 API # coding_style.md # 编码偏好 - 语言:中文 - 代码注释:详细 - 文件命名:snake_case
- 配置系统提示
在 OpenClaw 配置中添加提示词,让智能体在会话结束时自动更新记忆文件:
每次会话结束时,请检查是否需要更新以下文件: - goals.md:如果有新的目标或任务完成 - decisions.md:如果做出了重要决策 - memory/YYYY-MM-DD.md:记录本次会话的关键内容 - 定期整理
每隔一段时间(如每周),将 daily memory 文件中的重要信息整理到 MEMORY.md 中,形成 curated long-term memory。
✅ 优点:无需额外 API,兼容所有模型,完全透明可控,适合初学者。
❌ 缺点:需要手动管理,无法进行语义检索。
❌ 缺点:需要手动管理,无法进行语义检索。
方案二:内置记忆搜索(Memory Search)
OpenClaw 支持通过嵌入(Embedding)技术实现自然语言记忆检索。
核心思路
将记忆内容转换为向量存储,通过语义相似度进行检索,而非简单的关键词匹配。
部署步骤
- 选择嵌入 API 提供商
- OpenAI Embeddings API
- Google Gemini Embeddings
- Voyage AI Embeddings
- 获取 API 密钥
# OpenAI export OPENAI_API_KEY="sk-..." # Google Gemini export GEMINI_API_KEY="..." # Voyage AI export VOYAGE_API_KEY="..."
- 配置 OpenClaw
在 OpenClaw 配置文件中添加嵌入服务配置:
# config.json 或环境变量 { "embeddings": { "provider": "openai", // 或 "gemini", "voyage" "apiKey": "${OPENAI_API_KEY}", "model": "text-embedding-3-small" } } - 启用记忆搜索功能
在会话中,智能体可以自动将重要信息存入记忆库,并在需要时检索:
# 示例:检索相关记忆 /remember search "上次提到的项目目标是什么?" - 测试验证
# 存入记忆 /remember save "用户偏好使用中文进行代码注释" # 检索记忆 /remember search "代码注释风格"
⚠️ 常见问题:Anthropic 用户常因未配置对应的嵌入 API 密钥导致功能失效。记忆搜索功能默认关闭,必须显式配置才能启用。
✅ 优点:支持自然语言检索,成本低,检索准确。
❌ 缺点:依赖特定 API,需要额外配置。
❌ 缺点:依赖特定 API,需要额外配置。
方案三:Mem0 插件(自动化长期记忆)
Mem0 是第三方记忆管理插件,提供"一劳永逸"的自动化记忆解决方案。
核心思路
Mem0 自动监控对话,提取关键信息并以向量形式存储,支持语义检索,无需手动管理。
部署步骤
- 安装 Mem0 插件
npm install mem0-ai # 或 pip install mem0
- 获取 Mem0 API 密钥
访问 mem0.ai 注册账号并获取 API 密钥:
export MEM0_API_KEY="m0_..." - 配置 OpenClaw 集成
# 在 OpenClaw 配置中添加 { "plugins": { "mem0": { "enabled": true, "apiKey": "${MEM0_API_KEY}", "autoSave": true, "autoRetrieve": true } } }
- 设置记忆提取规则
配置哪些类型的信息应该自动保存:
# mem0_config.yaml extraction_rules: - type: "user_preference" keywords: ["喜欢", "偏好", "习惯", "常用"] - type: "project_info" keywords: ["项目", "目标", "任务", "截止日期"] - type: "technical_detail" keywords: ["API", "配置", "密钥", "端点"] - 测试自动记忆功能
# 对话示例 用户:我更喜欢用 Python 写脚本 AI:[自动保存] 用户偏好:Python 脚本 用户:上次说的那个项目叫什么? AI:[自动检索] 您提到的是"智能科研助手"项目
⚠️ 安全提醒:Mem0 涉及数据外传风险,敏感信息(如 API 密钥、个人隐私)不应自动存储到第三方服务。
✅ 优点:完全自动化,无需手动管理,智能提取关键信息。
❌ 缺点:数据外传风险,依赖第三方服务。
❌ 缺点:数据外传风险,依赖第三方服务。
方案四:SQLite 数据库存储(处理结构化数据)
OpenClaw 原生支持读写 SQLite 数据库,适合存储高密度结构化数据。
核心思路
使用 SQLite 数据库存储需要精确查询的结构化数据,如 API 端点、客户记录、配置参数等。
部署步骤
- 创建 SQLite 数据库
# 创建数据库文件 sqlite3 memory.db # 创建记忆表 CREATE TABLE memories ( id INTEGER PRIMARY KEY AUTOINCREMENT, category TEXT NOT NULL, key TEXT NOT NULL, value TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_category ON memories(category); CREATE INDEX idx_key ON memories(key);
- 编写数据库操作脚本
# memory_db.py import sqlite3 from datetime import datetime class MemoryDB: def __init__(self, db_path='memory.db'): self.conn = sqlite3.connect(db_path) self.cursor = self.conn.cursor() def save(self, category, key, value): self.cursor.execute(''' INSERT OR REPLACE INTO memories (category, key, value, updated_at) VALUES (?, ?, ?, ?) ''', (category, key, value, datetime.now())) self.conn.commit() def get(self, category, key): self.cursor.execute(''' SELECT value FROM memories WHERE category = ? AND key = ? ''', (category, key)) result = self.cursor.fetchone() return result[0] if result else None def query(self, sql): self.cursor.execute(sql) return self.cursor.fetchall()
- 集成到 OpenClaw
# 在 OpenClaw 工具配置中添加 { "tools": { "memory_db": { "enabled": true, "db_path": "./memory.db", "operations": ["save", "get", "query", "delete"] } } }
- 使用示例
# 保存 API 配置 /memory save category="api_config" key="openai_endpoint" value="https://api.openai.com/v1" # 查询配置 /memory get category="api_config" key="openai_endpoint" # SQL 查询 /memory query "SELECT * FROM memories WHERE category='api_config'"
- 版本控制
# 将数据库文件纳入版本控制 git add memory.db # 或导出为 SQL 文件进行版本控制 sqlite3 memory.db .dump > memory_schema.sql
✅ 优点:无需插件,便携且可版本控制,支持精确 SQL 查询,适合结构化数据。
❌ 缺点:不支持语义检索,需要编写 SQL 查询。
❌ 缺点:不支持语义检索,需要编写 SQL 查询。
组合使用建议
单一方案往往有局限性,建议结合多种方法形成完整的记忆架构:
推荐的组合方案
| 记忆类型 | 推荐方案 | 存储内容 |
|---|---|---|
| 短期记忆 | 结构化文件夹 | 项目目标、当前任务、会话日志 |
| 中期记忆 | Mem0 插件 | 对话中的关键信息、用户偏好 |
| 长期记忆 | MEMORY.md | curated 重要事件、决策、经验 |
| 结构化数据 | SQLite 数据库 | API 配置、客户记录、参数设置 |
架构示意图
┌─────────────────────────────────────────────────┐
│ OpenClaw 智能体"大脑" │
├─────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ 结构化文件夹 │ │ Mem0 插件 │ │ SQLite │ │
│ │ (短期记忆) │ │ (中期记忆) │ │ (数据) │ │
│ └──────┬──────┘ └──────┬──────┘ └────┬────┘ │
│ │ │ │ │
│ └────────────────┼───────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ MEMORY.md │ │
│ │ (长期记忆) │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────┘
关键提醒
- 记忆搜索功能默认关闭:必须配置嵌入 API 才能启用,Anthropic 用户需特别注意
- SQLite 方案无需插件:OpenClaw 原生支持,便携且可版本控制
- 根据数据类型选择方案:
- 非结构化文本 → 结构化文件夹 / Mem0
- 需要语义检索 → 记忆搜索 / Mem0
- 结构化数据 → SQLite
- 避免单一方案局限:组合使用可以发挥各方案的优势
- 定期整理记忆:将短期记忆中的重要信息整理到长期记忆中
💡 最佳实践:从小型项目开始,先用结构化文件夹方案熟悉记忆管理,然后根据需求逐步引入其他方案。不要一开始就追求复杂的架构。
← 返回博客首页
← 返回首页