存储与检索是完全独立的问题,模型本身无状态,上下文窗口是工作记忆,持久化记忆靠外部系统管理,检索质量决定 Agent 表现。
每个团队在构建 Agent 时,都会以相同的顺序撞上同一堵墙。他们花一个下午让存储跑起来,感觉良好,然后在接下来的三个月里发现:存储信息和检索到正确的信息,几乎是两个完全不相关的问题。
语言模型是无状态的。它接收文本、输出预测、每次调用之间什么都不保留。模型在回答你此刻的问题时,并不记得你曾经和它说过话,而且当请求结束后,从它的角度看,整个对话就消失了。
所有看起来像「记忆」的东西,都是围绕模型构建的独立系统。它捕获值得保留的信息,存储到某个持久化的地方,然后在后续调用时把相关内容重新注入到提示词中。模型的权重没有任何改变。记忆存在于模型之外,通过管理进入上下文窗口的内容来运作。
这个区别比这个话题中的任何其他概念都重要。上下文窗口是工作记忆:容量大但是有限的、每次调用都从头重建、会话结束就消失。持久化记忆是所有存在于它之外的内容,存储在能够跨越重启和时间而存活的地方。
无论是从五十行原型还是生产级平台,每套记忆系统都执行相同的四个操作。
写入阶段决定什么值得保留。简陋的设计会逐字存储每条消息,这很快就会让存储充满噪音。更好的设计会提取持久的信号——稳定的 facts、明确的偏好、确认的结果和纠正——让短暂的闲聊自然消亡。
存储阶段将其编码以备后用。常见做法是把每条记忆转换为一个 embedding,后者捕获其语义,同时将该向量与原始文本及元数据(如时间戳和来源)一起存储。向量让你能做语义搜索,结构化字段让你做精确过滤,而原始文本才是最终被重新注入上下文窗口的内容。
检索阶段在新区任务到来时找到相关的片段,而这正是几乎所有难度所在。注入阶段随后在模型运行前把这些记忆放入上下文窗口。拉取太少,模型就会陷入它已有却被遗忘的知识饥荒。拉取太多,有用的信息就会被淹没,预算被浪费,延迟上升。
检索是工程精力的所在
向量搜索按语义而非精确词语匹配,所以一个关于「取消订阅」的查询,能够在没有任何共同关键词的情况下,命中一条关于「终止定期计划」的记忆。这就是它的优势。
劣势是优势的另一面。语义相似性会模糊精确的 token,所以向量搜索经常遗漏那些往往最为关键的精确术语——特定的错误代码、产品名称、标识符。关键词搜索恰好擅长处理这些情况。同时运行两者并合并结果,然后用更昂贵的模型对合并后的候选结果进行重排,可靠地超越单独使用任一方法。
对于那些价值在于关系而非原始文本的信息,知识图谱能够回答相似性搜索无法回答的问题——它能追踪两个事实如何通过一系列中间步骤连接起来。
所有这些技术之下存在一个核心张力。检索的记忆太少,Agent 就会错失它已有的知识。检索的记忆太多,有用的内容就会被淹没,成本和延迟也会攀升。好的检索返回的是最小的集合——但这个集合仍然包含 Agent 实际所需的一切。
记忆设计本质上是信息放置问题。Agent 遇到的每条信息都有一个天然的归属:在这个回合之后丢弃它、在本会话期间保留它、或者晋升到长期存储。
从认知科学中借鉴的分类在这里很有帮助。语义记忆保存独立于学习时间的 facts。情景记忆保存具体的过往事件。程序性记忆保存习得的 routine 和技能。每种都需要不同的存储和检索策略,所以明确你正在处理的是哪一种,正是防止三者混为一谈、堆成无差别一团的关键。
把放置做对了,Agent 就会感觉连贯且知识渊博。做错了——要么保留一切,要么什么都不保留——它就会要么淹没在噪音中,要么永久性失忆。
记忆比微调更重要的原因是:记忆是非参数化的。向存储写入一条 fact 是即时、便宜且可逆的,而重新训练是缓慢、昂贵且有风险的。一个拥有良好记忆的 Agent 可以在几秒钟内吸收一份新文档或纠正一个过去的错误,完全不需要任何训练过程。
如果你想要完整的拆解——包括记忆类型、从本地 SQLite 文件到托管平台的各种存储选项,以及各检索策略的对比——AI Agent Memory 完整指南从端到端覆盖了所有内容。