AI Agent记忆工程实践:短时、长期与程序性记忆全解析
2026/9/12 16:15:20 网站建设 项目流程

前阵子我在公司内部带一个Agent项目,遇到一个特别典型的场景:用户在系统里填了一堆偏好,跟Agent聊了半个多小时,把需求说得清清楚楚。结果第二天换了一台电脑打开新的会话,Agent开口就是“您好,请问有什么可以帮您”。用户当场就爆了:这算什么智能助手,连我昨天说过的话都记不住。

这事其实特别有代表性。AI Agent从demo走向生产环境,最大的拦路虎不是推理能力,而是记忆能力。模型再强,每次对话都从零开始,那它只是一个“很会聊天的搜索引擎”,永远成不了“了解你的助手”。这篇是“走进AI Agent”系列的第三篇,我不讲Prompt技巧,不说模型选型,专门把Agent记忆这一块讲透:记忆怎么分类、工程上怎么做、框架怎么选、落地会踩哪些坑。适合正在做Agent应用的后端开发者、AI应用架构师,以及所有想把Agent真正做成“有记忆力产品”的人。

1. Agent记忆的本质:记忆不只是存储,是认知的一部分

1.1 为什么记忆是Agent从“玩具”走向“生产”的分水岭

先给一个判断标准:如果一个Agent不保存任何状态,每次请求都是独立的,那它本质上就是一个“无状态API”。无状态API做聊天机器人没问题,但做Agent有问题,因为Agent的定义就是“能自主完成多步任务的智能体”。多步任务天然依赖中间状态——第一步收集了用户信息,第二步要基于这些信息做决策,第三步要根据决策执行动作。中间任何一个环节丢了上下文,整个任务链条就断了。

我在实际项目中见过太多“看起来很聪明、用起来很智障”的Agent。它们聪明是因为底层的模型确实强,智障是因为所有对话都从零开始。用户跟Agent说“帮我写一封给张总的邮件”,Agent写了;用户接着说“语气再委婉一点”,Agent能做到,因为刚才的内容还在上下文窗口里。但如果你在另一个会话里说“把我上周发给张总的那封邮件改一下”,Agent就懵了——它根本不记得上周发生过什么。

这就是有没有记忆的分水岭。没有记忆的Agent只能处理“单轮指令”,有记忆的Agent才能处理“连续性任务”。连续性任务才是企业场景里真正有价值的部分:客户关系维护、项目管理、个性化推荐、自动化办公。没有记忆能力的Agent,在这些场景里寸步难行。

另外从用户心理角度说,记忆本身就是“智能感”的重要来源。你跟一个系统说过一次“我习惯下午三点开会”,它下次四点给你安排会议,你会觉得它蠢;但它如果能在安排会议的时候主动避开三点,你会觉得它“懂你”。这种“懂你”的体验,完全建立在记忆之上。我在做用户访谈时发现,用户对Agent的评价从来不只是“回答准不准”,而是“它有没有把我的话当回事”。记忆,就是“把你的话当回事”的技术实现。

1.2 记忆的三种分型:短时记忆、长期记忆、程序性记忆

做Agent记忆设计之前,我强烈建议先建立一套分类体系。我们做工程的人习惯一上来就聊“用哪个向量库”,但真正的第一步是搞清楚“要记什么类型的信息”。参考认知科学的分型,我把Agent记忆拆成三类:

短时记忆对应一次任务执行过程中的上下文。比如用户说“帮我查一下杭州明天的天气,顺便推荐几个适合带小孩去的景点”,这里“杭州”“明天”“带小孩”就是短时记忆。它的特点是生命周期短、随任务结束而结束,但对正确性要求极高。工程上对应的是上下文窗口管理、会话历史维护。

长期记忆对应跨会话的、关于用户和世界的稳定知识。用户的偏好、习惯、历史决策、身份特征都属于这一类。比如用户是素食主义者、喜欢极简风、之前拒绝过某家供应商,这些信息需要在几周甚至几个月之后仍然有效。长期记忆就是要解决“下次见面还记得你”的问题。

程序性记忆对应“怎么做某件事”的技能。它不是事实数据,而是流程、规则、方法论。比如“处理退款投诉的标准流程是先安抚情绪再核实订单再给出方案”,这套流程一旦沉淀下来,Agent在处理所有退款投诉时都应该遵循。程序性记忆的载体不只是数据库,也可能是工作流定义、工具调用规范,甚至是Agent自己从经验中总结的规则。

