记忆系统:短期记忆、长期记忆与反射机制
Agent 的记忆 (Memory) 决定了它的连贯性 (Coherence) 和成长性 (Growth)。 如果 Agent 每次对话都从零开始,它就无法建立用户画像,也无法从过去的错误中学习。 这就像《记忆碎片》里的主角,永远活在当下。 为了让 Agent 变得“有血有肉”,我们需要为它构建一套完整的记忆系统。
1. 记忆的分类 (Memory Types)
1.1 短期记忆 (Short-term Memory)
- Buffer Memory: 最近几轮对话历史(Conversation History)。
- Working Memory: 当前任务的中间状态、变量、计划。
- Token 限制: 受 Context Window 限制,无法无限存储。
- 实现:
List[Message]。
1.2 长期记忆 (Long-term Memory)
- Episodic Memory (情景记忆): 过去发生的具体事件("上周二帮用户查了天气")。
- Semantic Memory (语义记忆): 知识、事实("用户的名字叫 Alice,是个素食主义者")。
- Procedural Memory (程序记忆): 技能、经验("如果用户问代码问题,先写伪代码")。
- 实现: Vector Database (RAG)。
2. 记忆机制工程实现
2.1 摘要与压缩 (Summarization)
随着对话进行,短期记忆会撑爆 Context。 与其丢弃旧对话,不如总结。 使用 ConversationSummaryMemory:
- 对话 1-10 轮。
- LLM 生成摘要:"用户问了关于 Python 的问题,Agent 给出了代码示例。"
- 对话 11-20 轮。
- LLM 更新摘要:"用户继续追问了 pandas 用法..."。 这样,无论对话多长,始终只保留最新的摘要 + 最近几轮对话。
2.2 向量检索 (Vector Retrieval)
将所有历史对话切片存入向量库。 当用户问新问题时,检索相关的旧对话。 这让 Agent 能回忆起很久以前的事情。 Challenge: 检索可能不准。
2.3 反射机制 (Reflection)
这是让 Agent 自我进化的关键。 Agent 定期回顾自己的记忆,提取出High-level Insights。
- Observation: 用户多次拒绝了包含肉食的食谱推荐。
- Reflection: "用户可能是素食者。" -> 存入语义记忆。
- Future Action: 下次推荐时,自动过滤掉肉类。 这参考了斯坦福 Generative Agents (西部世界) 的架构。
3. LangChain Memory 组件
LangChain 提供了丰富的 Memory 实现:
- ConversationBufferMemory: 原始对话列表。
- ConversationSummaryMemory: 摘要对话。
- VectorStoreRetrieverMemory: 向量检索。
- EntityMemory: 提取实体信息(如 Name, Age)。
3.1 代码示例
python
from langchain.memory import ConversationSummaryBufferMemory
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI()
memory = ConversationSummaryBufferMemory(llm=llm, max_token_limit=100)
memory.save_context({"input": "Hi"}, {"output": "Hello!"})
memory.save_context({"input": "I like pizza"}, {"output": "Me too!"})
# 当超过 limit 时,自动摘要
print(memory.load_memory_variables({}))
# {'history': 'The human greets the AI. They discuss liking pizza.'}4. 记忆增强生成 (Memory Augmented Generation)
4.1 个性化 (Personalization)
在 System Prompt 中动态注入用户的长期记忆。 System: You are helpful. User profile: {vegetarian: true, language: python}。
4.2 持续学习 (Continual Learning)
通过反射机制,不断更新 User Profile。 这就是 Agent 的“成长”。
记忆是 Agent 的灵魂。 短期记忆让对话流畅,长期记忆让关系持久,反射机制让智慧涌现。 设计一个好的记忆系统,就是在设计一个数字生命的大脑皮层。