AI Agent 的记忆机制:短期记忆与长期记忆实现
记忆是 AI Agent 从"单次问答工具"进化为"持续学习助手"的关键。本文将系统介绍 Agent 的两种记忆类型及其实现方案。
一、为什么 Agent 需要记忆?
没有记忆的 Agent 就像金鱼——每次对话都是全新的开始。记忆让 Agent 能够:
- 记住用户偏好(如"我喜欢简洁的回答")
- 保持对话上下文(多轮对话不脱节)
- 积累知识经验(从历史交互中学习)
- 识别用户身份(不同用户不同服务)
二、记忆分类:短期 vs 长期
维度 短期记忆 | 长期记忆 ----------------|----------存储内容当前对话上下文 | 历史对话、知识、经验生命周期会话期间 | 永久存储存储位置内存/Redis | 数据库/向量库检索方式全量加载 | 语义检索(相似度)技术方案ConversationBuffer | VectorStore + RAG
三、短期记忆实现
1. ConversationBufferMemory(缓冲区记忆)
最简单的短期记忆,将所有对话历史保存在内存中。
from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()memory.save_context({"input": "你好"}, {"output": "你好!有什么可以帮你的?"})memory.save_context({"input": "我叫张三"}, {"output": "你好张三,很高兴认识你!"})
print(memory.load_memory_variables({})) # 返回完整对话历史
问题:对话越长,Token 消耗越多,最终超出模型上下文窗口。
2. ConversationBufferWindowMemory(滑动窗口)
只保留最近 N 轮对话,控制上下文长度。
from langchain.memory import ConversationBufferWindowMemorymemory = ConversationBufferWindowMemory(k=3) # 只保留最近3轮
3. ConversationSummaryMemory(摘要记忆)
当对话过长时,自动用 LLM 生成摘要,替代原始对话。
from langchain.memory import ConversationSummaryMemoryfrom langchain_openai import ChatOpenAIllm = ChatOpenAI(model="gpt-4")memory = ConversationSummaryMemory(llm=llm)
memory.save_context({"input": "今天天气很好"}, {"output": "是的,适合出去走走!"})memory.save_context({"input": "你喜欢什么运动?"}, {"output": "我喜欢跑步和游泳。"})
print(memory.load_memory_variables({}))
输出:总结:用户今天提到天气好,询问了我的运动喜好。我喜欢跑步和游泳。
4. 组合方案:Token 限制 + 摘要
from langchain.memory import ConversationSummaryBufferMemorymemory = ConversationSummaryBufferMemory( llm=llm, max_token_limit=1000 # 超过1000 token时自动摘要)
四、长期记忆实现
长期记忆的核心是向量数据库(Vector Store)+ 语义检索。Agent 可以将历史信息存入向量库,需要时检索相关内容。
1. 基础架构
用户输入 -> 向量化 -> 相似度检索 -> 召回相关记忆 -> 注入Prompt -> LLM生成回复 ^ 历史对话存入向量库2. 使用 FAISS 实现向量记忆
from langchain.memory import VectorStoreRetrieverMemoryfrom langchain_community.vectorstores import FAISSfrom langchain_openai import OpenAIEmbeddings, ChatOpenAIfrom langchain.schema import Document初始化向量库和嵌入模型
embeddings = OpenAIEmbeddings()vector_store = FAISS.from_documents([Document(page_content="初始文档")], embeddings)retriever = vector_store.as_retriever(search_kwargs={"k": 3})
创建向量记忆
memory = VectorStoreRetrieverMemory(retriever=retriever)
存储记忆
memory.save_context( {"input": "我的职业是软件工程师"}, {"output": "好的,我记住了你是一名软件工程师。"})
检索记忆(根据语义相似度)
relevant = memory.load_memory_variables({"input": "我平时写什么代码?"})print(relevant)
可能召回:"我的职业是软件工程师"
3. 使用 ChromaDB 持久化存储
from langchain_community.vectorstores import Chroma持久化到磁盘
vector_store = Chroma( persist_directory="./chroma_db", embedding_function=embeddings)vector_store.persist()
4. 自定义长期记忆类
class LongTermMemory: def __init__(self, vector_store, embedding_model): self.vector_store = vector_store self.embedding = embedding_model def remember(self, text, metadata=None): """存储记忆""" doc = Document(page_content=text, metadata=metadata or {}) self.vector_store.add_documents([doc]) def recall(self, query, k=3): """检索记忆""" results = self.vector_store.similarity_search(query, k=k) return [r.page_content for r in results]使用示例
ltm = LongTermMemory(vector_store, embeddings)ltm.remember("用户喜欢吃川菜,尤其是火锅", {"type": "preference", "user": "user_001"})ltm.remember("用户在深圳工作", {"type": "profile", "user": "user_001"})
print(ltm.recall("用户有什么饮食偏好?"))
输出:['用户喜欢吃川菜,尤其是火锅']
五、混合记忆架构:短期 + 长期
生产环境中通常需要同时使用两种记忆:
from langchain.memory import CombinedMemoryclass HybridMemory: def __init__(self, short_term, long_term): self.short_term = short_term # ConversationBufferMemory self.long_term = long_term # VectorStoreRetrieverMemory def load_memory(self, query): """加载混合记忆""" short = self.short_term.load_memory_variables({}) long = self.long_term.load_memory_variables({"input": query}) return { "chat_history": short.get("history", ""), "relevant_memories": long.get("memory", "") }
使用
hybrid = HybridMemory( short_term=ConversationBufferMemory(memory_key="chat_history"), long_term=VectorStoreRetrieverMemory(retriever=retriever, memory_key="relevant_memories"))
六、记忆架构对比表
方案 适用场景 | 优点 | 缺点 ----------------|------|------ BufferMemory 短对话 | 实现简单 | 无法处理长对话 WindowMemory 中等长度对话 | 控制Token消耗 | 可能丢失重要信息 SummaryMemory 长对话 | 保留核心信息 | 摘要可能丢失细节 SummaryBufferMemory 超长对话 | 自动平衡 | 需要LLM生成摘要 VectorStoreMemory 长期知识 | 语义检索能力强 | 需要向量数据库 HybridMemory 生产环境 | 兼顾短期和长期 | 架构复杂
七、总结
记忆机制是 Agent 智能化的重要基石。短期记忆解决"对话连贯性",长期记忆解决"知识积累"。在实际项目中,推荐采用SummaryBufferMemory + VectorStore的混合方案,既能控制上下文成本,又能实现长期知识检索。
---
下一篇将介绍 Agent 的工具调用(Tool Use)实战,教你如何让 Agent 真正"动手做事"。