我见过很多失败的记忆设计,根本原因就是把这三类混为一谈。有人把所有对话历史一股脑塞进向量库,结果短期信息污染了长期记忆;有人把所有用户数据当成程序性记忆去约束Agent行为,结果Agent变得僵化死板。正确的做法是先把记忆分型,再针对每一种类型选择不同的存储和检索策略。

1.3 Agent记忆的技术路线:不止有向量库

我发现一个很有趣的现象:现在一聊Agent记忆,很多人第一反应就是“上向量数据库”。向量库确实是长期记忆的主流方案,但它只是整个记忆技术版图里的一块,不是全部。

完整的Agent记忆技术路线至少包含四层:上下文窗口解决短时记忆的即时性问题;键值存储(如Redis)解决会话状态的临时读写;结构化数据库(如PostgreSQL)解决用户画像和业务数据的持久化;向量数据库解决语义相似度检索。四层各司其职,组合使用才能覆盖不同类型的记忆需求。

我甚至遇到过只靠SQLite就把记忆做得不错的项目。那个场景里用户的偏好是高度结构化的字段——年龄段、城市、预算区间、常用地址,直接用数据库字段存,查询时用条件过滤,比向量检索精准得多,成本还低。向量检索的优势在于处理“说不清道不明”的信息,比如用户说“我比较喜欢那种轻盈的感觉”,这句话很难拆成结构化字段,但可以embedding成向量,之后用相似度找回来。所以正确的思路不是“用不用向量库”,而是“什么样的信息适合什么样存储”,混合架构才是生产级Agent的常态。

2. 让Agent记住你的核心实现思路

2.1 短时记忆的工程化:会话历史、截断与摘要

短时记忆的实现在工程上最直接,就是把对话历史传给模型。但这里有一个二选一的难题:传太多,超出上下文窗口限制,也烧钱;传太少,Agent记不住前文,回答牛头不对马嘴。

我常用的方案是“截断+摘要”双轨制。截断是简单粗暴地保留最近N轮对话,适合任务比较短、上下文依赖不深的场景。摘要则是用模型把早期对话压缩成一段总结,再配合最近的完整对话一起传给模型。举个例子,一个持续了3小时的客户咨询,完整对话可能有10万token,截断只能保留最后几千字,但摘要方式能保留“客户已确认预算20万、之前聊过两个供应商被否、客户倾向于本地化部署”这样结构化程度较高的信息,配合最近几轮对话,效果远好于单纯截断。

关于截断窗口设多大,我个人的实践是:短时记忆下限至少8轮对话,低于这个数检索式回复占比会明显上升;上限看模型窗口,但要预留30%的余量给长输出和工具返回结果。这个比例是我在实际压测中摸出来的,如果你在做一个多工具调用的Agent,工具返回的内容经常很长,余量留小了直接把后面的任务规划挤爆了。

会话历史的组织顺序也值得注意。很多人直接把对话按时间顺序拼接,但我在项目中用的是“分段结构”:系统指令在最前,然后是长期记忆检索出的相关事实,再是摘要出的历史结论,最后是最近几轮完整对话。这种结构让模型在生成时天然形成“先看背景、再看过程、最后看眼前”的阅读顺序,综合表现会稳定很多。

2.2 长期记忆的实现:向量化加检索增强

长期记忆的核心是把“关于用户的事实”存下来,在需要的时候检索出来注入提示词。工程实现上分三步:

写好理解,就是什么时候把什么信息抽出来存。我通常采用“关键信息抽取”模式:用一个专门的抽取提示词,在对话进行中实时分析用户说过的话,把具有长期价值的信息(用户偏好、身份属性、重大决策、明确表态)抽成短文本片段。比如用户说“我不太喜欢那种花里胡哨的界面,功能顺手最重要”,抽取结果就是“用户偏好:界面简洁优先于视觉效果”。这个抽取过程可以用小模型来做,成本低、速度快。

存的决定因素是“以什么为粒度”。行业里有两种主流方案:一种是整个对话段落作为一条记录存储,召回时把整段返回给模型;另一种是把抽取出来的原子化信息作为一条记录存储,比如“用户偏好=简洁界面”“用户公司=某科技公司”。我的经验是:如果Agent的主要场景是问答(比如企业知识库助手),段落级存储更合适,因为回答问题时需要完整的上下文;如果Agent的主要场景是任务执行(比如私人助理),原子化信息更合适,因为任务执行只需要精确的事实,不需要上下文噪音。

