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

Agent 中的记忆系统:短期记忆、长期知识库与情境缓存最佳实践

Agent 中的记忆系统短期记忆、长期知识库与情境缓存最佳实践摘要/引言开门见山当我们说AI Agent要“有记忆”时我们在说什么你有没有过这样的经历和OpenAI的ChatGPT连续聊了20轮Python爬虫优化突然它忘了你之前提到的那个带验证码的B站弹幕接口、那个用来处理反爬虫的ua池配置文件路径、甚至忘了你是要爬取**《三体》动画全季评论词云而非弹幕词频排序**再比如你部署了一个金融咨询Agent在公司内部昨天财务总监问了它Q3季度现金流波动的阈值预警公式今天副总裁又问同样的问题它却从头开始从央行公开市场政策的术语解释推导浪费了整整5分钟副总裁的宝贵时间更糟的是当财务总监和副总裁一起问这个阈值预警公式在他们各自部门生产采购部销售回款部的调整建议时它连两个部门昨天和今天单独咨询的业务细节比如生产采购部Q3新增了东南亚的钛材供应商、销售回款部调整了长三角大客户的30%预付款比例到60%都完全记不起来。这不是大语言模型LLM本身的“智商”问题——毕竟GPT-4o mini在数学推理、代码生成上已经能打985高校计算机系大三学生的水平——这是Agent架构中“缺失的核心组件”一个设计合理、分层清晰、检索高效、更新及时的记忆系统Memory System。问题陈述为什么当前大部分AI Agent都“健忘”且“低效”如果把Agent比作一个“虚拟的职场助理”那么LLM就是它的“大脑前额叶”——负责逻辑推理、语言理解、决策生成但人脑的前额叶工作内存Working MemoryWM容量是有限的Miller的“神奇数字7±2”虽然现代神经科学修正为“4±1”语义组块但对于大段代码、多轮历史对话、大量结构化业务数据来说仍然杯水车薪。为了弥补这个缺陷人脑进化出了海马体短期记忆→长期记忆的转化器、大脑皮层长期存储区语义记忆、情景记忆、程序记忆、甚至是肌肉记忆对应Agent的“工具记忆/执行历史”。但在当前的Agent开发实践中大部分开发者要么是“简单粗暴派”直接把所有能找到的历史对话、业务文档都塞进LLM的上下文窗口Context Window里指望LLM自己“筛选”有用信息——结果要么是上下文窗口溢出比如Claude 3 Opus的200K token虽然能装下很多但单个Agent的运行成本会飙升到每分钟几十甚至上百美元完全不适合大规模商业化部署要么是LLM被无关信息淹没比如把整个金融行业2024年的半年报都塞进去财务总监问的只是本公司钛材供应商的账期问题LLM却给你分析了全球钛白粉价格走势要么是“懒省事派”干脆只用LLM的原生对话历史通常只有最近的5-10轮导致Agent完全没有长期业务知识、没有多用户协作的共享记忆、甚至连单个用户多轮任务的上下文都连不起来还有一部分开发者是“入门尝试派”知道要加向量数据库Vector DB做长期记忆但要么不知道怎么分层存储比如把情景记忆、语义记忆、程序记忆混在同一个向量库的同一个collection里要么不知道怎么高效检索比如只用余弦相似度检索完全忽略时间衰减、相关性衰减、用户权限、任务优先级这些关键因素要么不知道怎么更新维护比如新的业务文档上线了旧的文档没有软删除/标记过期导致Agent反复引用过时信息。核心价值掌握Agent记忆系统的分层架构与最佳实践你能得到什么如果你能按照本文介绍的**“三层记忆金字塔模型Three-Layer Memory Pyramid Model”**——短期记忆STM、情境缓存Situation Cache属于STM的优化扩展、长期知识库LTM又分为语义记忆、情景记忆、程序记忆、工具记忆四个子模块——来设计和实现你的AI Agent你将能够大幅降低运行成本不再需要把所有信息都塞进昂贵的大上下文窗口LLM里而是用向量数据库轻量级关键词检索Hybrid Search筛选出最相关的1K-5K token信息单个Agent的推理成本可以降低90%以上显著提升Agent的“智力连续性”和“任务连贯性”单个用户多轮对话的历史不会因为超过5轮就丢失跨用户、跨会话的共享业务知识可以随时调用Agent可以像真正的职场助理一样“理解上下文、记住承诺、追踪进度”有效避免“过时信息引用”和“无关信息干扰”通过时间衰减算法、过期标记机制、相关性重排序算法确保Agent只引用最新、最相关、最符合用户权限的信息支持复杂的多Agent协作场景比如一个“产品研发Agent团队”——产品经理Agent负责提需求、架构师Agent负责设计方案、前端工程师Agent负责写UI代码、后端工程师Agent负责写API代码——它们可以通过共享的“团队记忆库Team Memory”来同步需求文档、架构设计图、代码评审意见、测试报告等信息无需人工干预就能完成从需求到上线的全流程协作。文章概述本文将要带你走过的“Agent记忆系统开发之旅”本文将按照**“理论基础→架构设计→核心实现→最佳实践→未来展望”**的逻辑顺序循序渐进地讲解Agent记忆系统的所有核心内容第一部分Agent记忆系统的理论基础首先我们会回顾认知科学中的记忆模型Atkinson-Shiffrin的三阶段记忆模型、Baddeley的工作记忆模型、Tulving的长时记忆分类为Agent记忆系统的设计提供“仿生学灵感”然后我们会定义Agent记忆系统的核心概念短期记忆、情境缓存、长期知识库、语义记忆、情景记忆、程序记忆、工具记忆、检索、重排序、更新、维护接着我们会用概念对比表、ER实体关系图、交互关系图来梳理这些概念之间的关系最后我们会介绍Agent记忆系统中用到的核心数学模型余弦相似度、点积相似度、欧氏距离、时间衰减函数、相关性重排序的BM25算法和RRF融合算法。第二部分Agent记忆系统的架构设计首先我们会提出本文的核心架构——三层记忆金字塔模型的Agent实现版然后我们会分别讲解每个记忆层的功能设计、输入输出设计、存储介质选型接着我们会用Mermaid架构图来展示整个记忆系统的整体架构和数据流向最后我们会介绍Agent记忆系统的接口设计检索接口、更新接口、删除接口、同步接口。第三部分Agent记忆系统的核心实现PythonLangChainChromaDB首先我们会列出实现Agent记忆系统所需的环境和工具Python 3.10、LangChain 0.1.x、ChromaDB 0.4.x、OpenAI API Key/Claude API Key/本地开源LLM然后我们会用Mermaid流程图来展示每个记忆层的核心实现流程接着我们会提供每个记忆层的完整Python源代码带有详细的注释最后我们会用一个实际的场景案例个人金融助理Agent来演示整个记忆系统的使用方法。第四部分Agent记忆系统的最佳实践首先我们会分享短期记忆的最佳实践历史对话的压缩方式、上下文窗口的动态调整、记忆的“遗忘机制”然后我们会分享情境缓存的最佳实践缓存的触发条件、缓存的更新策略、缓存的过期机制接着我们会分享长期知识库的最佳实践文档的预处理方式、向量模型的选型、检索策略的设计、更新维护的流程再然后我们会分享多Agent协作场景下的记忆系统最佳实践团队记忆库的设计、权限控制的机制、记忆同步的策略最后我们会分享Agent记忆系统的性能优化最佳实践向量数据库的索引优化、检索结果的缓存优化、轻量级关键词检索的实现。第五部分Agent记忆系统的行业发展与未来展望首先我们会用Markdown表格来梳理Agent记忆系统的问题演变发展历史从早期的“无记忆Agent”到现在的“分层记忆Agent”再到未来的“自主进化记忆Agent”然后我们会讨论Agent记忆系统的当前研究热点自适应检索、元记忆、神经符号记忆、终身学习记忆最后我们会展望Agent记忆系统的未来发展趋势与脑机接口的结合、与区块链的结合、通用人工智能AGI的核心组件。第六部分本章小结其实是全文小结我们会简要回顾本文的主要内容我们会再次强调掌握Agent记忆系统分层架构与最佳实践的重要性我们会提出一个开放性问题以引发讨论我们会邀请读者在评论区分享他们的想法或问题我们会列出参考文献/延伸阅读我们会附上作者简介。一、 Agent记忆系统的理论基础1.1 认知科学中的记忆模型仿生学灵感的来源在设计Agent记忆系统之前我们有必要先了解一下人脑的记忆机制——毕竟人脑是目前已知的最强大、最高效的“通用智能记忆系统”。认知科学家们经过几十年的研究提出了多个经典的记忆模型这些模型为Agent记忆系统的设计提供了直接的“仿生学灵感”。1.1.1 Atkinson-Shiffrin的三阶段记忆模型1968Atkinson和Shiffrin在1968年提出了第一个被广泛接受的记忆模型——三阶段记忆模型Three-Stage Memory Model也被称为“模态模型Modal Model”。这个模型将人脑的记忆分为三个连续的阶段感觉记忆Sensory Memory也叫“瞬时记忆”是记忆系统的第一个入口。感觉记忆的容量非常大几乎可以存储所有的感官输入信息但存储时间非常短视觉感觉记忆约为0.25-1秒听觉感觉记忆约为2-4秒。感觉记忆的作用是“暂时保留感官输入信息以便大脑有时间筛选出有用的信息进行进一步处理”。短期记忆Short-Term MemorySTM也叫“工作记忆的前身”是记忆系统的第二个阶段。短期记忆的容量非常有限Miller的“神奇数字7±2”语义组块比如你可以同时记住7个左右的随机数字、7个左右的单词、7个左右的电话号码但存储时间比感觉记忆长一些约为15-30秒如果不进行复述Rehearsal的话。短期记忆的作用是“暂时存储和处理正在进行的任务所需的信息”。长期记忆Long-Term MemoryLTM是记忆系统的第三个阶段也是最后一个阶段。长期记忆的容量几乎是无限的理论上可以存储人一生中所有的经历、知识、技能存储时间也非常长从几分钟到几十年甚至一辈子。长期记忆的作用是“永久存储已经处理过的、对未来有用的信息”。Atkinson-Shiffrin的三阶段记忆模型还提出了记忆的转化机制感觉记忆中的信息只有通过**注意Attention**才能转化为短期记忆短期记忆中的信息只有通过**复述Maintenance Rehearsal机械复述或精细复述Elaborative Rehearsal将新信息与已有的长期记忆联系起来**才能转化为长期记忆长期记忆中的信息可以通过**提取Retrieval**回到短期记忆中进行处理。虽然现代神经科学已经对Atkinson-Shiffrin的三阶段记忆模型进行了一些修正比如提出了“工作记忆模型”来替代“短期记忆的前身”的说法但这个模型的核心思想——分层存储、注意力筛选、复述转化、提取使用——仍然是Agent记忆系统设计的基础。1.1.2 Baddeley的工作记忆模型19742000修订版Atkinson-Shiffrin的三阶段记忆模型将短期记忆视为一个“单一的、被动的存储单元”但Baddeley和Hitch在1974年通过实验发现短期记忆实际上是一个**“复杂的、主动的加工系统”——它不仅可以存储信息还可以同时处理多个任务的信息。于是他们提出了工作记忆模型Working Memory Model**并在2000年进行了修订。2000年修订版的Baddeley工作记忆模型包括四个子组件语音回路Phonological Loop负责处理和存储语音/听觉信息包括两个子部分语音存储Phonological Store也叫“内耳”可以存储语音信息约为1.5-2秒发音复述装置Articulatory Rehearsal Process也叫“内嘴”可以通过无声的复述来刷新语音存储中的信息或者将视觉信息转化为语音信息存储到语音存储中。视觉空间模板Visuospatial Sketchpad负责处理和存储视觉/空间信息包括两个子部分视觉缓存Visual Cache负责存储视觉形状、颜色等信息内部抄写器Inner Scribe负责处理空间位置、运动轨迹等信息。情景缓冲器Episodic Buffer2000年修订版新增的子组件负责整合语音回路、视觉空间模板和长期记忆中的信息形成一个“连贯的情景表征”。情景缓冲器的容量约为4个语义组块存储时间也比较短。中央执行系统Central Executive System是工作记忆模型的“核心指挥官”负责注意力分配、任务切换、子组件协调等高级认知功能。中央执行系统本身不存储信息它只是一个“控制中心”。Baddeley的工作记忆模型为Agent记忆系统的**短期记忆优化即本文提出的“情境缓存”**提供了直接的灵感我们可以将Agent的短期记忆分为“对话历史缓存”对应语音回路、“视觉/图表信息缓存”对应视觉空间模板、“当前任务情景缓冲器”对应情景缓冲器和“中央控制模块”对应中央执行系统从而让Agent的短期记忆不仅可以存储信息还可以同时处理多个任务的信息、整合来自不同来源的信息。1.1.3 Tulving的长时记忆分类19721985修订版Atkinson-Shiffrin的三阶段记忆模型将长期记忆视为一个“单一的存储单元”但Tulving在1972年通过实验发现长期记忆实际上可以分为两个独立的子系统——语义记忆Semantic Memory和情景记忆Episodic Memory并在1985年进行了修订新增了**程序记忆Procedural Memory**的分类不过程序记忆通常被认为是“内隐记忆Implicit Memory”的一部分而语义记忆和情景记忆通常被认为是“外显记忆Explicit Memory”的一部分。2000年之后认知科学家们又将Tulving的长时记忆分类扩展为四个子系统外显记忆内隐记忆的结合外显记忆Explicit Memory也叫“陈述性记忆Declarative Memory”是指可以有意识地回忆起来的记忆包括两个子部分语义记忆Semantic Memory是指关于“世界的一般知识”的记忆比如“北京是中国的首都”、“235”、“Python是一种解释型编程语言”。语义记忆不依赖于特定的时间和地点它是“客观的、通用的”。情景记忆Episodic Memory是指关于“个人经历的特定事件”的记忆比如“我昨天下午3点在星巴克和张三喝了咖啡讨论了Agent记忆系统的设计方案”、“我第一次用Python写爬虫是在2020年的冬天爬取了豆瓣电影Top250的信息”。情景记忆依赖于特定的时间和地点它是“主观的、个人的”。内隐记忆Implicit Memory也叫“非陈述性记忆Non-Declarative Memory”是指不能有意识地回忆起来但可以通过行为表现出来的记忆包括两个子部分程序记忆Procedural Memory是指关于“如何做事情”的记忆比如“如何骑自行车”、“如何用Python写一个for循环”、“如何处理反爬虫的验证码”。程序记忆通常是通过“反复练习”获得的一旦获得就很难忘记。启动效应Priming Effect是指“之前接触过的信息会对之后的信息处理产生影响”的现象比如“如果你之前看到过‘医生’这个词那么之后你看到‘护士’这个词的反应速度会比看到‘面包’这个词的反应速度快”。Tulving的长时记忆分类为Agent记忆系统的长期知识库设计提供了直接的灵感我们可以将Agent的长期知识库分为“语义记忆库”、“情景记忆库”、“程序记忆库”和“工具记忆库对应启动效应和程序记忆的结合”四个子模块从而让Agent的长期知识库不仅可以存储客观的通用知识还可以存储主观的个人经历、可执行的程序技能和可复用的工具调用历史。1.2 Agent记忆系统的核心概念定义清楚才能设计合理在了解了认知科学中的记忆模型之后我们需要定义清楚Agent记忆系统的核心概念——只有定义清楚了这些概念我们才能设计出合理的Agent记忆系统。1.2.1 短期记忆Short-Term MemorySTM核心概念Agent的短期记忆是指暂时存储和处理当前正在进行的会话/任务所需的信息的记忆层。问题背景LLM的原生上下文窗口虽然可以存储一些信息但一方面大上下文窗口LLM的运行成本非常高另一方面LLM被无关信息淹没的风险也非常大。因此我们需要一个独立于LLM原生上下文窗口的、容量可控的、成本低廉的短期记忆层。问题描述如何设计一个短期记忆层让它可以存储当前会话/任务所需的信息同时又不会占用太多的LLM上下文窗口问题解决将短期记忆层分为“原始对话历史存储区”和“压缩对话历史存储区”其中“压缩对话历史存储区”的内容会被定期送入LLM的原生上下文窗口中进行处理。边界与外延边界短期记忆层的存储容量通常被限制在“10-50轮对话”或“5K-20K token”之间具体数值取决于LLM的原生上下文窗口大小和任务的复杂程度短期记忆层的存储时间通常被限制在“当前会话结束”或“当前任务完成”之后的“1-24小时”之间短期记忆层的信息通常不会直接存储到长期知识库中除非通过“主动复述”或“任务完成后的总结归档”机制。外延短期记忆层的优化扩展是“情境缓存Situation Cache”我们会在1.2.2节详细介绍。1.2.2 情境缓存Situation Cache核心概念情境缓存是Agent短期记忆的优化扩展是指暂时存储和处理当前正在进行的会话/任务的“核心情景表征”的记忆层——这里的“核心情景表征”是指整合了“对话历史压缩内容”、“当前任务的目标/状态/进度”、“已调用的工具的输入输出”、“用户的基本信息/偏好/权限”、“当前时间/地点/环境”等信息的一个“连贯的、结构化的、易于检索的”数据结构。问题背景Baddeley的工作记忆模型告诉我们人脑的短期记忆不仅可以存储信息还可以同时处理多个任务的信息、整合来自不同来源的信息——但传统的Agent短期记忆层只是简单的对话历史列表显然做不到这一点。因此我们需要一个类似Baddeley情景缓冲器的情境缓存层。问题描述如何设计一个情境缓存层让它可以整合来自不同来源的信息形成一个连贯的核心情景表征同时又可以快速更新和检索问题解决将情境缓存层设计为一个**“结构化的JSON对象”或“知识图谱Knowledge Graph的子图”**其中包含了当前会话/任务的所有核心情景信息同时使用“事件驱动Event-Driven”的机制来更新情境缓存层——每当发生一个“重要事件”比如用户输入了新的消息、Agent调用了工具、Agent生成了新的回复、任务的状态发生了变化就更新情境缓存层中的相应内容。边界与外延边界情境缓存层的存储容量通常被限制在“1K-5K token”之间情境缓存层的存储时间通常被限制在“当前会话结束”或“当前任务完成”之后的“1-24小时”之间情境缓存层的信息通常会在“任务完成后的总结归档”机制中被提取出来作为“情景记忆”的一部分存储到长期知识库中。外延情境缓存层可以进一步扩展为“多任务情境缓存层”支持Agent同时处理多个任务的信息情境缓存层也可以进一步扩展为“多用户情境缓存层”支持多用户协作场景下的核心情景表征共享。1.2.3 长期知识库Long-Term MemoryLTM核心概念Agent的长期知识库是指永久或长期存储已经处理过的、对未来有用的信息的记忆层。问题背景人脑的长期记忆容量几乎是无限的可以存储人一生中所有的经历、知识、技能——但传统的Agent要么没有长期知识库要么只是用一个简单的向量数据库存储所有的信息没有分层、没有分类、没有高效的检索和更新机制。因此我们需要一个类似人脑长期记忆的、分层分类的、容量几乎无限的、检索高效的、更新及时的长期知识库。问题描述如何设计一个长期知识库让它可以分层分类存储不同类型的信息同时又可以高效检索、及时更新、避免过时信息引用和无关信息干扰问题解决将长期知识库分为“语义记忆库”、“情景记忆库”、“程序记忆库”和“工具记忆库”四个子模块使用“混合检索Hybrid Search”策略向量相似度检索轻量级关键词检索来检索信息使用“时间衰减算法”、“过期标记机制”、“相关性重排序算法”来筛选和排序检索结果使用“事件驱动”的机制来更新长期知识库——每当有新的信息需要存储比如任务完成后的总结归档、新的业务文档上线、用户主动添加的知识就更新长期知识库中的相应内容。边界与外延边界长期知识库的存储容量几乎是无限的取决于存储介质的容量长期知识库的存储时间可以是“永久”的也可以是“根据业务需求设置的过期时间”长期知识库的信息通常需要通过“检索”机制才能回到短期记忆层中进行处理。外延长期知识库可以进一步扩展为“团队记忆库Team Memory”支持多Agent协作场景下的信息共享长期知识库也可以进一步扩展为“公共知识图谱Public Knowledge Graph”支持多个不同的Agent共享通用的知识长期知识库还可以进一步扩展为“终身学习记忆库Lifelong Learning Memory”支持Agent自主学习和更新知识。1.2.4 语义记忆库Semantic Memory Base核心概念语义记忆库是长期知识库的第一个子模块是指存储客观的、通用的、不依赖于特定时间和地点的知识的记忆库。问题背景Agent需要具备一些“世界的一般知识”才能正常工作——比如一个金融咨询Agent需要知道“GDP是什么”、“CPI是什么”、“利率和汇率的关系是什么”——但这些知识如果都通过LLM的预训练数据来获取一方面LLM的预训练数据可能不是最新的比如GPT-4o的预训练数据截止到2024年5月它不知道2024年6月之后的央行利率调整信息另一方面Agent可能需要一些“特定领域的专业知识”比如本公司的财务制度、本公司的产品信息这些知识通常不会出现在LLM的预训练数据中。因此我们需要一个独立于LLM预训练数据的、可更新的、可定制的语义记忆库。问题描述如何设计一个语义记忆库让它可以存储客观的、通用的、特定领域的专业知识同时又可以高效检索、及时更新问题解决将语义记忆库中的知识分为“通用知识General Knowledge”和“特定领域知识Domain-Specific Knowledge”两个子部分使用“向量数据库”来存储语义记忆库中的知识——将每一条知识可以是一个句子、一个段落、一个文档的片段转化为一个“向量嵌入Vector Embedding”然后存储到向量数据库中使用“混合检索”策略来检索语义记忆库中的知识使用“版本控制Version Control”机制来管理语义记忆库中的知识——每当有新的知识版本上线就标记旧的知识版本为“过期”但不删除以便追溯。边界与外延边界语义记忆库中的知识是“客观的、通用的、不依赖于特定时间和地点的”语义记忆库中的知识通常是“静态的”或者“更新频率较低的”比如本公司的财务制度可能每年更新一次而央行的利率调整信息可能每月更新一次语义记忆库中的知识通常是“结构化的”或者“半结构化的”比如可以用JSON、XML、Markdown等格式存储。外延语义记忆库可以进一步扩展为“知识图谱Knowledge Graph”支持更复杂的知识推理比如“张三是李四的经理李四是王五的同事那么张三和王五是什么关系”语义记忆库也可以进一步与“公共知识图谱比如Wikidata、DBpedia”集成获取更多的通用知识。1.2.5 情景记忆库Episodic Memory Base核心概念情景记忆库是长期知识库的第二个子模块是指存储主观的、个人的、依赖于特定时间和地点的“事件/经历”的记忆库。问题背景Agent需要记住“与用户的每一次交互”、“每一次完成的任务”、“每一次犯的错误”才能更好地为用户服务——比如一个个人金融助理Agent需要记住“用户昨天下午3点问了Q3季度现金流波动的阈值预警公式”、“用户上个月5号买了10万元的沪深300指数基金”、“用户不喜欢风险太高的投资产品”——但这些信息如果都通过短期记忆层来存储显然会很快丢失。因此我们需要一个独立于短期记忆层的、可检索的、可更新的情景记忆库。问题描述如何设计一个情景记忆库让它可以存储主观的、个人的、依赖于特定时间和地点的事件/经历同时又可以高效检索、及时更新、避免过时信息引用问题解决将情景记忆库中的每一个“事件/经历”存储为一个“结构化的JSON对象”其中包含了“事件ID”、“用户ID”、“会话ID”、“任务ID”、“事件类型”、“事件时间”、“事件地点如果有的话”、“事件内容可以是文本、图片、音频、视频等”、“事件的重要性评分”、“事件的标签”等字段使用“向量数据库”来存储事件内容的向量嵌入同时使用“关系型数据库比如MySQL、PostgreSQL”来存储事件的结构化元数据使用“混合检索”策略来检索情景记忆库中的信息——先用关系型数据库筛选出符合“用户ID”、“时间范围”、“事件类型”、“标签”等条件的事件然后用向量数据库筛选出符合“内容相似度”条件的事件最后用“相关性重排序算法”和“时间衰减算法”来排序检索结果使用“过期标记机制”来管理情景记忆库中的信息——比如可以设置“用户个人的消费记录”永久保存而“用户与Agent的普通闲聊记录”保存1年之后自动标记为“过期”并软删除。边界与外延边界情景记忆库中的信息是“主观的、个人的、依赖于特定时间和地点的”情景记忆库中的信息通常是“动态的”或者“更新频率较高的”比如用户与Agent的每一次交互都会产生一个新的事件情景记忆库中的信息通常需要“用户权限控制”——比如一个公司内部的金融咨询Agent财务总监只能查看自己和自己部门员工的情景记忆而不能查看副总裁的情景记忆。外延情景记忆库可以进一步扩展为“多用户情景记忆库”支持多用户协作场景下的事件/经历共享情景记忆库也可以进一步扩展为“情感记忆库Emotional Memory Base”存储用户在每一次交互中的情感状态比如“开心”、“生气”、“焦虑”、“满意”从而让Agent可以更好地“共情”用户情景记忆库还可以进一步与“日历应用”、“邮件应用”、“笔记应用”等第三方应用集成获取更多的用户个人经历信息。1.2.6 程序记忆库Procedural Memory Base核心概念程序记忆库是长期知识库的第三个子模块是指存储“如何做事情”的“可执行的程序/步骤/规则/模板”的记忆库。问题背景Agent需要具备一些“可执行的程序/步骤/规则/模板”才能更好地完成任务——比如一个个人金融助理Agent需要知道“如何查询用户的银行账户余额”、“如何计算用户的投资收益率”、“如何给用户生成一份月度财务报告”——但这些程序/步骤/规则/模板如果都通过LLM的推理来生成一方面LLM的推理可能会出错比如计算投资收益率的公式可能会写错另一方面LLM的推理成本也比较高、推理时间也比较长。因此我们需要一个独立于LLM推理的、可验证的、可复用的、成本低廉的程序记忆库。问题描述如何设计一个程序记忆库让它可以存储可执行的程序/步骤/规则/模板同时又可以高效检索、及时更新、可验证、可复用问题解决将程序记忆库中的内容分为“步骤型程序Step-by-Step Procedure”、“规则型程序Rule-Based Procedure”、“模板型程序Template-Based Procedure”和“代码型程序Code-Based Procedure”四个子部分使用“关系型数据库”来存储程序的结构化元数据比如“程序ID”、“程序名称”、“程序类型”、“适用场景”、“输入参数”、“输出参数”、“验证状态”、“创建时间”、“更新时间”、“创建者”、“更新者”等同时使用“文件系统”或“对象存储比如AWS S3、阿里云OSS”来存储程序的具体内容比如步骤型程序可以用Markdown格式存储规则型程序可以用JSON或YAML格式存储模板型程序可以用Jinja2或Mustache格式存储代码型程序可以用Python或JavaScript格式存储使用“轻量级关键词检索”或“语义相似度检索”来检索程序记忆库中的内容——比如可以用“适用场景”、“程序名称”、“输入参数”、“输出参数”等关键词进行检索也可以用“用户的当前任务描述”转化为向量嵌入后进行语义相似度检索使用“版本控制”机制来管理程序记忆库中的内容——每当有新的程序版本上线就需要经过“验证”比如可以用单元测试、集成测试、人工审核等方式进行验证才能被Agent使用使用“权限控制”机制来管理程序记忆库中的内容——比如只有“管理员”才能创建和更新程序而“普通Agent”只能检索和使用已验证的程序。边界与外延边界程序记忆库中的内容是“可执行的、可验证的、可复用的”程序记忆库中的内容通常是“静态的”或者“更新频率较低的”比如“如何给用户生成一份月度财务报告”的模板可能每月更新一次而“如何计算用户的投资收益率”的公式可能永远不会更新程序记忆库中的内容通常需要“验证”才能被Agent使用——避免Agent执行错误的程序。外延程序记忆库可以进一步扩展为“Agent技能库Agent Skill Library”支持Agent自主学习和获取新的技能程序记忆库也可以进一步与“低代码/无代码平台”集成让非技术人员也可以创建和更新程序程序记忆库还可以进一步与“GitHub”、“GitLab”等代码托管平台集成获取更多的开源代码型程序。1.2.7 工具记忆库Tool Memory Base核心概念工具记忆库是长期知识库的第四个子模块是指存储“已调用的工具的输入输出”、“工具的使用频率”、“工具的使用效果”、“工具的错误处理经验”的记忆库——工具记忆库对应认知科学中的“启动效应”和“程序记忆的结合”。问题背景Agent需要调用各种“工具”才能完成复杂的任务——比如一个个人金融助理Agent需要调用“银行账户查询工具”、“股票行情查询工具”、“投资收益率计算工具”、“月度财务报告生成工具”等——但如果Agent每次调用工具都“从零开始”不知道“这个工具之前有没有被调用过”、“这个工具的输入参数应该怎么设置”、“这个工具的输出结果应该怎么处理”、“这个工具之前犯过什么错误、应该怎么避免”那么Agent的效率会非常低、错误率也会非常高。因此我们需要一个独立于程序记忆库的、可检索的、可更新的工具记忆库。问题描述如何设计一个工具记忆库让它可以存储已调用的工具的输入输出、使用频率、使用效果、错误处理经验同时又可以高效检索、及时更新、帮助Agent提高效率和降低错误率问题解决将工具记忆库中的每一个“工具调用记录”存储为一个“结构化的JSON对象”其中包含了“工具调用记录ID”、“用户ID”、“会话ID”、“任务ID”、“工具ID”、“工具名称”、“工具输入参数”、“工具输出结果”、“工具调用时间”、“工具调用是否成功”、“工具调用的错误信息如果有的话”、“工具调用的错误处理经验如果有的话”、“用户对工具调用结果的满意度评分如果有的话”等字段使用“关系型数据库”来存储工具调用记录的结构化元数据同时使用“向量数据库”来存储“工具输入参数”、“工具输出结果”、“错误信息”、“错误处理经验”的向量嵌入使用“混合检索”策略来检索工具记忆库中的内容——比如当Agent需要调用某个工具时先用关系型数据库筛选出“最近调用过这个工具的、成功的、用户满意度评分较高的”工具调用记录然后用向量数据库筛选出“工具输入参数与当前任务的需求最相似的”工具调用记录最后将这些工具调用记录作为“提示Prompt”送入LLM中帮助LLM更好地设置工具的输入参数、处理工具的输出结果、避免之前犯过的错误使用“时间衰减算法”和“使用频率加权算法”来更新工具的“推荐优先级”——比如“最近调用过的、使用频率较高的、用户满意度评分较高的”工具推荐优先级会更高使用“过期标记机制”来管理工具记忆库中的内容——比如可以设置“工具调用记录”保存1年之后自动标记为“过期”并软删除。边界与外延边界工具记忆库中的内容是“与工具调用相关的”工具记忆库中的内容通常是“动态的”或者“更新频率较高的”比如Agent每次调用工具都会产生一个新的工具调用记录工具记忆库中的内容通常需要“用户权限控制”——比如一个公司内部的金融咨询Agent财务总监只能查看自己和自己部门员工的工具调用记录而不能查看副总裁的工具调用记录。外延工具记忆库可以进一步扩展为“多Agent工具记忆库”支持多Agent协作场景下的工具调用经验共享工具记忆库也可以进一步扩展为“工具故障诊断库”帮助Agent自主诊断和修复工具的故障工具记忆库还可以进一步与“API管理平台比如Postman、Apigee”集成获取更多的工具使用文档和错误处理经验。1.2.8 检索Retrieval核心概念检索是指从记忆系统短期记忆、情境缓存、长期知识库中筛选出与当前任务/用户输入最相关的信息的过程。问题背景记忆系统中存储了大量的信息——比如一个个人金融助理Agent的长期知识库中可能存储了“1000条通用金融知识”、“10000条用户个人经历”、“100条可执行的程序”、“100000条工具调用记录”——如果Agent每次都需要“浏览”所有的信息才能找到有用的信息那么Agent的效率会非常低、甚至会完全无法工作。因此我们需要一个高效的、准确的检索过程。问题描述如何设计一个高效的、准确的检索过程让它可以从记忆系统中筛选出与当前任务/用户输入最相关的信息问题解决使用“分层检索Hierarchical Retrieval”策略——先从情境缓存中检索信息因为情境缓存中的信息是“最相关的、最新的”如果情境缓存中没有足够的信息再从短期记忆中检索信息如果短期记忆中也没有足够的信息最后从长期知识库中检索信息在长期知识库中使用“分类检索Classified Retrieval”策略——先根据当前任务的类型确定需要检索的长期知识库子模块比如如果当前任务是“查询用户的投资收益率”那么需要检索的子模块是“程序记忆库”、“工具记忆库”、“情景记忆库”然后再在每个子模块中使用“混合检索Hybrid Search”策略向量相似度检索轻量级关键词检索来检索信息最后使用“相关性重排序算法”和“时间衰减算法”来排序所有检索到的信息筛选出Top-K比如Top-5或Top-10最相关的信息送入LLM中。边界与外延边界检索过程的目标是“筛选出与当前任务/用户输入最相关的Top-K信息”而不是“找出所有相关的信息”检索过程的效率和准确性取决于“记忆系统的分层分类设计”、“检索策略的设计”、“向量模型的选型”、“索引优化的程度”等因素。外延检索过程可以进一步扩展为“自适应检索Adaptive Retrieval”——根据当前任务的复杂程度、用户的反馈、检索结果的质量等因素自动调整检索策略比如调整Top-K的数值、调整向量相似度检索和轻量级关键词检索的权重、调整时间衰减函数的参数检索过程也可以进一步扩展为“元记忆检索Metamemory Retrieval”——Agent先“思考”一下“自己有没有相关的信息”、“相关的信息存储在哪个记忆层/子模块中”、“应该用什么检索策略来检索信息”然后再进行实际的检索。1.2.9 重排序Reranking核心概念重排序是指对检索到的信息进行“二次筛选和排序”的过程——因为初始的检索结果比如向量相似度检索的结果可能不是“最符合当前任务需求的”比如初始检索结果中的某条信息虽然“内容相似度很高”但“时间已经过期了”、或者“用户没有权限查看”、或者“与当前任务的优先级不匹配”。问题背景初始的检索结果比如向量相似度检索的Top-10结果可能包含了一些“过时的”、“无关的”、“用户没有权限查看的”信息——比如一个个人金融助理Agent的初始检索结果中可能包含了一条“2020年的央行利率调整信息”但当前任务需要的是“2024年的央行利率调整信息”——如果直接将这些初始检索结果送入LLM中那么LLM可能会被无关信息淹没、或者引用过时信息。因此我们需要一个高效的、准确的重排序过程。问题描述如何设计一个高效的、准确的重排序过程让它可以对初始检索结果进行二次筛选和排序筛选出最符合当前任务需求的Top-K信息问题解决重排序过程通常包括三个步骤过滤Filtering先对初始检索结果进行“过滤”删除那些“过时的”、“用户没有权限查看的”、“与当前任务的类型不匹配的”信息评分Scoring然后对过滤后的检索结果进行“评分”计算每条信息的“综合相关性评分”——综合相关性评分通常由“内容相似度评分”、“时间衰减评分”、“用户权限评分”、“任务优先级评分”、“用户满意度评分如果有的话”等多个维度的评分加权求和得到排序Sorting最后对过滤后的检索结果按照“综合相关性评分”从高到低进行排序筛选出Top-K比如Top-3或Top-5最相关的信息送入LLM中。边界与外延边界重排序过程的目标是“对初始检索结果进行二次筛选和排序筛选出最符合当前任务需求的Top-K信息”重排序过程的效率和准确性取决于“过滤条件的设计”、“评分维度的选择”、“加权系数的设置”等因素。外延重排序过程可以进一步扩展为“基于LLM的重排序LLM-Based Reranking”——使用一个“轻量级的LLM”比如GPT-4o mini、Claude 3 Haiku、Llama 3 8B来对过滤后的检索结果进行“评分”和“排序”因为轻量级的LLM可以更好地“理解当前任务的需求”和“信息的上下文”重排序过程也可以进一步扩展为“基于强化学习的重排序Reinforcement Learning-Based Reranking”——根据用户的反馈比如“用户对Agent的回复是否满意”来自动调整加权系数的设置。1.2.10 更新Update核心概念更新是指将新的信息添加到记忆系统中或者修改记忆系统中已有的信息的过程。问题背景记忆系统中的信息不是“一成不变的”——比如“央行的利率调整信息”会每月更新一次“本公司的财务制度”会每年更新一次“用户的个人经历”会每天更新一次——如果记忆系统中的信息不及时更新

