新闻详情

新闻详情

首页 / 资讯中心 / 详情

06-Agent的记忆系统

发布时间:2026/11/14 20:25:29来源:尧图网络
06-Agent的记忆系统
Agent 的记忆系统让它记住你说过的话系列AI Agent 从入门到实战 | 第 6 篇前面几篇我们给 Agent 接上了大脑和工具但它还有一个致命缺陷——没有记性。每次对话都从零开始上次聊过什么全忘了。这一篇我们给 Agent 加上记忆系统让它能记住你的偏好、历史对话、甚至跨对话积累知识。一、没有记忆的 Agent 有多难受第 1 次对话 我叫张三我是做前端开发的 你好张三有什么可以帮你的 第 2 次对话 帮我推荐一些学习资料 你好你想学什么方向完全不记得你是前端开发 ……我上次不是说了吗 抱歉我无法记住之前的对话内容。这种体验非常糟糕。记忆是 Agent 从工具进化到助手的关键。二、记忆的三种类型Agent 的记忆系统 │ ├── 短期记忆Short-term Memory │ ├── 是什么当前对话的上下文 │ ├── 存在哪大模型的上下文窗口 │ ├── 能存多久对话结束就丢 │ └── 类比你正在读的这篇文章的内容 │ ├── 对话历史Chat History │ ├── 是什么过去所有对话的记录 │ ├── 存在哪数据库或文件 │ ├── 能存多久永久直到你删掉 │ └── 类比你的微信聊天记录 │ └── 长期记忆Long-term Memory ├── 是什么从对话中提炼出的知识和偏好 ├── 存在哪向量数据库 ├── 能存多久永久 └── 类比你对一个朋友的性格了解三、实现方式一对话历史最常用最简单的记忆方式——把之前的对话记录存下来每次对话时一起发给 LLM。LangChain 的内置记忆方案fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholderfromlangchain_core.messagesimportHumanMessage,AIMessage llmChatOpenAI(modelgpt-3.5-turbo,temperature0)# 提示词模板预留了 chat_history 位置promptChatPromptTemplate.from_messages([(system,你是一个智能助手请根据对话历史回答用户问题。),MessagesPlaceholder(variable_namechat_history),# ← 记忆在这里注入(human,{input}),])chainprompt|llm# 模拟对话历史chat_history[]# 第 1 轮对话response1chain.invoke({input:我叫张三我是做前端开发的,chat_history:chat_history})print(response1.content)# 你好张三很高兴认识你这位前端开发者。# 把这轮对话加入历史chat_history.append(HumanMessage(content我叫张三我是做前端开发的))chat_history.append(AIMessage(contentresponse1.content))# 第 2 轮对话带上了历史response2chain.invoke({input:帮我推荐一些学习资料,chat_history:chat_history})print(response2.content)# 张三作为前端开发者我推荐你看看这些资料……# 它记住了你是前端开发关键点第 1 轮 输入我叫张三我是做前端开发的 chat_history[]空的 第 2 轮 输入帮我推荐一些学习资料 chat_history[ Human: 我叫张三我是做前端开发的, AI: 你好张三... ] ↑ 之前的对话被带上了LLM 就记得了四、实现方式二窗口记忆防止上下文爆掉对话历史有个问题聊久了历史会越来越长最终超出 LLM 的上下文窗口限制。解决方案只保留最近 N 轮对话。fromlangchain.memoryimportConversationBufferWindowMemory# 只保留最近 5 轮对话memoryConversationBufferWindowMemory(k5,# 保留最近 5 轮return_messagesTrue,# 返回消息格式memory_keychat_history# 对应提示词中的变量名)# 使用方式fromlangchain.chainsimportConversationChain chainConversationChain(llmllm,memorymemory,verboseTrue)# 对话chain.invoke({input:我叫张三})# 第 1 轮chain.invoke({input:我是前端开发})# 第 2 轮chain.invoke({input:推荐学习资料})# 第 3 轮记得前两轮窗口记忆的效果对话轮次1 2 3 4 5 6 7 8 9 10 k5 记忆 ✓ ✓ ✓ ✓ ✓ ✓ ↑ 第 1-5 轮已被遗忘五、实现方式三摘要记忆压缩历史当对话很长时另一种策略是把历史对话压缩成摘要而不是直接丢掉。fromlangchain.memoryimportConversationSummaryMemory memoryConversationSummaryMemory(llmllm,# 用 LLM 来生成摘要return_messagesTrue,memory_keychat_history)# 使用方式和上面一样chainConversationChain(llmllm,memorymemory,verboseTrue)摘要记忆的工作方式原始历史10 轮对话很长 Human: 我叫张三 AI: 你好张三 Human: 我是做前端的 AI: 前端很好 Human: 我喜欢 React AI: React 是个好框架 ... 压缩后的摘要很短 用户张三是一名前端开发者喜欢使用 React 框架 正在寻找前端学习资料对 TypeScript 感兴趣。好处信息不丢但占用的 token 大大减少。六、实现方式四长期记忆跨对话记忆上面三种方式都局限在单次对话内。如果你想让 Agent跨对话记住信息就需要长期记忆。核心思路把重要信息存到向量数据库里下次对话时检索出来。fromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain_core.toolsimporttoolfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholder# 长期记忆系统 classLongTermMemory:基于向量数据库的长期记忆def__init__(self,persist_dir./memory_db):self.embeddingsOpenAIEmbeddings()self.vector_storeChroma(persist_directorypersist_dir,embedding_functionself.embeddings)defremember(self,content:str,metadata:dictNone):记住一条信息self.vector_store.add_texts(texts[content],metadatas[metadataor{}])returnf已记住:{content}defrecall(self,query:str,k:int3)-str:回忆与查询最相关的信息resultsself.vector_store.similarity_search(query,kk)ifnotresults:return没有找到相关记忆。memories[]fori,docinenumerate(results,1):memories.append(f{i}.{doc.page_content})return相关记忆:\n\n.join(memories)# 初始化长期记忆ltmLongTermMemory()# 定义记忆工具 tooldefremember_info(content:str)-str:记住用户告诉你的重要信息比如姓名、偏好、工作等。 当用户主动告知个人信息时使用这个工具。returnltm.remember(content,{type:user_info})tooldefrecall_info(query:str)-str:回忆之前对话中提到的相关信息。 当需要查找用户之前说过的话时使用。returnltm.recall(query)# 创建带长期记忆的 Agent tools[remember_info,recall_info]llmChatOpenAI(modelgpt-3.5-turbo,temperature0)promptChatPromptTemplate.from_messages([(system,你是一个有长期记忆的智能助手。 你可以使用两个记忆工具 - remember_info: 当用户告诉你重要信息时主动记住它 - recall_info: 当需要查找之前的信息时主动回忆 规则 1. 用户告诉你个人信息时名字、偏好、工作等一定要用 remember_info 记住 2. 回答问题前先用 recall_info 查找是否有相关记忆 3. 要表现得像一个有记忆力的助手而不是每次都像初次见面),MessagesPlaceholder(variable_namechat_history,optionalTrue),(human,{input}),MessagesPlaceholder(variable_nameagent_scratchpad),])agentcreate_tool_calling_agent(llm,tools,prompt)agent_executorAgentExecutor(agentagent,toolstools,verboseTrue)# 测试 print( 第 1 次对话 )agent_executor.invoke({input:我叫李四我是做后端开发的我喜欢用 Go 语言})print(\n 第 2 次对话新对话理论上不记得 )agent_executor.invoke({input:我叫什么名字喜欢什么语言})运行效果 第 1 次对话 我叫李四我是做后端开发的我喜欢用 Go 语言 Agent 思考用户告诉我个人信息我应该记住 调用 remember_info(用户名叫李四做后端开发喜欢 Go 语言) ✅ 已记住: 用户名叫李四做后端开发喜欢 Go 语言 你好李四很高兴认识你这位 Go 语言爱好者我已经记住了。 第 2 次对话 我叫什么名字喜欢什么语言 Agent 思考用户问之前的信息我应该回忆一下 调用 recall_info(用户名字和喜欢的编程语言) 相关记忆: 用户名叫李四做后端开发喜欢 Go 语言 你叫李四喜欢用 Go 语言跨对话也记住了七、四种记忆方式对比方式存储位置保留范围适合场景对话历史内存单次对话短对话、简单场景窗口记忆内存最近 N 轮对话较长但只需近期信息摘要记忆内存压缩后保留对话很长、想保留关键信息长期记忆向量数据库跨对话永久需要记住用户偏好和历史怎么选你的 Agent 需要跨对话记忆吗 ├── 不需要 → 对话历史 / 窗口记忆 └── 需要 → 长期记忆向量数据库实际项目中往往是多种方式组合使用当前对话 → 短期记忆窗口记忆保留最近 5 轮 跨对话 → 长期记忆向量数据库存储用户偏好 两者结合 → Agent 既有短期上下文又有长期知识八、完整示例带完整记忆的 Agent把短期和长期记忆结合在一起fromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholderfromlangchain_core.messagesimportHumanMessage,AIMessage# 短期记忆对话历史手动维护chat_history[]# 长期记忆向量数据库前面定义的 LongTermMemory 类# ltm LongTermMemory()llmChatOpenAI(modelgpt-3.5-turbo,temperature0)promptChatPromptTemplate.from_messages([(system,你是一个有记忆的智能助手。),MessagesPlaceholder(variable_namechat_history),(human,{input}),MessagesPlaceholder(variable_nameagent_scratchpad),])agentcreate_tool_calling_agent(llm,tools,prompt)executorAgentExecutor(agentagent,toolstools,verboseTrue)# 对话循环whileTrue:user_inputinput( 你)ifuser_input.lower()quit:break# 注入短期记忆对话历史 长期记忆检索相关记忆relevant_memoriesltm.recall(user_input)resultexecutor.invoke({input:f相关记忆{relevant_memories}\n\n用户问题{user_input},chat_history:chat_history})print(f 助手{result[output]})# 更新短期记忆chat_history.append(HumanMessage(contentuser_input))chat_history.append(AIMessage(contentresult[output]))# 控制历史长度iflen(chat_history)20:chat_historychat_history[-20:]九、总结记忆类型实现方式关键类/方法对话历史手动维护列表chat_history []窗口记忆ConversationBufferWindowMemoryk5保留最近 5 轮摘要记忆ConversationSummaryMemory用 LLM 压缩历史长期记忆向量数据库 工具Chromatool记忆让 Agent 从工具变成了助手。一个有记忆的 Agent才能真正成为用户的长期伙伴。下一篇预告第 7 篇ReAct 模式详解Agent 是怎么思考的前面我们一直在用 Agent但它到底是怎么决定先做什么、再做什么的下一篇我们深入 ReAct 模式看看 Agent 的思考过程到底是怎么回事。 关注我不迷路如果觉得有帮助点个赞 收藏 ⭐ 支持一下是我持续更新的动力
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/14 3:51:43

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