读的环节是召回策略的问题。一般用embedding模型把当前对话的关键问题和历史记忆一起向量化,然后计算相似度,取Top-K条相关记忆注入提示词。这里有个参数要反复调:K值——取少了召回不全,取多了注入噪声反而干扰模型判断。我的习惯是先从K=5开始,加入相关性阈值的筛选,低于阈值的不注入,再根据线上badcase率逐步微调。

2.3 记忆的写入时机:什么时候“记住”,什么时候“忽略”

记忆系统做得久了,我发现最难的不是“怎么存”而是“什么时候该存”。用户随口说的一句话要不要记?用户情绪化的抱怨要不要记?用户回复“好的”这种无信息量的话要不要记?

我的答案是基于“信息价值”做判断。一个信息该不该进入长期记忆,看它能持续指导Agent未来行为的概率有多大。“我喜欢简洁的界面”能决定未来所有设计方案的走向,必须记;“这封邮件帮我今晚发出去”是短期指令,任务完成就作废,不记。规则可以总结成三条:与用户稳定偏好相关的要记,与当前任务执行相关的临时状态不记,包含情绪化表达的原始内容不记但情绪背后的客观事实可以抽出来记

我在生产环境还加了一道“记忆确认”机制:抽取出的记忆先进入临时缓冲池,不直接写入长期存储。当一条信息被二次提及或与已有记忆冲突时,才正式写入。这样能有效避免用户一句口误就被当成永久偏好存下来。有人可能觉得多此一举,但经历过“用户只是随口吐槽了一句贵,Agent之后所有推荐都避开中高端产品”之后,你就明白延迟写入有多重要了。

2.4 程序性记忆:把技能固化到Agent的行为里

程序性记忆是我单独想讲的,因为很多做Agent记忆的人会忽略这一块。Agent不只是要记住“用户是谁”,还要记住“事情怎么干”。

在单体Agent里,程序性记忆最常见的落地方式是系统提示词加工具定义。比如客服Agent有一套退款处理流程,你把这套流程写进系统提示词,这就是最朴素的程序性记忆。在复杂一点的场景里,程序性记忆可以沉淀为一系列“技能模板”,每个技能模板包含触发条件、执行步骤、参数定义和输出规范,Agent根据任务类型动态匹配技能模板。

更高级一点,程序性记忆可以让Agent自己总结经验。我在项目里尝试过让Agent在每次任务结束后生成“本次执行总结”——做了什么、遇到什么坑、如果重来一次会怎样。这些总结定期被聚类、去重、提炼成规则,回写到记忆库中。这种方式有点类似于人的“实践中学习”,运行几个月之后,Agent处理同类任务的成功率会有肉眼可见的提升。当然这个功能刚上线时要加人工审核,不然Agent自己总结出一套有问题的流程,再固化为记忆,后面就会一直错下去。

3. 从框架选型到系统落地:我如何使用LangGraph搭建Agent记忆

3.1 为什么选LangGraph而不是普通链式调用

我之前在项目里用LangChain的链式方式串过Agent流程,短期验证没问题,一旦涉及复杂状态管理就很别扭。链式调用是静态的、线性的,每一步接收什么输入输出是提前写死的,想加入循环、条件跳转、人工介入都非常费劲。而Agent的记忆机制天然依赖一个东西——状态。

LangGraph带来的核心转变是把Agent流程定义成一张“图”,节点是动作,边是状态转移,图中的全局状态可以在任意节点之间共享和持久化。这意味着记忆不再是你手动在各个步骤之间传参的“身外之物”,而是Agent运行时的一部分。在LangGraph里,有一个内置的StateSchema,你想让Agent记住什么,就往StateSchema里加一个字段。比如加一个memory字段,后续每个节点都可以读它、改它。

还有一个优势是checkpointer机制。它能把图的每一步状态快照到持久化存储中,这样Agent执行到一半崩溃了,可以从最近一个检查点恢复,而不是从头开始。这个不是什么细节特性,在生产环境太重要了。用户跟Agent聊到第20轮,任务执行到一半网络断了,如果Agent恢复后完全忘了前面说了什么,用户会直接卸载这个产品的。

3.2 持久化存储层选型:从SQLite到Postgres

LangGraph的checkpointer和记忆存储都依赖底层的持久化层。官方默认支持SQLite、Postgres等。我的选型建议很简单:本地开发和单机演示用SQLite,一行配置就能跑起来;正式生产环境直接用Postgres,别折腾,理由有三个。

