AI Agent 记忆系统设计:从短期缓存到长期记忆的完整实现指南

技术深度:⭐⭐⭐⭐ | 适用场景:AI Agent 开发、上下文管理、RAG 系统


🧠 为什么 AI Agent 需要记忆系统?

想象一下,如果你每次和人对话都会忘记之前说过的所有话——那会是怎样的体验?

没有记忆的 AI Agent 面临的困境:

用户:我叫吴永杰,在北京工作
Agent:好的,很高兴认识你!

[5 分钟后]

用户:我之前说过我在哪里工作吗?
Agent:抱歉,我没有相关信息... ❌

有记忆的 AI Agent:

用户:我叫吴永杰,在北京工作
Agent:好的,已记住!吴永杰你好,北京是个很棒的城市!

[5 分钟后]

用户:我之前说过我在哪里工作吗?
Agent:当然!你说过在北京工作 ✅

记忆系统的核心价值:

  • 📌 连续性:跨会话保持上下文连贯
  • 🎯 个性化:记住用户偏好和历史交互
  • 🔍 知识复用:避免重复询问相同信息
  • 📈 学习能力:从历史交互中积累经验和模式

🏗️ 记忆系统架构设计

三层记忆模型

参考人类认知科学,AI Agent 的记忆系统可分为三层:

┌─────────────────────────────────────────────────────────┐
│                    感官记忆 (Sensory)                    │
│              瞬时缓存,保留原始输入 (秒级)                │
│         当前对话窗口、未处理的原始消息流                   │
└─────────────────────────────────────────────────────────┘
                          ↓ 过滤/注意机制
┌─────────────────────────────────────────────────────────┐
│                   工作记忆 (Working)                     │
│           短期存储,主动处理信息 (分钟~小时级)             │
│     当前会话上下文、短期任务状态、临时变量                 │
└─────────────────────────────────────────────────────────┘
                          ↓ 编码/巩固
┌─────────────────────────────────────────────────────────┐
│                   长期记忆 (Long-term)                   │
│          持久化存储,按需检索 (天~年~永久)                │
│    用户画像、历史对话、知识库、技能记忆、经验教训          │
└─────────────────────────────────────────────────────────┘

各层职责详解

1️⃣ 感官记忆层

特点:

  • ⏱️ 保留时间:秒级 ~ 分钟级
  • 📦 容量:受限于模型上下文窗口
  • 🔄 更新策略:FIFO(先进先出)或滑动窗口

实现方式:

class SensoryMemory:
    def __init__(self, max_tokens=128000):
        self.buffer = []
        self.max_tokens = max_tokens
        self.current_tokens = 0
    
    def add(self, message):
        tokens = count_tokens(message)
        while self.current_tokens + tokens > self.max_tokens:
            oldest = self.buffer.pop(0)
            self.current_tokens -= count_tokens(oldest)
        self.buffer.append(message)
        self.current_tokens += tokens

适用场景:

  • 当前对话的完整历史记录
  • 多轮对话中的指代消解
  • 临时任务状态的跟踪
2️⃣ 工作记忆层

特点:

  • ⏱️ 保留时间:会话期间 ~ 数小时
  • 📦 容量:精选的关键信息
  • 🔄 更新策略:重要性评分 + 注意力机制

实现方式:

class WorkingMemory:
    def __init__(self):
        self.items = []
        self.attention_weights = {}
    
    def add(self, item, importance=0.5):
        self.items.append({
            'content': item,
            'importance': importance,
            'timestamp': time.time(),
            'access_count': 0
        })
    
    def get_relevant(self, query, top_k=5):
        # 基于相关性 + 重要性 + 最近访问 综合评分
        scored = []
        for item in self.items:
            score = (
                0.4 * self._relevance_score(query, item['content']) +
                0.3 * item['importance'] +
                0.2 * self._recency_score(item['timestamp']) +
                0.1 * item['access_count']
            )
            scored.append((score, item))
        return sorted(scored, reverse=True)[:top_k]

适用场景:

  • 当前任务的关键参数
  • 用户明确强调的信息
  • 高频访问的上下文片段
