news 2026/7/15 23:27:50

Agent 记忆系统深度解析:从失忆到长记性的工程之路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Agent 记忆系统深度解析:从失忆到长记性的工程之路

Agent 记忆系统深度解析:从"失忆"到"长记性"的工程之路

没有记忆的 Agent,每轮对话都是一次"初次见面"。
有记忆的 Agent,才能从"工具"进化为"伙伴"。


前言:记忆是 Agent 从"工具"到"伙伴"的分水岭

没有记忆的 Agent:

用户:我叫张三 Agent:你好,张三! 用户:我叫什么名字? Agent:抱歉,我不记得你刚才说了什么。请问你叫什么名字?

有记忆的 Agent:

用户:我叫张三,喜欢简洁的回复 Agent:好的,张三! 用户:帮我查一下今天的新闻 Agent:张三,以下是今天的新闻摘要... (记得用户的名字,回复更简洁)

记忆,就是 Agent 的"持续性"——让 Agent 不仅知道"现在",还知道"过去"。


一、Agent 记忆的三层架构

1.1 三层记忆模型

┌─────────────────────────────────────┐ │ L1:工作记忆(上下文窗口) │ │ 当前对话内容、临时信息 │ │ 容量:模型上下文窗口大小(4K-200K) │ │ 持久性:一次推理 │ ├─────────────────────────────────────┤ │ L2:短期记忆(会话记忆) │ │ 当前会话的历史、状态 │ │ 容量:不限(但需要管理) │ │ 持久性:一次会话 │ ├─────────────────────────────────────┤ │ L3:长期记忆(持久记忆) │ │ 用户偏好、知识、经验 │ │ 容量:不限(外部存储) │ │ 持久性:永久 │ └─────────────────────────────────────┘

1.2 各层的关系

工作记忆(L1):正在处理的信息 ↓ 超出上下文窗口 → 压缩到短期记忆 短期记忆(L2):本次会话的信息 ↓ 会话结束 → 重要信息提升到长期记忆 长期记忆(L3):跨会话的信息 ↑ 需要时 → 检索到工作记忆

二、工作记忆(L1):上下文窗口管理

2.1 工作记忆的特点

工作记忆就是模型的上下文窗口。它有两个硬约束:

  1. 容量有限:4K-200K token(2026年主流模型已支持128K-200K)
  2. 注意力不均匀:中间信息容易被忽略("Lost in the Middle"现象)

2.2 工作记忆的内容管理

classWorkingMemory:"""工作记忆管理"""def__init__(self,max_tokens=128000):# 2026-07 更新:默认值从32K调整为128Kself.max_tokens=max_tokens self.content=[]defadd(self,item,priority="normal"):"""添加内容到工作记忆"""item_tokens=count_tokens(item)ifself.total_tokens()+item_tokens>self.max_tokens:self._evict(priority)self.content.append(item)def_evict(self,current_priority):"""淘汰低优先级内容"""# 优先级:system > tools > memory > history > resultspriority_order=["results","history","memory","tools","system"]forpinpriority_order:ifp==current_priority:continuewhileself._has_priority(p):self._remove_oldest(p)ifself.total_tokens()<=self.max_tokens*0.8:returndefsummarize(self):"""压缩工作记忆为摘要"""prompt=f"请将以下对话压缩为 200 token 以内的摘要:\n{self.content}"returnllm(prompt)

三、短期记忆(L2):会话记忆

3.1 短期记忆的实现

classShortTermMemory:"""短期记忆:会话级别的记忆"""def__init__(self):self.messages=[]self.extracted_info={}# 从对话中提取的关键信息self.compressed=[]# 压缩后的历史defadd_message(self,role,content):self.messages.append({"role":role,"content":content,"timestamp":time.time(),})self._extract_info(role,content)def_extract_info(self,role,content):"""从对话中提取关键信息"""prompt=f""" 从以下对话中提取关键信息,以 JSON 格式返回: 角色:{role}内容:{content}提取的信息: - 用户偏好 - 提到的实体(人名、地名、产品名) - 任务状态 - 重要决策 """info=llm(prompt)self.extracted_info.update(info)defget_context(self,max_tokens=4000):"""获取用于 Agent 推理的短期记忆上下文"""# 1. 提取的关键信息info_context=format_info(self.extracted_info)# 2. 最近的对话(保留最近 3 轮)recent=self.messages[-6:]# 3 轮 = 6 条消息# 3. 压缩后的历史compressed=self.compressed[-3:]returninfo_context+recent+compressed

3.2 记忆压缩