第一,Postgres是关系型数据库,用户的会话记录、结构化画像、业务关联数据都能用同一套体系存,不需要同时维护Postgres加Mongo再加一套向量库的复杂组合。第二,LangGraph官方对Postgres的checkpointer支持完善,恢复、清理、并发控制都做得比较稳。第三,Postgres配合pgvector插件可以同时当向量库用,这样连长期记忆的向量存储都一并解决了,架构极简。

我见过有团队为了“性能极致”去上Redis加Faiss加Mongo的豪华组合,结果光数据同步和一致性就写了几千行代码。实际算下来,常规的Agent应用,请求量根本到不了需要那套组合的程度。先别过度设计,一个Postgres搞定存储,等你哪天真的单机性能扛不住再演进也不迟。

3.3 记忆读写路径设计:注入、更新、遗忘一个都不能少

我每次搭记忆系统都会画一个读写闭环,即使不做成文档,代码结构也会严格按这个来:

  • 读路径:每次Agent接收用户输入时,先根据输入内容从长期记忆中检索相关信息,注入到上下文里。这一步做不好,记忆存了也白存。
  • 写路径:对话进行中抽取关键信息,异步写入长期记忆。写路径最容易被忽略的是“更新”,如果用户说“我改了主意,现在预算不是20万是15万”,旧记录要能定位到并且更新,而不是再存一条新记录造成矛盾。
  • 遗忘路径:记忆必须能主动失效。用户删除了某个偏好、或者业务上出现隐私申请,相关记录要能删除或标记失效。

读写路径的实现用LangGraph会非常直观。我通常会在Agent的入口节点之前加一个standalone的记忆管理节点,它不参与对话逻辑,只负责查记忆、清洗记忆、更新记忆。对话节点只负责从state里读已有的记忆内容,完成任务后再把新获取的信息写回state,由记忆管理节点落库。这样业务逻辑和记忆逻辑解耦,后面改记忆策略完全不影响对话代码。

3.4 多Agent场景下的记忆隔离与共享

现在聊到热门词里提到的“Spring AI Multi Agent”。多Agent协作时,记忆问题从“单个Agent记住用户”变成了“多个Agent怎么共享信息但又不互相污染”。我的处理原则是“默认隔离,按需共享”。

默认隔离是说每个Agent有自己的记忆作用域。比如一个客服系统里有售前Agent、售后Agent、物流Agent,它们不应该互相看到对方的会话记录,否则售前Agent可能会把售后Agent跟用户确认的退款方案搞混。实现上就是用命名空间或者作用域标识来做隔离,LangGraph里可以在State里加一个agent_id字段,所有记忆操作都带这个字段,存储时按agent_id分区。

按需共享是指某些全局信息要有公共记忆层。比如用户的身份、VIP等级、全局偏好这些,所有Agent都应该知道。做法是单独建一个“用户Profile”存储,独立于各Agent的会话记忆。任何Agent在跟用户交互时都可以读这个Profile,但只有特定节点才有权限写它。这种“共享只读、私有可写”的模式,是我在实践里验证过的多Agent记忆最佳实践。

还有一点是MCP协议与Agent记忆的结合。如果Agent通过MCP协议调用外部工具,工具调用过程中的参数和结果会成为记忆的重要来源。我会把MCP工具调用的结构化日志接入记忆系统,比如Agent调了天气查询工具,查完后用户说“明天去杭州”,那“明天去杭州”和“已经查过杭州天气”之间的关联就有了基础。MCP协议还支持带上下文的工具请求,工具返回的结果可以携带记忆标识,方便后续索引。

4. 实操全过程:让Agent记住用户偏好的完整落地

4.1 先定义“记住什么”:用户画像与业务上下文

动手写代码之前,先回答一个问题:这个Agent需要记住用户的哪些信息?没有这个定义,后面所有存储都是瞎搞。

我的习惯是建一张“记忆字段表”,列出需要采集的信息类型。以一个私人日程Agent为例,我会定义三类字段:身份类(姓名、公司、角色、联系人关系)、偏好类(会议时间偏好、沟通风格、常用地址)、业务上下文类(当前进行中的项目、最近决策记录、待办事项)。字段表定义完,跟产品经理一起过一遍,确认哪些信息有采集价值,哪些涉及到敏感边界,提前划好线。

字段表其实是给后面的抽取模型和数据库表结构做依据的。我见过最混乱的记忆系统就是“什么都能存,什么都能查”,结果存了一堆垃圾信息,每次召回还互相打架。定义字段表看起来麻烦,但磨刀不误砍柴工。

4.2 会话级记忆:用会话ID管理上下文

