Agent记忆系统概述,短期记忆长期记忆工作记忆全解析

发布时间:2026/9/25 23:40:49

Agent记忆系统概述,短期记忆长期记忆工作记忆全解析 Agent记忆系统概述短期记忆长期记忆工作记忆全解析你有没有这样的体验。跟ChatGPT聊了一会儿它记住了前面说的内容能接着聊。但是关掉窗口重新打开它就全忘了一切从头来。这就是大模型的记忆问题。大模型本身是没有记忆的。每次调用都是独立的它不知道你上一句话说了什么。所谓的记住是因为应用层把之前的对话也一起传给了它。这种做法在简单场景够用。但到了Agent场景就不够了。Agent需要处理复杂任务可能要跨多轮对话可能要记住用户的偏好可能要回顾之前的决策。光靠把历史对话全塞进Prompt既浪费Token又效果不好。这一篇我们讲Agent的记忆系统。有哪些记忆类型各自解决什么问题怎么设计一个合理的记忆体系。为什么Agent需要记忆先说没有记忆的Agent会出什么问题。上下文丢失。用户说了什么偏好过几轮对话就忘了。用户告诉Agent我是Python开发者过了十轮对话Agent推荐了一堆Java教程。重复劳动。用户上一次让Agent查过的信息下一次又得重新查一遍。Agent不记得自己已经查过了也不记得查到了什么。无法学习。用户纠正过Agent的错误下次它还犯同样的错。不能从交互中学习永远是第一次见面。任务断裂。复杂任务跨多次对话执行时Agent不记得任务进行到哪一步了无法继续。记忆系统要解决的就是这些问题。让Agent能记住该记的忘掉该忘的越用越懂用户。三种记忆类型借鉴人类认知科学的模型Agent的记忆通常分三种类型。短期记忆。就是当前的对话上下文。用户说了什么Agent回了什么最近几轮的交互。短期记忆存在内存里对话结束就清空。相当于人的工作台当前正在处理的信息都在这里。长期记忆。跨对话持久保存的信息。用户的偏好、历史决策、重要事实。长期记忆存在数据库里下次对话还能调出来。相当于人的笔记本记下来以后可以翻看。工作记忆。介于短期和长期之间。当前任务执行过程中的中间状态、临时变量、推理链条。任务结束后可能被清理也可能被总结后存入长期记忆。相当于人的草稿纸临时写写画画。这三种记忆配合使用构成了Agent的完整记忆体系。短期记忆怎么实现短期记忆最简单的实现方式就是把对话历史传给大模型。LangChain里的ConversationBufferMemory就是干这个的。它把所有对话都存在一个列表里每次调用大模型的时候把整个列表塞进Prompt。fromlangchain_openaiimportChatOpenAIfromlangchain.memoryimportConversationBufferMemoryfromlangchain.chainsimportConversationChain llmChatOpenAI(modelgpt-3.5-turbo,temperature0)memoryConversationBufferMemory()conversationConversationChain(llmllm,memorymemory)conversation.invoke(我叫张三是Python开发者)conversation.invoke(我最近在学AI Agent开发)conversation.invoke(我叫什么名字)# Agent能回答你叫张三因为它记住了前面的对话问题在于对话越来越长Token消耗越来越大。聊了50轮Prompt可能就几千个Token了。既慢又贵。所以短期记忆需要管理。不能无限增长。常见的策略有几种。滑动窗口。只保留最近N轮对话。比如只保留最近10轮更早的丢弃。简单有效但会丢失早期的重要信息。摘要压缩。定期把旧对话总结成一段摘要。用摘要替代原始对话大幅减少Token。保留了关键信息但摘要质量依赖大模型。Token限制。设一个Token上限超过就截断。跟滑动窗口类似但按Token而不是轮数来算。长期记忆怎么实现长期记忆的核心是把重要信息持久化存储需要的时候检索出来。存储方式通常用向量数据库。把每条记忆做成一个文本块向量化后存进去。需要的时候用语义检索找出来。fromlangchain_openaiimportOpenAIEmbeddingsfromlangchain_community.vectorstoresimportChromaclassLongTermMemory:def__init__(self,db_path./agent_memory):self.embeddingsOpenAIEmbeddings()self.storeChroma(persist_directorydb_path,embedding_functionself.embeddings,)defremember(self,content,metadataNone):记住一条信息self.store.add_texts(texts[content],metadatas[metadataor{}],)self.store.persist()defrecall(self,query,k3):回忆相关信息resultsself.store.similarity_search(query,kk)returnresults# 使用memoryLongTermMemory()# 记住用户信息memory.remember(用户叫张三是Python开发者有5年经验,metadata{type:user_profile,time:2026-01-01},)# 记住用户偏好memory.remember(用户偏好简洁的代码风格不喜欢过多注释,metadata{type:preference,time:2026-01-01},)# 回忆resultsmemory.recall(用户的编程偏好是什么)# 返回包含用户偏好简洁的代码风格的记忆长期记忆的关键不是存储是筛选。什么信息该记什么信息该忘。把每句话都存进长期记忆信息会越来越多检索质量会下降。大量无关的记忆会淹没真正重要的信息。好的做法是让大模型来判断。对话结束后让大模型回顾这段对话提取出值得记住的信息存入长期记忆。工作记忆怎么实现工作记忆是任务执行过程中的临时记忆。Agent执行复杂任务的时候中间会产生很多临时信息。搜索到了什么结果推理到了哪一步当前的计划是什么。这些信息不需要长期保存但在任务执行期间需要随时访问。工作记忆通常用一个结构化的状态对象来管理。classWorkingMemory:def__init__(self):self.taskself.plan[]self.current_step0self.intermediate_results[]self.context{}defset_task(self,task):self.tasktaskdefadd_result(self,result):self.intermediate_results.append(result)defget_summary(self):return{task:self.task,plan:self.plan,current_step:self.current_step,results_count:len(self.intermediate_results),last_result:self.intermediate_results[-1]ifself.intermediate_resultselseNone,}# 使用wmWorkingMemory()wm.set_task(调研AI Agent开发框架写一份对比报告)wm.plan[搜索主流框架,对比功能,对比性能,写报告]wm.add_result(找到LangChain、LlamaIndex、AutoGen、CrewAI四个主流框架)# ... 任务执行中任务完成后工作记忆可以清理掉。或者把关键结论提取出来存入长期记忆。记忆系统的设计原则设计Agent的记忆系统有几个原则要注意。按需记忆。不是所有信息都值得记。只记对未来有用的信息。用户的名字、偏好、重要决策、纠正过的错误这些该记。闲聊、无关紧要的细节不用记。定期整理。长期记忆会越来越多需要定期整理。合并重复的更新过时的删除不再相关的。就像人定期整理笔记一样。分层检索。检索记忆的时候先查短期记忆不够再查长期记忆。不要每次都翻全部记忆太慢也容易引入噪音。隐私保护。用户的敏感信息要谨慎处理。不是什么都能存的。提供忘记的功能让用户可以删除特定的记忆。LangChain里的记忆组件LangChain提供了多种现成的记忆组件可以直接用。ConversationBufferMemory。最基础的存所有对话。ConversationBufferWindowMemory。滑动窗口只存最近N轮。ConversationSummaryMemory。自动摘要把旧对话总结成摘要。ConversationSummaryBufferMemory。混合策略近期对话保留原文旧对话变成摘要。ConversationKGMemory。知识图谱记忆从对话中提取实体和关系存成图谱结构。VectorStoreRetrieverMemory。向量数据库记忆把对话存到向量库需要的时候语义检索。选用哪个看你的场景。简单对话用BufferWindow就行。需要长期记忆用VectorStoreRetriever。需要结构化信息用KGMemory。后面几篇我们会逐一深入这些记忆组件的用法。下一篇我们详细讲对话记忆管理。对比几种主流的对话记忆策略看它们各自适合什么场景。
延伸阅读