3️⃣ 长期记忆层

特点:

  • ⏱️ 保留时间:永久(除非主动删除)
  • 📦 容量:理论上无限(外部存储)
  • 🔄 更新策略:语义索引 + 向量检索

实现方式:

class LongTermMemory:
    def __init__(self, vector_store):
        self.vector_store = vector_store
        self.metadata_db = sqlite3.connect('memory.db')
    
    def store(self, content, metadata):
        # 生成向量嵌入
        embedding = embed(content)
        # 存储到向量数据库
        self.vector_store.add(embedding, content, metadata)
        # 存储元数据
        self.metadata_db.execute(
            "INSERT INTO memories (content, metadata, created_at) VALUES (?, ?, ?)",
            (content, json.dumps(metadata), time.time())
        )
    
    def retrieve(self, query, top_k=10):
        query_embedding = embed(query)
        results = self.vector_store.search(query_embedding, top_k)
        return self._rerank(results, query)

适用场景:

  • 用户画像和偏好
  • 历史对话摘要
  • 领域知识库
  • 技能和使用经验

🔧 实战:基于 OpenClaw 的记忆系统实现

OpenClaw 的记忆架构

OpenClaw 采用了简洁而有效的双层记忆设计:

┌─────────────────────────────────────────────────────────┐
│                    会话记忆 (Session)                    │
│     memory/YYYY-MM-DD.md — 每日原始对话日志              │
│     自动创建,记录当天所有交互                           │
└─────────────────────────────────────────────────────────┘
                          ↓ 定期整理
┌─────────────────────────────────────────────────────────┐
│                    长期记忆 (MEMORY.md)                  │
│     MEMORY.md —  curated 长期记忆                       │
│     人工/自动整理,保存重要决策、上下文、用户偏好         │
└─────────────────────────────────────────────────────────┘

记忆文件结构

每日记忆文件 (memory/YYYY-MM-DD.md):

# 2026-03-20

## 对话记录

### 10:53 - 用户询问定时任务
用户询问今天 10 点的定时任务为何没有执行。
检查发现 cron 任务配置正常,但 lastRun 时间异常。

### 10:56 - 手动触发测试
用户要求手动执行定时任务进行测试。
开始生成博客文章并准备发布到 CSDN。

## 待办事项
- [ ] 修复 cron 调度器时间问题
- [ ] 检查 Gateway 日志

长期记忆文件 (MEMORY.md):

# 长期记忆

## 用户信息
- **姓名**:吴永杰
- **位置**:北京
- **技术兴趣**:AI Agent, 自动化,博客写作

## 项目上下文
- **博客自动化**:使用 csdn-publisher 技能自动发布 GitHub Trending 博客
- **定时任务**:每日 10:00 执行博客生成和发布

## 重要决策
- 选择 CSDN 作为主要博客发布平台
- 使用 Chrome 调试模式进行自动化发布
- 博客主题优先选择 GitHub Trending 热门项目