第一步是打通短时记忆,也就是会话级的上下文管理。工程上最核心的就是会话ID的生成与传递。

前端在用户进入Agent页面时,生成一个UUID作为会话ID,之后的每一次对话请求都带着这个ID。后端拿到ID之后,先把该会话的历史记录从数据库查出来,按时间组装成对话列表,再拼上当前这轮输入,一起传给模型。这样实现的效果是:同一个会话窗口内,用户聊10轮、100轮,Agent都能保持上下文连贯。

这里有一个容易漏的细节:不要只存“用户和Agent的对话”,还要把“Agent调用工具的记录”一并存进去。用户问“帮我看看明天天气怎么样,如果下雨就提醒我带伞”,Agent调用了天气API,拿到了明天下雨的结果,同时回答了用户。如果你只存对话不存工具记录,之后用户问“你之前说提醒我带伞,那明天还有雨吗”,Agent无法把“之前查过雨”和“提醒带伞”关联起来,回答就会断片。

4.3 长期记忆:向量库存储与召回

长期记忆的落地我用的是“Postgres加pgvector”的方案,一来架构简单,二来向量和结构化数据能一起管理和备份。

存储流程方面:对话进行中,记忆抽取模型会对每轮对话进行分析,抽出的长期信息生成文本描述,同时用Embedding模型转换成向量。存量表包含id、user_id、content、embedding、created_at、updated_at等字段。写入时先判断内容是否跟已有记录重复,用相似度大于0.9作为重复阈值,重复就直接跳过不重复入库,这样能有效控制记忆库膨胀。

召回流程方面:用户的新输入到达后,先对输入做同样的Embedding,然后用pgvector的相似度搜索,取Top-K条记忆返回。我这里的相似度阈值设的是0.7,低于这个值的记忆视为不相关,不注入提示词。K值我先从5开始,然后根据badcase表现调。有一个经验供参考:如果你是面向垂直领域的Agent,K可以适当从3开始,因为领域越窄信息越集中Top-3基本够用;如果你是通用助理类Agent,K值取5到8比较合适,通用场景信息太散,K太小会漏。

embedding模型的选择,我在项目里用的是一个开源的通用embedding模型,维度是1024左右。选型的核心指标不在维度高低,而在你具体领域的语义相似度效果,拿你自己的一批业务问题做评测,哪个模型在“召回相关记忆”上表现好选哪个。

4.4 召回策略与参数调优

召回策略直接决定记忆能不能在正确的时候被想起。我目前在生产环境中跑的是一套“多路召回加融合重排”的方案,策略不复杂,但效果比单路召回稳定很多。

第一路是向量相似度召回,处理语义相似但关键词不同的情况。用户以前说过“我喜欢简洁风格的界面”,现在问“帮我设计个界面,不要太花哨”,“简洁风格”和“不要太花哨”字面上不完全重叠,但向量距离近,能召回。第二路是关键词匹配召回,处理精确事实。用户说过“我公司在北京朝阳区”,现在问“我们公司地址是啥”,直接把数据库中“公司地址”字段精确查出来就行,压根不需要向量。第三路是时间加权召回,处理时效性信息。用户上周说“最近在准备A项目投标”,这个信息在短期内有价值,时间越近权重越高;两周后A项目结束了,这条信息就自然下沉。

融合重排就是把三路的召回结果合并,根据相关性和时效性做加权排序,Top-K条注入上下文。权重不是固定的,我会每个月看一次线上分布,调整一次。这套策略最大的好处是稳定性:任何一路召回偶尔出问题,其他路能兜住,不至于用户一问三不知。

5. 生产环境中的常见问题与排查技巧

5.1 记忆丢失与召回失效:为什么用户问了三次名字,Agent还是记不住

这是社区里问得最多的一个问题,原因通常有三个。

第一,信息根本没被抽取出来。很多Agent的记忆抽取模型用的是跟对话模型同一套提示词,对话模型被要求“不要过度主动记忆用户信息”,结果所有信息都没进记忆库。排查方法:检查记忆库里有没有这个用户新增的记录,没有就是抽取环节的问题。解法是把抽取任务独立出来,用一个单独的模型调用,明确指令“从对话中抽取出适用于长期存储的用户事实”。

第二,信息存了但没被召回。这通常是向量相似度太低的锅。用户说“我叫老张”,Agent把“老张”存进了记忆库,然后用户问“你知道我叫什么吗”,这个查询的embedding和“我叫老张”的embedding相似度可能没那么高,低于你的阈值就被过滤了。解法是降低阈值、或者为“用户身份类”信息单独走结构化检索,不要全靠向量。