更多相关文章

2026/9/20 6:59:23

CAN通信矩阵详解:信号属性、字节序与工程实践指南

1. 从“一封信”到“一本字典”:CAN通信矩阵的本质 如果你刚开始接触汽车电子或者工业控制,第一次听到“CAN通信矩阵”这个词,可能会觉得它高深莫测,像是某种复杂的数学矩阵。但如果你把它想象成一本所有ECU(电子控制单…

2026/9/25 23:39:26

MinIO Java分片上传实战:断点续传与高并发优化

简介:本资源是一套面向Java后端开发者与云存储集成工程师的MinIO高性能文件上传实战示例,聚焦分片上传与断点续传两大核心场景,解决大文件稳定上传、网络中断恢复及服务端资源优化等实际问题。压缩包共13个文件,含7个Java类&#…

2026/9/25 23:39:26

传统机器学习图像分类实战:小样本、低算力、高可解释性方案

简介:本资源是一套面向机器学习初学者与图像处理开发者的实践型工具包,聚焦SVM与贝叶斯算法在图像分类任务中的工程实现,解决传统方法中特征提取、模型训练与效果对比等关键环节的落地难题。压缩包共216个文件,含102幅BMP格式样本…

2026/9/25 23:39:26

MinIO Java分片上传与断点续传实战:从5MB硬限制到生产级容错

简介:本资源是一套面向Java后端开发者与云存储集成工程师的MinIO高性能文件上传实战示例,聚焦分片上传与断点续传两大核心场景,解决大文件稳定上传、网络中断恢复及服务端资源优化等实际问题。压缩包共13个文件,含7个Java后端类&a…

2026/9/25 23:39:26

Docker-Compose部署灯塔ARL资产侦察系统V2.6.2实战指南

简介:灯塔ARL资产侦察系统V2.6.2是一套面向安全团队与渗透测试人员的互联网资产侦察工具,用于快速发现与目标关联的域名、IP及服务资产,构建基础资产信息库,从而定位薄弱点与攻击面。资源以保姆级部署教程形式呈现,重点…

2026/9/25 23:34:26

Java基础语法详解:数据类型、类型转换与逻辑控制实战

带新人这几年,我有个很深的体会:很多人学Java一上来就扑向Spring Boot、MyBatis这些框架,结果写个循环嵌套、做个类型转换都能翻车。原因很简单——数据类型、变量、类型转换、运算符以及程序逻辑控制这些Java SE最底层的语法,才是…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