相关文章:

Agent 中的记忆系统:短期记忆、长期知识库与情境缓存最佳实践

Agent 中的记忆系统:短期记忆、长期知识库与情境缓存最佳实践 摘要/引言 开门见山:当我们说AI Agent要“有记忆”时,我们在说什么? 你有没有过这样的经历:和OpenAI的ChatGPT连续聊了20轮Python爬虫优化,…...

Virtuoso ADE L仿真结果分析实战:用Calculator快速提取带宽、相位裕度和噪声

Virtuoso ADE L仿真结果深度解析:从波形到关键指标的实战技巧 面对仿真完成后满屏的波形曲线,许多工程师常陷入"数据丰富但信息匮乏"的困境。本文将聚焦两级运放案例,演示如何用Calculator函数精准提取GBW、相位裕度、噪声谱密度等…...

lil_tea c++ 2023 style guide

调试 我觉得调试是最重要的, 所以放在最开头. 调试, 最最最重要的, sudo apt remove gdb (这只是个玩笑, 不要真的执行). 深入学习贯彻 fail fast 原则, 在出现错误时直接退出程序, 而不是使用 try throw catch. 编写程序的时候假设所有东西不会出错, 然后每当出现程序异常退…...

Debian 12 内网求生记:手把手搞定1Panel离线安装与Docker启动(附iptables补丁)

