news 2026/5/7 22:39:33

AI_Agent记忆系统设计与实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI_Agent记忆系统设计与实现

AI Agent记忆系统设计与实现:从短期到长期记忆的完整方案

让你的Agent拥有"记忆",实现真正的智能对话

前言

你有没有遇到过这种情况:跟AI助手聊了半天,换了个话题再回来,它就完全忘了之前聊过什么?这就是记忆缺失的问题。

一个真正的AI Agent需要三种记忆:

  • 工作记忆:当前对话的上下文
  • 短期记忆:最近几次对话的摘要
  • 长期记忆:用户偏好、历史知识、重要事实

本文将手把手教你设计和实现一个完整的Agent记忆系统。

你将学到:

  • 记忆系统的架构设计
  • 对话历史管理策略
  • 长期记忆存储与检索
  • 记忆压缩与摘要技术
  • 个性化记忆应用

一、记忆系统架构

1.1 三层记忆模型

fromdataclassesimportdataclassfromtypingimportList,Dict,Optionalfromdatetimeimportdatetimeimportjson@dataclassclassMemory:"""记忆单元"""content:str# 记忆内容memory_type:str# 类型:working/short/longtimestamp:datetime# 创建时间importance:float# 重要性评分 0-1access_count:int# 访问次数metadata:Dict# 元数据classMemorySystem:"""三层记忆系统"""def__init__(self,max_working=20,max_short=100,max_long=10000):self.working_memory:List[Memory]=[]# 工作记忆(当前对话)self.short_term:List[Memory]=[]# 短期记忆(最近对话)self.long_term:List[Memory]=[]# 长期记忆(持久化)self.max_working=max_working self.max_short=max_short self.max_long=max_longdefadd_memory(self,content:str,memory_type:str,importance:float=0.5,metadata:dict=None):"""添加记忆"""memory=Memory(content=content,memory_type=memory_type,timestamp=datetime.now(),importance=importance,access_count=0,metadata=metadataor{})ifmemory_type=="working":self.working_memory.append(memory)iflen(self.working_memory)>self.max_working:self._consolidate_working()elifmemory_type=="short":self.short_term.append(memory)iflen(self.short_term)>self.max_short:self._consolidate_short()elifmemory_type=="long":self.long_term.append(memory)iflen(self.long_term)>self.max_long:self._forget_long()def_consolidate_working(self):"""工作记忆整合到短期记忆"""# 将旧的工作记忆转为摘要存入短期记忆old_memories=self.working_memory[:10]summary=self._summarize_memories(old_memories)self.add_memory(content=summary,memory_type="short",importance=0.6,metadata={"type":"conversation_summary"})self.working_memory=self.working_memory[10:]def_consolidate_short(self):"""短期记忆整合到长期记忆"""# 找出高重要性的短期记忆important=[mforminself.short_termifm.importance>0.7]formeminimportant:self.add_memory(content=mem.content,memory_type="long",importance=mem.importance,metadata=mem.metadata)# 清理低重要性的短期记忆self.short_term=[mforminself.short_termifm.importance>0.5]def_forget_long(self):"""长期记忆遗忘策略"""# 按重要性和访问频率排序self.long_term.sort(key=lambdam:m.importance*(1+m.access_count*0.1),reverse=True)# 保留前80%keep_count=int(self.max_long*0.8)self.long_term=self.long_term[:keep_count]def_summarize_memories(self,memories:List[Memory])->str:"""将多条记忆压缩成摘要"""# 实际项目中会调用LLM生成摘要contents=[m.contentforminmemories]return"对话摘要:"+";".join(contents[:3])+"..."defretrieve(self,query:str,top_k:int=5)->List[Memory]:"""检索相关记忆"""all_memories=self.working_memory+self.short_term+self.long_term# 简单的关键词匹配(实际用向量检索)scored=[]formeminall_memories:score=self._calculate_relevance(query,mem)scored.append((score,mem))scored.sort(key=lambdax:x[0],reverse=True)return[memfor_,meminscored[:top_k]]def_calculate_relevance(self,query:str,memory:Memory)->float:"""计算相关性分数"""# 简单实现:关键词匹配 + 时间衰减 + 重要性keyword_score=sum(1forwordinqueryifwordinmemory.content)time_decay=1.0/(1+(datetime.now()-memory.timestamp).seconds/3600)returnkeyword_score*time_decay*memory.importance

1.2 记忆生命周期

classMemoryLifecycle:"""记忆生命周期管理"""STAGES={"encoding":"编码:将信息转化为可存储的形式","storage":"存储:保存到相应的记忆层","consolidation":"整合:短期→长期的转化","retrieval":"检索:根据需要提取记忆","forgetting":"遗忘:删除不重要的记忆"}defprocess_memory(self,content:str,context:dict)->Memory:"""处理一条新记忆"""# 1. 编码:提取关键信息encoded=self.encode(content,context)# 2. 评估重要性importance=self.evaluate_importance(encoded)# 3. 决定存储位置memory_type=self.decide_storage(importance,context)# 4. 存储memory=self.store(encoded,memory_type,importance)returnmemorydefencode(self,content:str,context:dict)->dict:"""编码:提取关键信息"""return{"content":content,"entities":self.extract_entities(content),"intent":self.detect_intent(content),"sentiment":self.analyze_sentiment(content),"context":context}defevaluate_importance(self,encoded:dict)->float:"""评估重要性"""score=0.5# 包含实体信息更重要ifencoded["entities"]:score+=0.2# 用户偏好很重要if"偏好"inencoded["content"]or"喜欢"inencoded["content"]:score+=0.3# 情绪强烈的内容更重要ifabs(encoded["sentiment"])>0.5:score+=0.1returnmin(score,1.0)defdecide_storage(self,importance:float,context:dict)->str:"""决定存储位置"""ifimportance>0.8:return"long"elifimportance>0.4:return"short"else:return"working"

二、对话历史管理

2.1 滑动窗口策略

fromcollectionsimportdequefromtypingimportTupleclassConversationWindow:"""滑动窗口管理对话历史"""def__init__(self,max_messages:int=20):self.messages=deque(maxlen=max_messages)self.summary=""defadd_message(self,role:str
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 22:35:29

AI编程实战:从安装到第一个项目,手把手教你用Cursor做开发

早上写了篇有关AI编程的理论,具体见公众号今天早上发布的文章《AI编程实战:从安装到第一个项目,手把手教你用Cursor做开发》 下午思考了下,还是需要有一篇如何动手AI编程的实战文章。 见过不少人装了Cursor、下了Claude Code&…

作者头像 李华
网站建设 2026/5/7 22:35:29

Boss-Key终极指南:Windows窗口一键隐藏与隐私保护完全手册

Boss-Key终极指南:Windows窗口一键隐藏与隐私保护完全手册 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在数字化办公时代&a…

作者头像 李华
网站建设 2026/5/7 22:31:42

ChanlunX:通达信自动化缠论分析插件终极指南

ChanlunX:通达信自动化缠论分析插件终极指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 在股票投资领域,技术分析是众多投资者获取市场信号的重要工具。然而,传统的…

作者头像 李华
网站建设 2026/5/7 22:26:35

如何快速掌握缠论分析:通达信用户的终极自动化指南

如何快速掌握缠论分析:通达信用户的终极自动化指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否还在为复杂的缠论技术分析而烦恼?每天花费大量时间手动绘制笔、线段和中枢…

作者头像 李华