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(k3) # 只保留最近3轮3. ConversationSummaryMemory摘要记忆当对话过长时自动用 LLM 生成摘要替代原始对话。from langchain.memory import ConversationSummaryMemoryfrom langchain_openai import ChatOpenAIllm ChatOpenAI(modelgpt-4)memory ConversationSummaryMemory(llmllm)memory.save_context({input: 今天天气很好}, {output: 是的适合出去走走})memory.save_context({input: 你喜欢什么运动}, {output: 我喜欢跑步和游泳。})print(memory.load_memory_variables({}))输出总结用户今天提到天气好询问了我的运动喜好。我喜欢跑步和游泳。4. 组合方案Token 限制 摘要from langchain.memory import ConversationSummaryBufferMemorymemory ConversationSummaryBufferMemory( llmllm, max_token_limit1000 # 超过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(retrieverretriever)存储记忆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_functionembeddings)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, metadataNone): 存储记忆 doc Document(page_contenttext, metadatametadata or {}) self.vector_store.add_documents([doc]) def recall(self, query, k3): 检索记忆 results self.vector_store.similarity_search(query, kk) 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_termConversationBufferMemory(memory_keychat_history), long_termVectorStoreRetrieverMemory(retrieverretriever, memory_keyrelevant_memories))六、记忆架构对比表方案 适用场景 | 优点 | 缺点 ----------------|------|------ BufferMemory 短对话 | 实现简单 | 无法处理长对话 WindowMemory 中等长度对话 | 控制Token消耗 | 可能丢失重要信息 SummaryMemory 长对话 | 保留核心信息 | 摘要可能丢失细节 SummaryBufferMemory 超长对话 | 自动平衡 | 需要LLM生成摘要 VectorStoreMemory 长期知识 | 语义检索能力强 | 需要向量数据库 HybridMemory 生产环境 | 兼顾短期和长期 | 架构复杂七、总结记忆机制是 Agent 智能化的重要基石。短期记忆解决对话连贯性长期记忆解决知识积累。在实际项目中推荐采用SummaryBufferMemory VectorStore的混合方案既能控制上下文成本又能实现长期知识检索。---下一篇将介绍 Agent 的工具调用Tool Use实战教你如何让 Agent 真正动手做事。
AI Agent 的记忆机制:短期记忆与长期记忆实现
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(k3) # 只保留最近3轮3. ConversationSummaryMemory摘要记忆当对话过长时自动用 LLM 生成摘要替代原始对话。from langchain.memory import ConversationSummaryMemoryfrom langchain_openai import ChatOpenAIllm ChatOpenAI(modelgpt-4)memory ConversationSummaryMemory(llmllm)memory.save_context({input: 今天天气很好}, {output: 是的适合出去走走})memory.save_context({input: 你喜欢什么运动}, {output: 我喜欢跑步和游泳。})print(memory.load_memory_variables({}))输出总结用户今天提到天气好询问了我的运动喜好。我喜欢跑步和游泳。4. 组合方案Token 限制 摘要from langchain.memory import ConversationSummaryBufferMemorymemory ConversationSummaryBufferMemory( llmllm, max_token_limit1000 # 超过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(retrieverretriever)存储记忆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_functionembeddings)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, metadataNone): 存储记忆 doc Document(page_contenttext, metadatametadata or {}) self.vector_store.add_documents([doc]) def recall(self, query, k3): 检索记忆 results self.vector_store.similarity_search(query, kk) 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_termConversationBufferMemory(memory_keychat_history), long_termVectorStoreRetrieverMemory(retrieverretriever, memory_keyrelevant_memories))六、记忆架构对比表方案 适用场景 | 优点 | 缺点 ----------------|------|------ BufferMemory 短对话 | 实现简单 | 无法处理长对话 WindowMemory 中等长度对话 | 控制Token消耗 | 可能丢失重要信息 SummaryMemory 长对话 | 保留核心信息 | 摘要可能丢失细节 SummaryBufferMemory 超长对话 | 自动平衡 | 需要LLM生成摘要 VectorStoreMemory 长期知识 | 语义检索能力强 | 需要向量数据库 HybridMemory 生产环境 | 兼顾短期和长期 | 架构复杂七、总结记忆机制是 Agent 智能化的重要基石。短期记忆解决对话连贯性长期记忆解决知识积累。在实际项目中推荐采用SummaryBufferMemory VectorStore的混合方案既能控制上下文成本又能实现长期知识检索。---下一篇将介绍 Agent 的工具调用Tool Use实战教你如何让 Agent 真正动手做事。