Agent Memory 智能体记忆系统

发布时间:2026-03-23 | 分类:Agent核心技术

定义

世界上有一种能力叫做Agent Memory,它就像AI的"海马体"——第一次见面时记住你的名字,第二次就再也不叫错...

Agent Memory是智能体存储、检索和管理历史信息的系统机制,让AI Agent能够在多轮对话中保持上下文一致性,记住用户偏好、积累知识、学习经验。

核心原理

1. 记忆类型

类型 存储位置 生命周期 用途
工作记忆 内存/Context 单次对话 当前任务处理
短期记忆 Redis/内存 数小时~数天 会话连续性
长期记忆 数据库/向量库 永久 知识积累
情景记忆 向量数据库 按需检索 相似经验调用

2. 记忆存储架构


┌─────────────────────────────────────────┐
│            Agent Memory                 │
├─────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────────┐  │
│  │ Working Mem │  │  Short-term Mem │  │
│  │  (Context)  │  │    (Redis)      │  │
│  └─────────────┘  └─────────────────┘  │
│  ┌─────────────┐  ┌─────────────────┐  │
│  │  Long-term  │  │  Episodic Mem   │  │
│  │  (Database) │  │ (Vector Store)  │  │
│  └─────────────┘  └─────────────────┘  │
└─────────────────────────────────────────┘
          

3. 记忆检索机制

  • 时间衰减:越近的记忆权重越高
  • 重要性加权:用户强调的内容权重高
  • 向量相似度:语义相似的记忆优先召回
  • 记忆压缩:摘要存储节省空间

OpenClaw实战应用

会话记忆管理

OpenClaw通过上下文管理保持会话连贯性:


# 自动记忆用户偏好
用户: "我喜欢简洁的回答风格"
→ 系统记录: preference.response_style=concise
→ 下次自动使用简洁风格

# 记住已完成的任务
用户: "继续刚才的报告"
→ 检索: 找到上一个会话的上下文
→ 加载: 报告进度和已完成内容
→ 继续: 从中断处开始
          

知识库集成

OpenClaw支持RAG增强记忆:


# 向量检索相似记忆
用户: "之前那个Python爬虫项目"
→ 向量搜索: "Python 爬虫 项目"
→ 召回: 历史对话中的相关上下文
→ 加载: 提供相关背景信息
          

持久化存储


{
  "session": {
    "sessionId": "session_abc123",
    "context": {
      "preferences": {
        "language": "中文",
        "response_style": "专业详细"
      },
      "history": [
        {"role": "user", "content": "帮我写个爬虫"},
        {"role": "assistant", "content": "已完成..."}
      ]
    },
    "long_term_memory": {
      "projects": ["爬虫项目", "数据分析"],
      "topics": ["AI", "Python"]
    }
  }
}
          

代码示例

实现简单记忆系统


class AgentMemory:
    """简单的Agent记忆系统"""
    
    def __init__(self):
        self.short_term = []  # 短期记忆
        self.long_term = {}   # 长期记忆
        
    def add_memory(self, content, memory_type="short"):
        """添加记忆"""
        if memory_type == "short":
            self.short_term.append({
                "content": content,
                "timestamp": time.time()
            })
            # 超过阈值时压缩到长期记忆
            if len(self.short_term) > 100:
                self._compress_to_long_term()
        else:
            self.long_term[str(time.time())] = content
    
    def retrieve(self, query, top_k=5):
        """检索相关记忆"""
        # 向量相似度检索(简化版)
        results = []
        for mem in self.short_term:
            if self._similarity(query, mem["content"]) > 0.7:
                results.append(mem)
        return results[:top_k]
    
    def _compress_to_long_term(self):
        """压缩短期记忆到长期记忆"""
        summary = self._summarize(self.short_term)
        self.long_term[str(time.time())] = summary
        self.short_term = []
          

向量记忆存储


from langchain.memory import VectorStoreRetrieverMemory
from langchain_community.vectorstores import Chroma

# 创建向量记忆存储
vectorstore = Chroma.from_texts(
    memory_texts, 
    embedding=OpenAIEmbeddings()
)

# 创建记忆检索器
retriever = vectorstore.as_retriever(
    search_kwargs={"k": 5}
)

# 创建记忆组件
memory = VectorStoreRetrieverMemory(
    retriever=retriever,
    memory_key="chat_history",
    return_messages=True
)

# 在Agent中使用
agent = ConversationalChatAgent.from_llm_and_tools(
    llm=llm,
    tools=tools,
    memory=memory
)
          

最佳实践

  • ✅ 分层存储:区分短期/长期/情景记忆
  • ✅ 隐私保护:敏感信息加密存储
  • ✅ 记忆压缩:摘要存储减少token消耗
  • ✅ 增量更新:避免重复存储相似内容
  • ❌ 不要存储所有内容:筛选有价值的信息
  • ❌ 避免记忆污染:定期验证记忆准确性

延伸阅读

📖 相关导航

← 返回术语百科 | 首页 | 文章 | 专题