让 AI Agent 拥有"记忆":OpenClaw Memory 完全指南

0 / 8

开发 AI Agent 的时候,你有没有遇到过这样的问题:

对话进行到第10轮,Agent 突然忘了你在第3轮说过的关键信息;明明昨天跟它讨论过一个方案,今天它却像第一次听说;用户反复问同样的问题,每次都要重新解释一遍...

这不是 AI 的问题,而是缺少一个关键能力:记忆

今天我们来聊聊 OpenClaw 的 Memory 系统,看看它是如何让 AI Agent 拥有类似人类的记忆能力的。


为什么 AI Agent 需要记忆?

先说个场景。

假设你在开发一个客服 Agent,用户第一次问:"我的订单什么时候到?"你的 Agent 查询后回答了。过了5分钟,用户又问:"那个快递现在在哪儿?"

如果没有记忆,Agent 会懵:什么快递?哪个订单?

但如果有记忆,Agent 会知道:"哦,你说的是刚才那个订单号为 XXX 的快递,现在在配送中心。"

这就是记忆的价值 —— 让对话有连贯性,让服务更智能


OpenClaw Memory:三种记忆类型

OpenClaw 参考了人类的记忆机制,设计了三种记忆类型:

1. 短期记忆(Short-term Memory)

作用:存储当前对话的上下文

就像你刚才说的话,还在大脑里回荡。短期记忆保存的是最近几轮对话的内容,让 Agent 能理解对话的连贯性。

memory:
  short_term:
    enabled: true
    window_size: 10  # 保留最近10轮对话

特点

  • 容量有限(通常 5-20 轮对话)
  • 自动管理,超出窗口会丢弃
  • 响应速度快

适用场景

  • 日常对话
  • 客服问答
  • 需要快速响应的场景

2. 长期记忆(Long-term Memory)

作用:存储重要的、需要长期保留的信息

就像你记住的生日、电话号码。长期记忆保存那些跨会话都需要的信息,比如用户偏好、历史订单、关键事实等。

memory:
  long_term:
    enabled: true
    provider: "chromadb"  # 向量数据库
    collection: "user_preferences"

特点

  • 容量大,持久化存储
  • 支持语义检索
  • 跨会话可用

适用场景

  • 用户画像
  • 知识库
  • 个性化推荐
  • 需要记住长期信息的任务

3. 工作记忆(Working Memory)

作用:存储当前任务的临时数据

就像你在做数学题时,脑子里暂存的中间结果。工作记忆保存的是执行任务过程中的临时状态。

memory:
  working:
    enabled: true
    max_items: 50

特点

  • 任务范围内有效
  • 结构化存储
  • 任务结束后清空

适用场景

  • 多步骤任务
  • 需要暂存中间结果
  • 复杂流程编排

实战:如何配置和使用?

场景1:智能客服 Agent

用户会话通常持续几分钟,需要记住对话内容和用户信息。

配置思路

  • 短期记忆:保存当前对话
  • 长期记忆:保存用户信息和历史记录
  • 工作记忆:处理查询时的临时数据
agent:
  name: "customer_service_agent"
  
memory:
  short_term:
    enabled: true
    window_size: 15  # 保留15轮对话
    
  long_term:
    enabled: true
    provider: "chromadb"
    collection: "customer_data"
    embedding_model: "text-embedding-3-small"
    
  working:
    enabled: true
    max_items: 30

使用示例

from openclaw import Agent

agent = Agent.from_config("customer_service.yaml")

# 用户第一次咨询
response = agent.run("我的订单什么时候到?")
# Agent 会将订单号存入长期记忆

# 5分钟后,用户再次咨询
response = agent.run("那个快递现在到哪了?")
# Agent 从长期记忆中找到订单号,继续追踪

场景2:内容创作 Agent

需要记住用户的写作风格、偏好主题、历史创作。

配置思路

  • 短期记忆:当前创作会话
  • 长期记忆:用户风格、历史作品
  • 工作记忆:当前文章的大纲、素材
agent:
  name: "content_creator_agent"
  
memory:
  short_term:
    enabled: true
    window_size: 20
    
  long_term:
    enabled: true
    provider: "chromadb"
    collection: "user_writing_style"
    
  working:
    enabled: true
    max_items: 100  # 创作需要更大的工作空间

场景3:数据分析 Agent

需要在多步骤分析中保持中间结果。

配置重点:工作记忆的高效使用

agent:
  name: "data_analyst_agent"
  
