AI Agent 的记忆系统:短期记忆、长期记忆与工作记忆
AI Agent 的记忆系统:短期记忆、长期记忆与工作记忆一、为什么 AI Agent 需要记忆?想象一下这个场景:你让一个 AI 助手帮你规划一次旅行。它推荐了北京的故宫,你回复说"我腿脚不太方便,需要少走路"。结果它下一句推荐你去爬长城。你会有什么感觉?——“它根本没记住我刚才说了什么。”这就是没有记忆的 AI Agent 的典型表现。每一次对话都是"初次见面",每一次请求都从零开始。这种体验在简单的单轮问答中勉强可以接受,但对于需要多步推理、持续协作的复杂任务,记忆是 Agent 从"工具"升级为"伙伴"的关键拼图。从认知科学借鉴,AI Agent 的记忆系统通常划分为三层:记忆类型人类类比AI Agent 实现典型容量生命周期短期记忆当前对话中记住的上下文滑动窗口、对话历史4K-128K tokens单次会话长期记忆你记得上周学了什么向量数据库 + RAG百万级向量跨会话持久工作记忆做菜时"下一步放盐"结构化 planning + scratchpad有限槽位单任务周期本文将深入每一层的设计原理、实现方案和工程优化,并给出可直接运行的 Python 代码示例。二、短期记忆:对话窗口内的上下文管理2.1 核心问题大语言模型(LLM)的上下文窗口是有限的。即使在 2026 年,128K token 的窗口已很常见,长对话仍然会超出窗口。更关键的是:并非窗口内的所有信息都同等重要。将 30 轮对话全部塞入 prompt,不仅浪费 token,还会稀释关键信息——这就是著名的“Lost in the Middle”现象。2.2 常见策略策略一:滑动窗口(Naive Sliding Window)最简单粗暴的方式——只保留最近 N 轮对话。fromcollectionsimportdequeclassSlidingWindowMemory:"""最简单的短期记忆实现——滑动窗口"""def__init__(self,max_turns:int=10):self.messages=deque(maxlen=max_turns*2)# 每轮 user+assistantdefadd_user_message(self,content:str):self.messages.append({"role":"user","content":content})defadd_assistant_message(self,content:str):self.messages.append({"role":"assistant","content":content})defget_messages(self):returnlist(self.messages)# 使用示例memory=SlidingWindowMemory(max_turns=5)memory.add_user_message("帮我分析这份代码的性能问题")memory.add_assistant_message("我发现第 23 行的循环可以向量化...")# ... 多轮对话后,旧消息自动淘汰滑动窗口的问题是关键信息可能在窗口外——比如用户在对话开头提到的特定约束条件。策略二:摘要压缩(Conversation Summarization)用 LLM 定期将旧对话压缩为摘要,释放 token 空间:importopenaifromtypingimportOptionalclassSummarizationMemory:"""摘要压缩记忆:定期将旧对话压缩为摘要"""def__init__(self,client:openai.OpenAI,summary_interval:int=8):self.client=client self.summary_interval=summary_interval self.messages:list[dict]=[]self.summary:Optional[str]=Nonedefadd_and_compact(self,role:str,content:str)-list[dict]:self.messages.append({"role":role,"content":content})# 超过阈值时触发压缩iflen(self.messages)=self.summary_interval:self._summarize()# 返回当前有效上下文:摘要 + 最近消息context=[]ifself.summary:context.append({"role":"system","content":f"【历史对话摘要】{self.summary}"})context.extend(self.messages)returncontextdef_summarize(self):old_messages=self.messages[:self.summary_interval//2]self.messages=self.messages[self.summary_interval//2:]response=self.client.chat.completions.create(model="gpt-4o-mini",messages=[{"role":"system","content":"将以下对话压缩为一段简洁摘要,保留关键信息。"},{"role":"user","content":str(old_messages)}])self.summary=response.choices[0].message.content摘要压缩的局限性在于信息会逐渐失真——类似于传话游戏,每一次压缩都是一次有损转换。策略三:混合方案(推荐)实际生产中最常用的是混合方案:关键信息提取 + 滑动窗口。将用户偏好、约束条件等关键信息单独存储(类似长期记忆),而对话流本身用滑动窗口管理。classHybridShortTermMemory:"""混合短期记忆:关键信息持久 + 对话流滑动"""def__init__(self,max_turns:int=10):self.key_info:dict[str,str]={}# 关键信息(持久)self.dialogue=deque(maxlen=max_turns*2)# 对话流(滑动)defadd_exchange(self,user_msg:str,assistant_msg:str):self.dialogue.append({"role":

