🧠 Agent Memory:智能体记忆

AI不是金鱼,它有记忆——但得你教它怎么用

📅 2026-04-28 🏷️ 核心概念 ⏱️ 阅读约8分钟 🔧 OpenClaw实战

什么是 Agent Memory?

世界上有一种记忆叫Agent Memory,它不像金鱼那样只有7秒,也不像大象那样永生不忘——它介于两者之间,像一个聪明的秘书:记住重要的事,忘掉没用的废话。

想象你雇了个助理,第一天它帮你订了咖啡,第二天你让它再订,它问:还是加奶不加糖吗?这就是短期记忆。一个月后你提起那次咖啡,它说:老板,那是上个月的事了吧?这就是长期记忆。而当你跟它说"把上次那个项目的数据拿来"时,它在脑子里快速翻找——这就是工作记忆。

Agent Memory就是AI助理的记事本:短期记忆记当前对话,长期记住住你的偏好,工作记忆在做任务时临时暂存。

三大记忆类型

⏱️ 短期记忆

当前对话的上下文,会话结束就清空

容量:有限(token限制)

生命周期:单次会话

💾 长期记忆

持久化存储,存到数据库或文件

容量:几乎无限

生命周期:永久保存

🧠 工作记忆

任务执行时的临时状态

容量:中等

生命周期:任务期间

为什么记忆这么重要?

没有记忆的Agent就像金毛猎犬——热情但健忘。你让它分析数据,它分析了;下一句问结果,它说"什么数据?"——这就尴尬了。

记忆让Agent能够:

记住用户偏好 - 你喜欢加奶不加糖,它下次还这样

保持上下文连贯 - 刚说的"那个项目"它知道是哪个

从历史中学习 - 上次踩的坑,下次绕开

执行复杂任务 - 多步骤任务需要记住中间结果

踩坑实录:有次我让Agent分析一周的数据,做到第五天它突然问"你在说哪个项目?"——因为我把随访记忆设成只保留3轮对话。教训:复杂任务要匹配记忆容量

OpenClaw 实战应用

1. 记忆类型配置

# MEMORY.md - OpenClaw 记忆配置文件

# 短期记忆:会话上下文
short_term:
  max_tokens: 4000  # 上下文窗口大小
  decay_rate: 0.1  # 重要度衰减率
  recent_priority: true  # 优先保留最近消息

# 长期记忆:持久化存储
long_term:
  enabled: true
  storage: ./memory/  # 本地存储路径
  embedding_model: text-embedding-3-small
  retrieval: semantic  # 语义检索
  
# 工作记忆:任务执行状态
working_memory:
  max_entries: 100
  auto_cleanup: true  # 任务完成自动清理

2. Scene Blocks 场景记忆

# scene_blocks/项目运营.md

Summary: 项目每日运营记录,包含内容生产、SEO优化、社区互动等核心活动
热度: 156 🔥
更新: 2026-04-28T04:00:00Z

# OpenClaw 会自动加载相关场景
# 当用户问"上周的内容生产情况"时
# 系统会检索 scene_blocks 中的相关记忆

3. 记忆检索调用

// Agent 执行时自动检索相关记忆
const context = await memory.search({
  query: "用户偏好设置",
  type: "long_term",
  limit: 5
});

// 场景记忆自动注入
// OpenClaw 会根据当前对话主题
// 自动加载相关 scene_blocks
OpenClaw的Scene Blocks机制是长期记忆的最佳实践:把项目场景分块存储,每个块有热度指标和摘要,AI需要时按相关性检索——比常见的向量数据库多了"热度"这个时间维度,让重要记忆不沉底。

最佳实践

🎯 记忆分层策略

# 小型任务:只用短期记忆
- 快速问答、简单查询
- 会话结束即清空
- 无需持久化

# 中型任务:短期 + 工作记忆
- 数据分析、报告生成
- 工作记忆暂存中间结果
- 任务完成自动清理

# 大型项目:三层记忆联动
- 长期运营、用户服务
- Scene Blocks 组织场景
- 长期记忆存关键事件

🔧 记忆清理时机

短期记忆:会话超时、用户明确清除

工作记忆:任务完成、出错重试时

长期记忆:定期归档、低热度条目清理

踩坑:有次Scene Blocks文件超过100KB,每次检索都卡顿。解决方案:保持每个场景块精简(Summary控制字数),大场景拆分成多个子场景。

代码示例:自定义记忆管理

# memory_manager.py - 自定义记忆管理器

class CustomMemory:
    def __init__(self):
        self.short_term = []  # 会话上下文
        self.long_term = {}   # 持久化存储
        self.working = {}     # 任务状态
    
    def add_short_term(self, message):
        """添加短期记忆,超出限制自动裁剪"""
        self.short_term.append(message)
        if len(self.short_term) > self.max_context:
            self.short_term = self.short_term[-self.max_context:]
    
    def save_long_term(self, key, value, importance=1.0):
        """保存长期记忆,带重要度评分"""
        self.long_term[key] = {
            'value': value,
            'importance': importance,
            'timestamp': time.now()
        }
    
    def retrieve(self, query, top_k=5):
        """按重要度和时间检索记忆"""
        return sorted(
            self.long_term.items(),
            key=lambda x: x['importance'] * time_decay(x['timestamp']),
            reverse=True
        )[:top_k]

相关链接