当前位置: 首页 > news >正文

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
http://www.jsqmd.com/news/772946/

相关文章:

  • JavaScript中Object-getOwnPropertySymbols获取方法
  • 别再死记硬背三环了!用Arduino+伺服电机做个机械臂,实战理解位置、速度、力矩模式
  • 血清替代物(人血小板裂解液)从工艺到细胞扩增性能替代FBS的可行性分析
  • 从硬件到解决方案:2026年全球人形机器人及智能机器狗二次开发服务商全景解析 - 速递信息
  • WarcraftHelper:魔兽争霸3终极兼容性修复指南,让经典游戏在现代电脑流畅运行
  • 利用Taotoken多模型聚合能力为AIGC应用动态选择最佳性价比模型
  • RAG系统优化实战
  • Linux 自由诱惑大,但别冲动,切换前自问这5个问题
  • 2026郑州装修公司全包价格性价比最高排名推荐与省钱攻略 - 速递信息
  • SPSSAU文本分析新手入门:从数据上传到生成第一个词云图的全流程指南
  • 论文解读:生成式智能体让25个AI小人自己组织了一场情人节派对
  • Universal Split Screen:单机多人游戏解决方案的技术实现与应用
  • 临床数据说话!斐萃 AKK 小银瓶以菌株实力定义行业标准 - 速递信息
  • 探索模型广场如何帮助开发者根据任务选择合适的大模型
  • 如何让2008-2018年的老款Mac焕发新生:OpenCore Legacy Patcher终极指南
  • DevOps工程师转型AI架构师:18个月实战路线与平台构建指南
  • 2026全年度好口碑主流无纸记录仪厂家靠谱老品牌!JINKO金科4款代表型号大比评!附无纸记录仪常见问题解答 (FAQ) - 奋斗者888
  • YOLO 系列:半监督学习落地:结合 FixMatch 范式,用少量标注数据训练 YOLOv11,降低标注成本
  • ECC椭圆曲线加密
  • 从PyTorch到TensorRT:手把手教你将训练好的模型转成.engine文件(附完整代码)
  • 拒绝知识孤岛:基于 Knota CLI 构建可编程的“第二大脑”集成方案
  • 实战指南:MeteoInfo开源项目中GRIB转ARL格式转换问题的完整解决方案
  • 基于大语言模型的智能体协作框架:从架构设计到工程实践
  • 将Switch游戏画面无线传输到电脑:SysDVR完整实践指南
  • 2026全年度好口碑主流无纸记录仪厂家靠谱老品牌!JINKO金科4款代表型号大比评!无纸记录仪常见问题解答 (FAQ) - 奋斗者888
  • 燕京啤酒:复兴路上的“高光”与“隐忧”
  • 在职法考没时间?揽星法考APP,碎片化时间也能轻松备考 - 速递信息
  • Taotoken的按token计费模式如何让实验性项目的成本更可控
  • LangGraph多Agent协作系统实战
  • AI辅助开发实战:从Vibecoding到Speccoding的高效工作流