相关新闻

从拿破仑到希特勒:复盘“寒冬”如何成为战争史上的决定性变量

从拿破仑到希特勒:复盘“寒冬”如何成为战争史上的决定性变量

1. 当军事天才遇上西伯利亚寒流 1812年6月24日,拿破仑站在涅曼河畔眺望对岸的俄罗斯领土时,这位征服了大半个欧洲的军事天才不会想到,他精心打造的60万大军最终会被零下40度的严寒吞噬。历史总是惊人地相似——129年后的1941年,希…

2026/6/19 20:32:00阅读更多 →
懂游宝(懂淘app)新品牌逆势增长,276家品牌年销破亿

懂游宝(懂淘app)新品牌逆势增长,276家品牌年销破亿

在全行业深陷低价内卷、流量红利消退的电商大环境下,多数商家陷入降价不盈利、守价没流量的经营困境,整体市场增长节奏持续放缓。而懂游宝(懂淘 app)却走出了独有的差异化增长路径,在行业寒冬中实现新品牌的逆势爆发。…

2026/6/19 20:32:00阅读更多 →
深入解析ColdFire EIM总线时序:从基础读写到突发传输实战

深入解析ColdFire EIM总线时序:从基础读写到突发传输实战

1. 项目概述:从时序图到电路板,理解ColdFire EIM的通信基石在嵌入式系统开发中,微控制器与外部世界的对话——无论是读取一片Flash中的固件,还是向一片SDRAM写入海量数据,亦或是与一个低速的传感器通信——其底层物理层…

2026/6/19 20:32:00阅读更多 →
终极ESP32 Arduino开发完整指南:从零到项目实战的快速教程

终极ESP32 Arduino开发完整指南:从零到项目实战的快速教程

终极ESP32 Arduino开发完整指南:从零到项目实战的快速教程 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 还在为ESP32开发环境配置而烦恼吗?今天我…

2026/6/20 0:02:40阅读更多 →
MC68F375 QSMCM模块深度解析:从寄存器配置到队列SPI实战

MC68F375 QSMCM模块深度解析:从寄存器配置到队列SPI实战

1. 项目概述与核心价值在嵌入式系统开发中,串行通信是连接微控制器(MCU)与传感器、存储器、显示器等外围设备的“血管”。面对复杂的应用场景,开发者常常需要在有限的硬件资源下,同时处理高速同步数据流和异步设备通信…

2026/6/20 0:02:40阅读更多 →
在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

1. 银河麒麟V10桌面系统与软RAID 1基础认知 第一次在银河麒麟V10桌面上折腾软RAID 1时,我踩了不少坑。这个国产操作系统基于Linux内核,但2205版本对软RAID模块做了特殊处理,需要额外操作才能正常使用。软RAID 1其实就是磁盘镜像技术&#xff…

2026/6/20 0:02:40阅读更多 →
MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

1. 项目概述与核心价值在嵌入式开发,尤其是电机驱动、LED调光、开关电源这些需要精确控制“能量”的领域,脉冲宽度调制(PWM)技术是工程师手中的一把瑞士军刀。它的本质很简单:用一个固定频率的方波,通过改变…

2026/6/20 0:02:40阅读更多 →
【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/20 0:02:40阅读更多 →
Roo Code Memory Bank终极指南:让AI助手记住你的项目上下文

Roo Code Memory Bank终极指南:让AI助手记住你的项目上下文

Roo Code Memory Bank终极指南:让AI助手记住你的项目上下文 【免费下载链接】roo-code-memory-bank 🧠 Roo Code Memory Bank: Seamless project context in Roo Code. No more repetition, just continuous development! 项目地址: https://gitcode.c…

2026/6/19 23:57:40阅读更多 →
【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/20 0:02:40阅读更多 →
MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

1. 项目概述与核心价值在嵌入式开发,尤其是电机驱动、LED调光、开关电源这些需要精确控制“能量”的领域,脉冲宽度调制(PWM)技术是工程师手中的一把瑞士军刀。它的本质很简单:用一个固定频率的方波,通过改变…

2026/6/20 0:02:40阅读更多 →
在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

1. 银河麒麟V10桌面系统与软RAID 1基础认知 第一次在银河麒麟V10桌面上折腾软RAID 1时,我踩了不少坑。这个国产操作系统基于Linux内核,但2205版本对软RAID模块做了特殊处理,需要额外操作才能正常使用。软RAID 1其实就是磁盘镜像技术&#xff…

2026/6/20 0:02:40阅读更多 →