2026/5/21 10:15:26
网站建设
项目流程
重庆网站制作套餐,注册电气工程师,凡科网做网站视频,北京工商登记文章目录前言一、先搞懂#xff1a;记忆模块的本质——“信息的存储与调用”二、短期记忆 vs 长期记忆#xff1a;一张表分清核心区别三、记忆模块的3个关键功能#xff08;通俗版拆解#xff09;1. 存储#xff1a;把有用的信息“记下来”2. 检索#xff1a;需要时“调出…文章目录前言一、先搞懂记忆模块的本质——“信息的存储与调用”二、短期记忆 vs 长期记忆一张表分清核心区别三、记忆模块的3个关键功能通俗版拆解1. 存储把有用的信息“记下来”2. 检索需要时“调出来”用3. 清理没用的信息“删掉”四、代码实战写一个“奶茶Agent”的记忆模块五、记忆模块的2个关键实现技巧Python实战版1. 短期记忆的“超时清理”2. 长期记忆的“去重”六、总结记忆模块的核心是什么目前国内还是很缺AI人才的希望更多人能真正加入到AI行业共同促进行业进步。想要系统学习AI知识的朋友可以看看我的教程http://blog.csdn.net/jiangjunshow教程通俗易懂风趣幽默从深度学习基础原理到各领域实战应用都有讲解。前言各位AI入门的小伙伴们前面咱们聊完了Agent的“感知-决策-执行”三大模块——Agent能看、能想、能做了但还有个关键问题如果Agent做完一件事就忘下次遇到同样的情况是不是又得重新折腾一遍就像你第一次买奶茶花了10分钟摸清路线第二次再去总不能还像无头苍蝇一样找路吧这时候就需要“记忆模块”登场了今天咱们就聊聊Agent的“大脑仓库”——记忆模块到底是怎么帮Agent“记住信息”的短期记忆和长期记忆有啥区别还会用Python写个简单的记忆模块代码看完你就全懂啦一、先搞懂记忆模块的本质——“信息的存储与调用”咱们先举个生活例子你去超市买东西刚进门时店员告诉你“牛奶在3排货架”——这个信息你听完就记着买完牛奶就忘了短期记忆你发现“超市每周三打折”这个信息你记了下来以后每周三都来买长期记忆。Agent的记忆模块也是这个逻辑它的核心作用就是存储信息把感知模块收集的信息、决策模块的思考过程、执行模块的结果都存起来按需调用下次遇到类似情况时不用重新分析直接调用之前的记忆提高效率。用一句话总结记忆模块就是Agent的“笔记本知识库”——短期记忆记“临时事”长期记忆存“重要事”。二、短期记忆 vs 长期记忆一张表分清核心区别很多小伙伴会混淆这两种记忆其实它们的用途、特点完全不同咱们用一张大白话表格总结对比维度短期记忆临时记事本长期记忆永久知识库存储内容临时信息比如当前任务的状态、刚接收的感知数据长期有用的信息比如经验、规则、固定结论存储时间短任务结束后就删除或超时自动清理长一直存储除非主动删除容量大小小就像记事本只能写几行字大就像图书馆能存海量信息调用速度快随手就能翻到稍慢需要检索但比重新计算快生活类比记电话号码打完就忘记自己的生日永远不会忘Agent场景买奶茶时记“A店地址”买完就删记“A店奶茶最好喝”以后优先选A店简单说短期记忆管“当下”长期记忆管“未来”。两者配合Agent才能越用越高效三、记忆模块的3个关键功能通俗版拆解不管是短期还是长期记忆核心都离不开这3个功能——存储、检索、清理。咱们用“Agent买奶茶”的场景一步步看1. 存储把有用的信息“记下来”Agent在买奶茶的过程中会产生很多信息记忆模块会筛选出有用的部分存储短期记忆存储当前任务状态“正在去A店的路上”、临时数据A店的实时排队时间“5分钟”长期记忆存储有用的经验“A店的三分糖珍珠奶茶最好喝”“周三买奶茶打8折”、固定规则“A店地址是XX路123号”。注意不是所有信息都要存就像你不会把每天的走路步数都记在脑子里Agent也会筛选“有价值”的信息存储避免浪费资源2. 检索需要时“调出来”用当Agent再次执行任务时会先从记忆里检索相关信息不用重新分析比如第二次买奶茶Agent会先查长期记忆“有没有好喝的奶茶店推荐”→ 直接调出“A店”的信息不用再对比3家店比如买奶茶途中Agent会查短期记忆“我刚才要去哪家店”→ 调出“A店地址”不用重新导航。检索的关键是“快速找到”——就像你在笔记本里翻特定页码Agent会用关键词匹配比如“奶茶店”“A店”快速定位记忆。3. 清理没用的信息“删掉”短期记忆如果一直存会占满“内存”导致Agent反应变慢。所以记忆模块会定期清理短期记忆清理任务完成后自动删除“临时数据”比如排队时间、导航路线长期记忆清理很少主动清理除非信息过期比如“A店倒闭了”就删除相关记忆。这就像你定期整理笔记本删掉没用的草稿只留重要的笔记四、代码实战写一个“奶茶Agent”的记忆模块光说不练假把式咱们用Python写一个包含“短期记忆长期记忆”的模块结合之前的决策、执行模块让Agent真的能“记东西”# 1. 定义记忆模块核心classMemoryModule:def__init__(self):# 短期记忆用字典存储key是记忆名称value是记忆内容过期时间self.short_term_memory{}# 长期记忆用列表存储每个元素是一条永久记忆self.long_term_memory[]# 功能1存储短期记忆可设置过期时间默认任务结束后过期defstore_short_term(self,key,value,expire_after_taskFalse): key: 记忆的关键词比如current_shop value: 记忆内容比如A店 expire_after_task: 是否任务结束后过期默认是 self.short_term_memory[key]{content:value,expire_after_task:expire_after_task}print(f短期记忆存储成功{key}{value})# 功能2存储长期记忆永久存储除非主动删除defstore_long_term(self,content):content: 记忆内容比如A店奶茶最好喝self.long_term_memory.append(content)print(f长期记忆存储成功{content})# 功能3检索记忆先查短期再查长期defretrieve_memory(self,keyword):根据关键词检索记忆# 先查短期记忆forkey,memoryinself.short_term_memory.items():ifkeywordinkeyorkeywordinstr(memory[content]):print(f从短期记忆检索到{key}{memory[content]})returnmemory[content]# 再查长期记忆formemoryinself.long_term_memory:ifkeywordinstr(memory):print(f从长期记忆检索到{memory})returnmemory# 没找到print(f未检索到包含{keyword}的记忆)returnNone# 功能4清理短期记忆任务结束后调用defclear_short_term(self):清理所有标记为任务结束后过期的短期记忆expired_keys[keyforkey,memoryinself.short_term_memory.items()ifmemory[expire_after_task]]forkeyinexpired_keys:delself.short_term_memory[key]print(f短期记忆清理完成已删除{len(expired_keys)}条临时记忆)# 2. 复用之前的决策模块和执行模块核心代码defdecision_module(shops,target,memory_module):# 先检索长期记忆有没有推荐的奶茶店recommended_shopmemory_module.retrieve_memory(推荐奶茶店)ifrecommended_shop:# 直接用记忆中的推荐不用重新筛选print(f决策模块从记忆中获取推荐直接选择{recommended_shop})forshopinshops:ifshop[name]recommended_shop:returnshop# 没有记忆按之前的规则筛选best_choiceNoneforshopinshops:core_okall(reqin[shop[sugar],shop[topping]]forreqintarget[core])ifnotcore_ok:continuesecondary_okshop[price]int(target[secondary].split( )[2])ifnotsecondary_ok:continuebottom_line_okshop[time]int(target[bottom_line].split( )[2])ifbottom_line_ok:best_choiceshopbreakreturnbest_choice# 简化的执行模块重点看记忆交互classExecutionModule:defexecute(self,shop,memory_module):# 执行过程中存储短期记忆当前任务状态memory_module.store_short_term(current_task,f正在购买{shop[name]}的奶茶)memory_module.store_short_term(current_shop_address,shop[address])print(f\n执行模块前往{shop[name]}地址{shop[address]})print(f执行模块购买{shop[sugar]}加{shop[topping]}的奶茶支付{shop[price]}元)print(f执行模块任务完成)# 任务完成后存储长期记忆有用的经验memory_module.store_long_term(f推荐奶茶店{shop[name]})memory_module.store_long_term(f{shop[name]}的{shop[sugar]}{shop[topping]}奶茶价格{shop[price]}元)# 清理短期记忆memory_module.clear_short_term()# 3. 主程序模拟两次买奶茶测试记忆功能if__name____main__:# 初始化模块memory_moduleMemoryModule()execution_moduleExecutionModule()# 目标和奶茶店信息target{core:[三分糖,珍珠],secondary:price 20,bottom_line:time 15}milk_tea_shops[{name:A店,sugar:三分糖,topping:珍珠,price:18,time:10,address:XX路123号},{name:B店,sugar:全糖,topping:珍珠,price:15,time:5,address:XX路456号},{name:C店,sugar:三分糖,topping:珍珠,price:22,time:8,address:XX路789号}]# 第一次买奶茶没有记忆需要决策筛选print( 第一次买奶茶 )decision_resultdecision_module(milk_tea_shops,target,memory_module)execution_module.execute(decision_result,memory_module)# 第二次买奶茶有记忆直接调用print(\n\n 第二次买奶茶 )decision_resultdecision_module(milk_tea_shops,target,memory_module)execution_module.execute(decision_result,memory_module)# 查看最终的长期记忆print(\n\n Agent的长期记忆库 )fori,memoryinenumerate(memory_module.long_term_memory,1):print(f{i}.{memory})运行这段代码输出结果如下 第一次买奶茶 未检索到包含推荐奶茶店的记忆 短期记忆存储成功current_task 正在购买A店的奶茶 短期记忆存储成功current_shop_address XX路123号 执行模块前往A店地址XX路123号 执行模块购买三分糖加珍珠的奶茶支付18元 执行模块任务完成 长期记忆存储成功推荐奶茶店A店 长期记忆存储成功A店的三分糖珍珠奶茶价格18元 短期记忆清理完成已删除2条临时记忆 第二次买奶茶 从长期记忆检索到推荐奶茶店A店 决策模块从记忆中获取推荐直接选择A店 短期记忆存储成功current_task 正在购买A店的奶茶 短期记忆存储成功current_shop_address XX路123号 执行模块前往A店地址XX路123号 执行模块购买三分糖加珍珠的奶茶支付18元 执行模块任务完成 长期记忆存储成功推荐奶茶店A店 长期记忆存储成功A店的三分糖珍珠奶茶价格18元 短期记忆清理完成已删除2条临时记忆 Agent的长期记忆库 1. 推荐奶茶店A店 2. A店的三分糖珍珠奶茶价格18元 3. 推荐奶茶店A店 4. A店的三分糖珍珠奶茶价格18元看第二次买奶茶时Agent直接调用了长期记忆里的“推荐奶茶店”不用再重新对比3家店效率大大提高 这就是记忆模块的核心价值五、记忆模块的2个关键实现技巧Python实战版刚才的代码是简化版实际开发中记忆模块还有两个很重要的实现技巧咱们补充一下1. 短期记忆的“超时清理”刚才的短期记忆是“任务结束后清理”但实际场景中有些短期记忆需要“超时自动清理”比如Agent记着“当前排队时间5分钟”10分钟后这个信息就过期了。咱们给短期记忆加个超时功能修改代码如下importtimeclassMemoryModule:def__init__(self):self.short_term_memory{}# key: 记忆名称value: {content, expire_after_task, expire_time}self.long_term_memory[]# 存储短期记忆支持超时时间单位秒defstore_short_term(self,key,value,expire_after_taskFalse,expire_secondsNone):expire_timetime.time()expire_secondsifexpire_secondselseNoneself.short_term_memory[key]{content:value,expire_after_task:expire_after_task,expire_time:expire_time}print(f短期记忆存储成功{key}{value}超时时间{expire_seconds}秒)# 检索时先过滤过期的短期记忆defretrieve_memory(self,keyword):# 先清理过期的短期记忆current_timetime.time()expired_keys[]forkey,memoryinself.short_term_memory.items():ifmemory[expire_time]andcurrent_timememory[expire_time]:expired_keys.append(key)forkeyinexpired_keys:delself.short_term_memory[key]print(f短期记忆已过期{key})# 再检索# ... 后面的检索逻辑和之前一样这样一来设置了expire_seconds60的短期记忆1分钟后会自动过期清理避免存储无效信息2. 长期记忆的“去重”刚才的代码中Agent每次买完奶茶都会存储一次长期记忆导致重复比如两次买A店长期记忆里有两条一样的“推荐奶茶店A店”。实际开发中需要给长期记忆加去重功能classMemoryModule:# ... 其他代码不变 ...defstore_long_term(self,content):# 去重如果记忆已存在就不重复存储ifcontentnotinself.long_term_memory:self.long_term_memory.append(content)print(f长期记忆存储成功{content})else:print(f长期记忆已存在{content}无需重复存储)这样修改后重复的记忆就不会被存储长期记忆库会更简洁六、总结记忆模块的核心是什么其实记忆模块的核心很简单“分类存储高效调用智能清理”。分类存储短期记临时信息长期存重要经验高效调用需要时快速检索不用重复劳动智能清理及时删除无用信息节省资源。有了记忆模块Agent就不再是“做完就忘的笨蛋”而是能“积累经验、越用越聪明”的智能体 比如导航Agent记着“哪条路不堵车”推荐Agent记着“你的口味偏好”办公Agent记着“你的常用文档位置”。到这里Agent的四大核心模块感知、决策、执行、记忆就全部讲完了这四个模块配合起来就构成了一个基础的智能体框架如果觉得这篇文章好懂、实用别忘了点赞、转发让更多人一起入门AI 有任何问题评论区留言交流呀下一节咱们聊聊Agent的工具调用模块看看Agent是怎么调用API、操作文件、甚至调用其他AI模型的敬请期待