## 技能配置
- csdn-publisher 位于 `skills/csdn-publisher/`
- Chrome 调试端口:9222
- 配置文件:`C:\blog-auto-publishing-tools\config\`

记忆检索流程

用户提问
    ↓
[1] 检查工作记忆(当前会话上下文)
    ↓ 未找到
[2] 搜索今日记忆文件 (memory/YYYY-MM-DD.md)
    ↓ 未找到
[3] 搜索长期记忆 (MEMORY.md)
    ↓
[4] 综合检索结果,生成回答

检索代码示例:

def retrieve_memory(query, session_key):
    results = []
    
    # 1. 当前会话历史
    session_history = get_session_history(session_key)
    results.extend(search_in_context(session_history, query))
    
    # 2. 今日记忆
    today = datetime.now().strftime('%Y-%m-%d')
    today_memory = read_file(f'memory/{today}.md')
    results.extend(search_in_text(today_memory, query))
    
    # 3. 长期记忆
    long_term = read_file('MEMORY.md')
    results.extend(search_in_text(long_term, query))
    
    # 4. 排序和去重
    return deduplicate_and_rank(results, query)

🚀 高级记忆技术

1. 向量检索 + RAG

使用向量数据库实现语义级记忆检索:

from chromadb import Client

class VectorMemory:
    def __init__(self):
        self.client = Client()
        self.collection = self.client.get_or_create_collection('agent_memory')
    
    def store(self, text, metadata):
        self.collection.add(
            documents=[text],
            metadatas=[metadata],
            ids=[generate_id()]
        )
    
    def query(self, question, n_results=5):
        results = self.collection.query(
            query_texts=[question],
            n_results=n_results
        )
        return results['documents'][0]

优势:

  • 🎯 语义匹配,不依赖关键字
  • 📊 可处理模糊查询
  • 🔗 支持跨文档关联

2. 记忆压缩与摘要

将长对话压缩为简洁摘要,节省存储空间:

def compress_memory(conversation):
    prompt = f"""
    将以下对话压缩为简洁的记忆条目:
    
    {conversation}
    
    要求:
    1. 提取关键事实(人名、地点、决定)
    2. 记录用户偏好
    3. 标记待办事项
    4. 控制在 200 字以内
    """
    return llm.generate(prompt)

压缩示例:

原始对话:(5000 tokens)
用户:我想创建一个博客自动化系统...
[多轮详细讨论]

压缩后:(150 tokens)
- 用户想要博客自动化发布到 CSDN
- 偏好 GitHub Trending 作为内容来源
- 已配置 csdn-publisher 技能
- 定时任务:每日 10:00

3. 记忆衰减与遗忘

模拟人类遗忘机制,自动清理低价值记忆:

class DecayingMemory:
    def __init__(self, decay_rate=0.99):
        self.decay_rate = decay_rate
    
    def update_strengths(self):
        for memory in self.memories:
            # 随时间衰减
            memory.strength *= self.decay_rate
            # 被访问则增强
            if memory.accessed_today:
                memory.strength *= 1.1
            # 低于阈值则删除
            if memory.strength < 0.1:
                self.forget(memory)

⚠️ 记忆系统设计陷阱

陷阱 1:记忆污染

问题: 错误信息或过时信息被存入长期记忆

解决方案:

  • ✅ 记忆来源标注(来源可信度评分)
  • ✅ 时间戳和版本管理
  • ✅ 定期审查和清理机制

陷阱 2:检索效率低下

问题: 记忆库过大导致检索缓慢

解决方案:

  • ✅ 分层检索(先工作记忆,后长期记忆)
  • ✅ 向量索引 + 关键字混合检索
  • ✅ 记忆分类和分区存储

陷阱 3:隐私泄露

问题: 敏感信息被不当存储或检索

解决方案:

  • ✅ 敏感信息标记和加密存储
  • ✅ 基于上下文的访问控制
  • ✅ 用户可删除特定记忆

陷阱 4:记忆冲突

问题: 新旧信息矛盾时如何处理

解决方案:

  • ✅ 时间戳优先(最新信息优先)
  • ✅ 置信度评分
  • ✅ 冲突检测和用户确认

📊 记忆系统评估指标

指标 说明 目标值
检索准确率 检索到的记忆与查询的相关性 >90%
检索延迟 从查询到返回结果的时间 <500ms
记忆覆盖率 关键信息被成功存储的比例 >95%
记忆新鲜度 过时记忆被及时更新的比例 >80%
用户满意度 用户对记忆准确性的主观评价 >4/5

🎯 总结

构建一个优秀的 AI Agent 记忆系统需要考虑:

  1. 分层设计:感官记忆 → 工作记忆 → 长期记忆
  2. 检索策略:关键字 + 向量 + 注意力机制
  3. 存储优化:压缩、摘要、衰减
  4. 质量控制:去污、去重、冲突解决
  5. 隐私保护:加密、访问控制、可删除

记住: 记忆系统的目标不是存储一切,而是存储正确的东西,并在正确的时机检索出来。


参考资源:

  • OpenClaw 记忆系统文档:https://docs.openclaw.ai
  • ChromaDB 向量数据库:https://docs.trychroma.com
  • RAG 最佳实践:https://arxiv.org/abs/2005.11401

作者:madprinter | 2026-03-20

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