memory:
  short_term:
    enabled: true
    window_size: 10
    
  long_term:
    enabled: true
    provider: "chromadb"
    collection: "analysis_history"
    
  working:
    enabled: true
    max_items: 200
    persistence: true  # 分析结果需要持久化

三种记忆的协同工作

这三种记忆不是孤立的,它们会协同工作:

用户输入 
短期记忆(理解当前对话)
长期记忆(提取相关历史信息)
工作记忆(暂存处理过程)
生成回复

举个例子

用户:"帮我分析一下这个月的销售数据"

  1. 短期记忆:记住用户在问销售数据
  2. 长期记忆:检索出用户上个月也分析过,以及关注的指标
  3. 工作记忆:暂存数据查询结果、计算的中间值
  4. 生成分析报告

性能优化:让记忆更高效

1. 短期记忆窗口大小

不是越大越好。太大会增加 token 消耗,太小会丢失上下文。

建议

  • 简单对话:5-10轮
  • 复杂任务:15-20轮
  • 长期会话:考虑用长期记忆

2. 长期记忆检索策略

长期记忆越多,检索越慢。需要优化检索策略:

long_term:
  search:
    top_k: 5  # 只检索最相关的5条
    threshold: 0.7  # 相似度阈值
    rerank: true  # 使用重排序提高准确性

3. 工作记忆清理

工作记忆会随着任务进行而膨胀。需要定期清理:

# 任务完成后清理工作记忆
agent.memory.working.clear()

# 或者保留关键信息
agent.memory.working.retain_keys(["final_result", "user_feedback"])

最佳实践:5个建议

1. 合理分配记忆类型

不是所有信息都需要长期记忆。区分什么该记住、什么可以忘记。

  • 短期:对话内容、临时查询
  • 长期:用户偏好、知识库、历史记录
  • 工作:任务中间结果、临时状态

2. 控制长期记忆的增长

长期记忆会不断积累,需要管理:

long_term:
  retention:
    max_age_days: 90  # 90天后自动清理
    max_items: 10000  # 最多保存1万条

3. 使用结构化存储

不要把所有信息都丢给长期记忆。结构化存储更高效:

# 不推荐
agent.memory.long_term.add("用户叫张三,喜欢红色,上次买了一个杯子")

# 推荐
agent.memory.long_term.add({
    "type": "user_profile",
    "name": "张三",
    "preferences": {"color": "红色"},
    "purchase_history": [{"item": "杯子", "date": "2024-01-15"}]
})

4. 监控记忆使用情况

定期检查记忆的使用效率:

# 获取记忆统计信息
stats = agent.memory.get_stats()
print(f"短期记忆:{stats.short_term.size} 条")
print(f"长期记忆:{stats.long_term.size} 条")
print(f"工作记忆:{stats.working.size} 条")

5. 测试记忆的准确性

记忆不是越多越好,关键是准确性:

# 测试长期记忆检索
query = "用户上次买了什么?"
results = agent.memory.long_term.search(query, top_k=3)

# 验证检索结果是否相关
for result in results:
    print(f"相似度:{result.score}")
    print(f"内容:{result.content}")

常见问题

Q:三种记忆都要开启吗?

不一定。根据场景选择:

  • 简单对话:只开启短期记忆
  • 个性化服务:开启短期+长期
  • 复杂任务:三种都开启

Q:长期记忆用什么数据库?

OpenClaw 支持多种向量数据库:

  • ChromaDB:轻量级,适合开发和小规模应用
  • Pinecone:云服务,适合生产环境
  • Qdrant:开源,性能好

Q:记忆会影响响应速度吗?

会有一定影响:

  • 短期记忆:影响很小
  • 长期记忆:检索需要时间,但通常在100ms内
  • 工作记忆:几乎不影响

Q:如何处理记忆冲突?

如果新旧信息冲突,有几个策略:

  • 时间优先:保留最新的
  • 来源优先:保留可信度高的
  • 人工介入:让用户确认

写在最后

记忆系统是 AI Agent 从"对话工具"进化到"智能助手"的关键一步。

OpenClaw 的 Memory 系统,通过短期、长期、工作三种记忆的协同,让 Agent 能够:

  • 理解对话的连贯性
  • 记住用户的个性化信息
  • 处理复杂的多步骤任务

但记住,记忆不是越多越好,关键是记住对的信息

你在开发 AI Agent 的时候,是怎么处理记忆问题的?欢迎在评论区分享你的经验。


参考资料

相关阅读

  • 如何设计一个高效的 AI Agent 架构
  • OpenClaw 工具系统完全指南
  • 向量数据库选型指南
阅读全文