第三,上下文窗口太长被截断了。用户在同一个会话里聊了50轮,你的历史管理策略是“只保留最近10轮”,那20轮之前说过的信息自然就丢了。解法是把短时记忆和历史长期记忆结合,重要信息在写入短期会话的同时同步写入长期记忆。

5.2 上下文污染:多Agent协作时记忆串台

多Agent场景下最常见的故障是“记忆串台”。A用户的记忆被B用户读到,或者售前Agent读到了售后Agent的对话记录。这种问题的根源一般是作用域处理不严格。

我的排查思路是先看存储层的过滤逻辑:所有记忆查询的SQL或者检索请求,是否都带了正确的user_id和agent_id条件?实际踩过的一个坑是刚开始图省事,把agent_id参数写死在代码配置里,没有从请求上下文中动态取。测试时只有一个Agent,没问题;上线跑多Agent,所有Agent共享了同一个agent_id,记忆自然全串了。修复方法很简单,把agent_id改成每次请求动态获取,在入口处统一赋值,不允许各节点自行修改。

另一个污染源是共享工具的状态。如果多个Agent调用同一个工具类服务,而这个工具又把结果缓存在一个公共地方,那A Agent的工具结果可能会被B Agent读走。工具调用要做好上下文隔离,缓存键必须包含会话级标识。

5.3 记忆膨胀与成本失控:存量越来越多,召回越来越慢

长期记忆库运行几个月后,规模上来了,你会发现两个问题:召回变慢、token成本上涨。

召回变慢的解法主要是“分区降低扫描量”:按user_id做分区索引,先定位用户再在用户的记忆子集里检索,而不是全库扫。我在项目里曾经有过好几个月的全库扫描经验,好在数据量还没到大厂量级,不然性能直接崩。token成本上涨的解法是“记忆压缩”:定期对历史记忆做一次合并去重,把内容相关的多条短记忆合并成一条摘要式记忆,删除重复和失效的记录。可以建一个定时任务,每周或者每月对存量记忆做一次压缩。

还有一个性价比很高的办法:冷热分离。把最近30天内活跃用户的记忆放在高可用存储,不活跃用户和超期记忆归档到低成本存储。用户一旦回来,再把归档记忆异步解冻。这个方案能控制绝大多数成本,因为实际场景里活跃用户永远是少数。

5.4 隐私与合规边界:Agent记忆的安全红线

这个我放在最后聊,但它的重要程度排第一。Agent记忆的用户数据,天然涉及个人隐私。做记忆系统的时候,安全边界必须前置考虑。

我的四个原则:一、最小化采集,只采集业务必需的信息,字段表里没有的坚决不存。二、脱敏存储,手机号、身份证号、地址等敏感信息加密存储,向量化时用脱敏内容而不是原始内容。三、明确告知和删除权,界面要有清晰的隐私说明,用户要求删除数据时必须支持彻底删除,不只是标记失效。四、访问控制,记忆数据的读取必须走统一的鉴权层,不允许节点绕过鉴权直接访问存储。

有一次我们接一个政企项目,客户审计要求所有用户数据必须支持“被遗忘权”。这意味着不只是删除当前记录,还要清理备份、日志、向量库里的历史索引。我们当时花了不少精力改造存储层,这也算是“安全设计做晚了就得补课”的典型例子。如果一开始就把这些纳入设计,后面会省很多事。

6. 一些关于记忆这部分我个人最想强调的经验

整个做下来,我最核心的体会是:Agent记忆不是一个“功能”,而是一个“架构”。它不是加一个缓存那么简单,它会影响Agent的数据流、状态管理、工具调用方式、甚至产品交互逻辑。你越早把它当作系统级问题来设计,后面返工越少。

然后实操上,我建议在动手写代码之前,先把本篇文章前两步做了——定义记忆分型和画记忆读写路径。我就是因为一开始没仔细做分型,导致代码里短期会话记录和长期用户画像混在一块,后面重构了一版才理顺。这个教训特实在,分享给你们,希望能少花我那份冤枉钱。

关于这个主题,后面可扩展的方向还有很多。比如记忆的可解释性——让用户能看见Agent记住自己什么,这能大幅提升信任感;再比如记忆的时间线推演——基于用户历史决策序列,预测当前最可能接受什么方案。这些方向我在项目和系列文里会持续跟。记忆这个主题,挖掘空间远比我一开始想的大得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询