Debian 12 内网求生记:手把手搞定1Panel离线安装与Docker启动(附iptables补丁) 1. 内网环境下的技术挑战 在完全隔离的内网环境中部署现代化运维工具,就像在没有GPS的荒野中寻找方向。我们面对的不仅是网络连接的缺失,…...

中国AI Agent发展现状与生态分析

中国AI Agent发展现状与生态分析 1. 标题 (Title) [从“工具助手”到“决策伙伴”:全景拆解中国AI Agent的爆发逻辑、玩家图谱与下一个十年机遇][万字深度:202X中国AI Agent发展白皮书——技术攻坚、商业落地与生态全景解析][抢滩AGI入口之战&#xff1a…...

2026教培行业项目管理系统盘点:8款课程研发协同工具横评

本文将深入对比8款适合教育培训行业的项目管理工具:Worktile、Asana、monday.com、ClickUp、Jira、Confluence、Notion、Smartsheet。文章将围绕教研管理、课程开发协同、文档沉淀、进度追踪、安全合规与部署方式等维度展开分析,帮助教育培训机构判断不同…...

视觉化看板工具怎么选?9 款创意团队项目协作平台优势分析

本文将深入对比 9 款支持视觉化看板的项目协作工具:Worktile、Trello、Asana、monday.com、ClickUp、Wrike、Notion、Jira、Teambition,重点分析它们在创意团队中的项目管理能力、适用场景、部署方式、协作效率与安全合规差异,帮助企业选型者…...

高效智能激活解决方案:KMS_VL_ALL_AIO如何一键解决Windows与Office授权难题

高效智能激活解决方案:KMS_VL_ALL_AIO如何一键解决Windows与Office授权难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾因Windows突然弹出激活提醒而中断工作&#xff1…...

NsEmuTools:如何用一款工具解决NS模拟器90%的配置难题?

NsEmuTools:如何用一款工具解决NS模拟器90%的配置难题? 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools 当我们谈论NS模拟器时,大多数玩家首先想到的是Y…...

深度解析WaveTools:鸣潮游戏性能优化与数据分析的专业工具

深度解析WaveTools:鸣潮游戏性能优化与数据分析的专业工具 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools作为一款专为《鸣潮》游戏设计的开源工具箱,通过帧率解锁、画质…...

DeepSeek-OCR-2功能体验:双列可视化界面,左传图右看结果,操作直观

DeepSeek-OCR-2功能体验:双列可视化界面,左传图右看结果,操作直观 1. 为什么这个OCR工具值得一试 如果你经常需要处理扫描文档、PDF文件或者图片中的文字,传统OCR工具可能让你又爱又恨。它们确实能提取文字,但遇到复…...

为什么工业 AI 必须引入本体论?

如果你只用大语言模型(LLM)写周报、画插图、做视频,你只需要关心它聪不聪明。但如果你要用它去设计一座造价上亿的芯片工厂、去控制百万集群算力中心的液冷系统。你就必须回答:AI 凭什么保证绝对不出错?大模型的数学本…...

降AI后格式乱了怎么修:Word格式修复操作指南

降AI后格式乱了怎么修:Word格式修复操作指南 上周室友第一次用降AI工具,操作错了好几步,差点浪费机会。觉得有必要写一篇详细教程。 我用的是嘎嘎降AI(www.aigcleaner.com),4.8元一篇,达标率9…...

论文降AI之前要做哪些AIGC自检:完整自查流程

论文降AI之前要做哪些AIGC自检:完整自查流程 被问了太多次降AI前自检相关的问题,写一篇完整教程。 主要工具是嘎嘎降AI(www.aigcleaner.com),4.8元。第一次用的话有些细节知道和不知道差别挺大的。 操作前准备 开始…...

RetDec反编译神器:从零开始掌握二进制代码逆向分析

RetDec反编译神器:从零开始掌握二进制代码逆向分析 【免费下载链接】retdec RetDec is a retargetable machine-code decompiler based on LLVM. 项目地址: https://gitcode.com/gh_mirrors/re/retdec 你是否曾经面对一个神秘的二进制文件,想要了…...

三步掌握Alienware终极控制权:AlienFX Tools新手完全指南

三步掌握Alienware终极控制权:AlienFX Tools新手完全指南 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 你是否厌倦了Alienware官方软件的…...

Windows电脑安装安卓APK的终极指南:3分钟学会跨平台应用安装

Windows电脑安装安卓APK的终极指南:3分钟学会跨平台应用安装 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为手机应用无法在电脑上使用而烦恼吗&…...

从输入法到天气预测:一阶与高阶马尔科夫链的建模实战

1. 马尔科夫链:从输入法到天气预测的数学魔法 第一次听说马尔科夫链这个词时,我正盯着手机输入法发呆。当时在打"奥利奥"这个词,刚输入"ao"就自动联想出"奥利奥",而前一天我还在为打不出这个词抓耳…...

自适应交易利器:KAMA指标在Python中的高效实现与实战解析

1. 认识KAMA指标:让移动平均线"活"起来 第一次接触KAMA指标是在2018年的一个量化交易项目中。当时我们团队正在寻找能够适应不同市场环境的趋势指标,传统的均线系统在震荡市中频繁发出假信号,而在趋势行情中又显得过于滞后。直到一…...

边缘检测数据集BSDS500的‘坑’与优化:多标注者标签融合与阈值选择的经验谈

边缘检测数据集BSDS500的‘坑’与优化:多标注者标签融合与阈值选择的经验谈 第一次接触BSDS500数据集时,我以为这不过又是一个标准的边缘检测基准——直到我的RCF网络在验证集上输出了支离破碎的边缘图。那个深夜调试参数的场景至今记忆犹新:…...

前端框架选择:别再被营销号忽悠了

前端框架选择:别再被营销号忽悠了 一、引言 又到了我这个毒舌工匠上线的时间了!今天咱们来聊聊前端框架选择这个话题。现在市面上的前端框架太多了,React、Vue、Angular、Svelte、Solid等等,营销号每天都在吹这个好那个好&#xf…...

Linux内核中的内存屏障技术详解

Linux内核中的内存屏障技术详解 引言 内存屏障(Memory Barrier)是Linux内核中用于确保内存操作顺序的重要机制。在多处理器系统中,由于CPU缓存、指令重排序等因素,内存操作的实际执行顺序可能与代码中的顺序不同,这可能…...

[具身智能-239]:OpenCV与深度神经网络处理图像的哲学差别,前者是结构化的底层像素处理,是物理工匠哲学,深度神经网络是非结构化的特征与含义识别,是人类的意义认知哲学。

总结非常精辟,甚至可以说是一针见血地揭示了计算机视觉领域两大流派的本质差异。这里提出的“物理工匠哲学”与“人类的意义认知哲学”,不仅准确描述了技术实现上的不同,更上升到了认识论的高度。结合最新的搜索结果和深度学习的本质&#xf…...

[具身智能-238]:openCV颜色识别的原理与代码示例?

OpenCV 进行颜色识别的核心原理,是将图像从 BGR 颜色空间转换到 HSV 颜色空间,然后通过设定阈值来分割出特定的颜色。 这种方法比直接在 BGR 空间操作更稳定、更直观,因为它将颜色信息(色调)和亮度信息(明…...

【Hot 100 刷题计划】 LeetCode 215. 数组中的第K个最大元素 | C++ 快速选择与堆排序题解

LeetCode 215. 数组中的第K个最大元素 | C 快速选择与小顶堆双解法 📌 题目描述 题目级别:中等 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不…...

解释器指令入口——栈顶缓存

解释器指令入口——栈顶缓存 书接上回,转发表的结构是栈顶状态和字节码值共同组成,使用栈顶状态的原因是为了在特殊情况下提高解释器的执行速度。 例1 栈顶状态前后一致 假设由下列字节码执行序列 iload_1 iaddiload_1字节码的含义是把本地变量表中的…...

app手机监控功能

1 发现抖动的时候:发出大声警报 2 当处于监控状态的时候,手机无法打开任何app,只能停止在屏保界面。无法进行任何操作,无法关机 3 发现抖动的时候:拍照录视频 4 发现抖动的时候:打开GPS开关,发送…...

app启动自启动后无法重启后启动

开启High background power usage 可以就可以了有时候,只是因为手机需要一定的初始化时间,等1分钟就启动了。...

android手机禁止微信后台运行

右击app-----------view all permission------就是用这个:stop running in background --------如果不设置的话,那么即使关闭了,还是会在后台运行的。关掉了:...

目前遇到问题

手机重启以后,app虽然已经启动了自启动,但是实际并没有启动应该是没有启动监听开机广播...