classMemoryCompressor:"""记忆压缩策略"""defcompress(self,messages,max_tokens=2000):"""压缩对话历史"""# 策略 1:摘要压缩iflen(messages)>10:summary=self._summarize(messages[:-5])returnsummary+messages[-5:]# 策略 2:关键信息提取key_info=self._extract_key_info(messages)returnkey_info+messages[-3:]def_summarize(self,messages):prompt=f"请用 100 字以内总结以下对话:\n{messages}"returnllm(prompt)def_extract_key_info(self,messages):prompt=f""" 从以下对话中提取关键信息:{messages}输出格式(JSON): {{ "user_preferences": [], "completed_tasks": [], "key_decisions": [], "open_questions": [] }} """returnllm(prompt)

四、长期记忆(L3):持久记忆

4.1 长期记忆的结构

classLongTermMemory:"""长期记忆:跨会话的持久记忆"""def__init__(self,vector_db,llm):self.vector_db=vector_db self.llm=llmdefstore(self,session_id,memory_item):"""存储记忆"""# 1. 生成记忆摘要summary=self._summarize_memory(memory_item)# 2. 生成嵌入embedding=embed(summary)# 3. 存储到向量数据库self.vector_db.insert({"id":f"mem_{session_id}_{time.time()}","type":memory_item["type"],"content":memory_item,"summary":summary,"embedding":embedding,"timestamp":time.time(),"importance":memory_item.get("importance",0.5),})defretrieve(self,query,k=5,min_importance=0.3):"""检索相关记忆"""query_embedding=embed(query)results=self.vector_db.search(query_embedding,k=k*2)# 按重要性过滤和排序results=[rforrinresultsifr["importance"]>=min_importance]results.sort(key=lambdar:r["importance"]*r["score"],reverse=True)returnresults[:k]defforget(self,older_than_days=30):"""遗忘:删除过期的低重要性记忆 2026-07 更新:现代遗忘策略使用"衰减地板"模型, 模拟艾宾浩斯遗忘曲线:每次记忆被访问时强度提升, 随时间推移按指数衰减:当前强度 = 初始强度 × e^(-时间/半衰期) """cutoff=time.time()-older_than_days*86400self.vector_db.delete(filter={"timestamp":{"lt":cutoff},"importance":{"lt":0.5}})

4.2 记忆的重要性评分

classMemoryImportanceScorer:"""记忆重要性评分"""defscore(self,memory_item):prompt=f""" 评估以下记忆的重要性(0-1):{memory_item}评分维度: 1. 情感强度:是否涉及强烈情感 2. 事实性:是否是重要事实 3. 时效性:是否长期有效 4. 关联性:是否与其他记忆相关 5. 使用频率:是否被反复提及 """returnllm(prompt)# 0-1 之间的分数

五、记忆的检索与使用

5.1 记忆检索策略

classMemoryRetriever:"""综合记忆检索"""def__init__(self,working_mem,short_term,long_term):self.wm=working_mem self.stm=short_term self.ltm=long_termdefretrieve(self,query,context):"""检索所有层次的记忆"""memories=[]# 1. 工作记忆:当前上下文wm_items=self.wm.get_relevant_items(query)memories.extend(wm_items)# 2. 短期记忆:会话历史stm_items=self.stm.get_context(query)memories.extend(stm_items)# 3. 长期记忆:持久记忆ltm_items=self.ltm.retrieve(query,k=5)memories.extend(ltm_items)# 4. 排序和去重memories=self._deduplicate(memories)memories.sort(key=lambdam:m.get("relevance",0),reverse=True)# 5. 限制上下文预算returnself._limit_context(memories,max_tokens=2000)

5.2 记忆的自动触发

classMemoryTrigger:"""自动记忆触发"""def__init__(self,memory_system):self.memory=memory_systemdefon_user_input(self,user_input):"""用户输入时触发"""# 检查是否需要检索长期记忆ifself._needs_memory_retrieval(user_input):memories=self.memory.retrieve(user_input)returnmemoriesreturn[]defon_task_complete(self,task,result):"""任务完成时触发"""# 判断是否值得记住ifself._is_worth_remembering(task,result):self.memory.store({"type":"task_result","task":task,"result":result,"importance":self._calculate_importance(task,result),})defon_error(self,error):"""错误发生时触发"""self.memory.store({"type":"error","error":str(error),"importance":0.8,# 错误通常很重要})

六、2026 年记忆系统趋势

6.1 分层记忆融合

不再把 L1、L2、L3 分开管理,而是统一检索:

统一记忆 API: query → 在所有层次中检索 结果按相关性和重要性排序 自动决定哪些记忆提升/降级

6.2 记忆的自我进化

Agent 可以自己管理自己的记忆:

Agent 自动做: - 判断什么信息值得记住 - 决定什么时候忘记 - 对记忆进行重组和关联 - 从记忆中提取模式

6.3 记忆共享

多 Agent 之间共享记忆:

Agent A 学会的知识 → 存入共享记忆库 Agent B 做类似任务 → 从共享记忆库检索

6.4 记忆即基础设施(Memory as Infrastructure)

2026年,记忆系统正从"应用层组件"演进为"基础设施层服务":

第三代记忆架构(2026): Mem0 Cloud / Letta Cloud → 记忆即服务 Agent 只需调用 memory.store() / memory.retrieve() 底层的向量检索、重要性评分、遗忘策略全部由基础设施处理 支持跨Agent、跨平台的记忆共享

代表项目:

  • Letta(MemGPT):22,000+ Stars,提供完整的Agent记忆管理框架
  • Graphiti:24,700+ Stars,基于时序知识图谱的记忆管理
  • Mem0:第三代记忆云服务,支持多模态记忆存储
  • OpenClaw LCM:无损上下文管理,通过摘要DAG实现压缩+完整召回

总结

记忆层次存储位置容量持久性管理方式
工作记忆(L1)上下文窗口有限(128K-200K)一次推理内容管理
短期记忆(L2)内存/会话较大一次会话压缩管理
长期记忆(L3)外部存储无限永久检索+遗忘
重要性记忆权重--评分+筛选

好的记忆系统,让 Agent 从"每次都重新开始"变成"越来越了解你"。

下一篇文章,我们将深入工具系统与 MCP 协议


思考题

  1. 你的 Agent 现在有"长期记忆"吗?如果有,是怎么实现的?
  2. 记忆的"重要性评分"应该由模型决定还是由规则决定?为什么?
  3. 如果 Agent 的记忆"太多"了,检索结果中大部分都不相关,你怎么办?

上一篇:[30] 从 Agent 到 Agentic Workflow
下一篇:[32] 工具系统与 MCP 协议

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 23:23:36

iSulad-img:华为iSulad容器引擎的镜像管理神器完全指南

iSulad-img&#xff1a;华为iSulad容器引擎的镜像管理神器完全指南 【免费下载链接】iSulad-img This is a command line utility used by iSulad to performs various operations on container images. iSulad-img is used to pull image from image repositories and prepare…

作者头像 李华
网站建设 2026/7/15 23:16:27

从理论到实践:MATLAB最优化工具箱核心函数与源码解析

1. MATLAB最优化工具箱的核心价值我第一次接触MATLAB最优化工具箱是在研究生阶段&#xff0c;当时需要解决一个工程参数调优问题。这个工具箱给我的第一印象是&#xff1a;它把复杂的数学优化算法封装成了简单易用的函数&#xff0c;就像把高级餐厅的厨艺打包成了方便操作的智能…

作者头像 李华
网站建设 2026/7/15 23:15:30

基于RF430CL331H的动态NFC标签设计:从硬件到软件实战指南

1. 项目概述&#xff1a;当NFC标签遇上MCU大脑在物联网和智能设备遍地开花的今天&#xff0c;近场通信&#xff08;NFC&#xff09;技术因其便捷的“一触即发”交互体验&#xff0c;早已从移动支付渗透到设备配对、信息交换、无线配置等众多场景。然而&#xff0c;传统的NFC标签…

作者头像 李华
网站建设 2026/7/15 23:11:36

3D目标检测数据集全景解析:从KITTI到Waymo的演进与实战指南

1. 3D目标检测数据集概述3D目标检测是自动驾驶和机器人感知领域的核心技术&#xff0c;而高质量的数据集是算法研发的基石。如果把3D检测比作教AI"看懂"三维世界&#xff0c;那么数据集就是它的"教科书"——教材的质量直接决定学习效果。从早期的KITTI到如…

作者头像 李华
网站建设 2026/7/15 23:09:57

Photon Fusion 2 Shared Mode避坑指南:输入处理与状态同步实战

1. 项目概述&#xff1a;为什么Fusion的共享模式是多人游戏开发的“深水区”&#xff1f; 如果你正在用Unity开发一款强调竞技性、需要低延迟和精确判定的多人游戏&#xff0c;比如一款俯视角射击或者格斗游戏&#xff0c;那么Photon Fusion 2大概率已经进入了你的技术选型视野…

作者头像 李华