特工记忆存在真相问题
检索适合编码且成本低廉;它破坏了完整性、一致性和出处。为什么收敛到结构化状态很困难,以及 Neotoma 是如何设计的。
要点
- 检索在代理内存中占主导地位,因为它非常适合编码并且添加成本低廉;当代理处理持续状态(完整性、一致性、来源)时,它就会中断。
- 主要项目(Zep、Mem0、Letta、LangMem)正在添加结构,但完全融合面临障碍:模式优先与相似性优先查询、确定性身份、仅附加出处、本地优先控制。
- 结构化状态在完整集、下周相同答案、出处、回滚和跨工具一致性方面获胜;检索取胜于探索、总结和较低的前期成本。
- 结构化状态具有实际成本(模式开销、摄取复杂性、冷启动); Neotoma 通过不断发展的模式、基于哈希的 ID 和双路径摄取来缓解这些问题,但并没有消除它们。
- Neotoma 是检索的补充,而不是替代:模式优先查询、规范 ID、仅附加观察、跨工具 MCP、默认情况下本地优先。

对于本地和开放代理内存,检索是默认设置:RAG 管道、代理搜索、嵌入存储和图形遍历是大多数构建器首先要做的。一项 2026 年调查 得出的结论是,内存设计,而不是模型能力,现在是长寿命智能体的限制因素。
检索对于编码和探索来说效果很好,但当代理处理正在进行的状态时,它就会崩溃。主要项目(Zep、Mem0、Letta、LangMem)正在添加实体解析、持久性和图结构,但完全融合到结构化设计面临着难以改造的障碍:模式优先查询、确定性身份、仅附加出处和本地优先控制。
为什么检索占主导地位
检索适合将代理放在地图上的用例:编码。代码库是探索性的,您通常不知道事物位于何处,并且您想“我们在哪里处理 X?”而不是“列出每个函数的出处”。语义搜索和即席遍历非常适合于此。
大多数人通过编码形成对智能体记忆的直觉,其中检索就足够了。问题就出在这一点上。对于任务、联系人、交易和承诺等操作状态,您下周需要相同的答案、全套和审计跟踪。
添加检索也很便宜。您可以嵌入文档,连接向量存储,并在一个下午内拥有工作记忆,无需模式设计,无需实体解析,也无需来源跟踪。这是一个真正的优势,而不仅仅是惯性。
检索中断的地方
当你依靠特工记忆来获取真相时,断裂就会出现。
答案不一致。 询问“列出项目 X 的所有任务”,一天返回七个结果,第二天返回四个结果。检索每次都会重新推断。 研究证实,代理会合并不同会话中的信息,并随着记忆的增长而产生暂时不一致的答案。
不完全召回。 检索召回率低于 80% 的 RAG 系统显示 幻觉率为 34%,而召回率高于 90% 的系统的幻觉率为 20%。基于嵌入的检索丢弃了时间和关系结构,拥有的实体越多,召回率就越差。
无出处。 当你问“这个数字是从哪里来的?”检索可以让您从出现的任何块中推断出答案。从答案到源记录没有任何血统。
不可恢复的写入。 当代理覆盖联系人或合并任务时,之前的状态就会消失。没有版本控制,也没有回滚。
跨工具漂移。 在 ChatGPT 中创建的任务无法在 Cursor 中可靠地查询。提供程序内存不可预测地不一致,并且默认情况下开放检索设置也不是跨工具的。
结构化状态提供什么
结构化状态意味着具有类型化实体、稳定 ID、关系和时间线的存储。相同的查询每次都会返回相同的结果,并且您可以获得来源和回滚。
结构化存储可以是图形形状的,我正在构建的存储层 Neotoma 是:一个与 MCP 兼容的本地存储层,为代理提供实体、关系和谱系的单一事实来源。它与检索中常见的“图形设置”的区别在于持久性、规范 ID 和出处。我在其他地方写了更多关于为什么代理内存需要真相层 的内容。
领域正在移动的地方
主要项目正在从检索方面转向结构化状态。
**Zep/Graphiti**构建了一个时间知识图,其精度比 MemGPT 提高了 18.5%,延迟降低了 90%,并配备了 MCP 服务器。它是当前生态系统中最接近结构化状态的。
Mem0 使用两阶段提取和合并管道,报告的准确度比 OpenAI 的内存高 26%,并具有实体关系的图形变体。它仍然主要是检索优先,并且结构化层是附加的。
Letta(以前的MemGPT)将所有状态保留在数据库中,具有可编辑的内存块。它是检索源项目最明确的“结构化状态”。
**LangMem/LangGraph**提供了一个持久内存SDK,具有语义、情景和过程类型以及内存整合。持久层是真实的,但主要访问模式仍然是嵌入搜索。
Hindsight(2025 年研究) 将内存组织成四个逻辑网络,并在长期基准测试中实现 83-91% 的准确率。它表明了方向:具有显式实体网络的结构化记忆优于平面检索。
检索系统可以完全收敛吗?
有些东西自然会融合,但另一些东西在结构上很难改造。
已经收敛的东西。 实体提取和图结构在 Zep 和 Mem0g 中是真实的。 Letta 和 LangGraph 中的数据库持久性是真实存在的。 Graphiti 中的时间跟踪是真实的。这些正在缩小差距。
相似性优先与模式优先。 检索的默认访问模式是“查找相似的事物”。结构化存储的默认设置是“按类型、ID、关系或时间查询”。建立一个模式优先的检索系统意味着改变 API 表面和用户期望,而不仅仅是添加一个功能。
隐式身份与显式身份。 如果两个块的嵌入接近,则检索会将它们视为同一实体。如果两条记录共享规范 ID,结构化状态会将它们视为同一实体。改造确定性身份意味着改变每一个摄取路径。
更新插入与仅追加存储。 检索系统通常会进行覆盖,而仅追加存储会保留历史记录。 Letta 使用可变内存块,Zep 跟踪时间演化,更接近。大多数检索系统没有写入历史的概念。
通过合并确定出处。 当 Mem0 合并事实或 LangMem 合并相关记忆时,原始来源的出处通常会丢失。在合并中幸存下来的来源需要存储模型从一开始就支持它。
确定性。 检索涉及排名,并且每次运行的结果都不同。结构化查询是确定性的:相同的查询返回相同的结果。删除排名功能会破坏检索的有用性。这些是根本不同的查询合约。
本地优先控制。 使系统真正本地化,不依赖云,也没有遥测,与大多数内存公司的商业模式相冲突。这不是技术障碍;这是一个结构性激励问题。
检索系统可以实现结构化存储,但最后一英里需要模式优先查询、确定性身份、仅附加出处、确定性结果和本地优先默认值。这些选择违背了检索优先架构的原则。
哪些检索还做得更好
探索。 当您想在笔记中查找有关巴塞罗那公寓的任何内容时,您不知道架构或实体类型。检索表面相关位,无需预先建模。
总结。 当您询问与承包商的决定时,检索可以在一次会话中搜索、提取和总结。您不需要该答案在下次保留或完全匹配。
临时遍历。 当您询问 Stripe webhooks 在哪里处理时,布局因代码库和文档而异。检索无需统一的图表即可适应。
前期成本低。 您可以在一个下午就拥有工作记忆。对于任何不需要完整性、一致性或出处的东西,检索就足够了,而且成本更低。
结构化状态的差距以及 Neotoma 如何解决这些差距
模式开销。 Neotoma 使用不断发展的模式注册表,其中 LLM 辅助提取在摄取期间提出类型和关系。这降低了前期成本,但并没有消除它。在实践中,代理会随着时间的推移在遇到不一致时审查并纠正提取结果。
摄取复杂性。 Neotoma 通过识别属性来计算基于哈希的规范 ID,因此无论来源如何,相同的实体都会获得相同的 ID。这比基于嵌入的相似性更容易预测,但它取决于提取质量:“Mark”和“Mark Hendrickson”的哈希值不同,直到您合并它们。
冷启动。 Neotoma 支持双路径摄取:您可以上传文件进行批量提取或通过代理对话增量累积状态。这不是即时的,但比等待足够的对话来构建有用的图表要快。
仅附加成本。 存储空间随着每次更正而增长,这使得回滚和来源成为可能。在个人和运营规模上,这是可以管理的,但这是一个真正的权衡:解决当前状态的查询更加复杂。
不是检索的替代品。 Neotoma 通过类型、ID、关系、时间范围和图邻域提供结构检索,并期望代理搜索和嵌入搜索等检索工具来处理探索。它是补充,而不是替代。
为什么我要构建 Neotoma
我在实践中达到了检索极限。任务、联系人和事务需要规范 ID、沿袭和跨工具访问。设计选择直接响应上述的收敛障碍。
模式优先。 查询按实体类型、ID、关系或时间范围进行。查询路径中不存在嵌入相似性,结果是确定性的。
基于哈希的身份。 无论哪个源或会话引入它,相同的实体都会获得相同的 ID。
仅附加。 每个事实都可以追溯到其来源。更正会创建新记录,并且可以回滚。
通过 MCP 的跨工具。 可从任何 MCP 客户端访问一个内存层:Cursor、ChatGPT、Claude 或 Claude Code。相同的数据和相同的 ID 随处可见。
本地优先。 所有数据都存在于 SQLite 和本地文件中。不存在云依赖性,也没有遥测。您可以验证系统所做的一切。
Neotoma 还早。它是一个开发人员版本:仅限本地、CLI 优先、具有启发式实体解析、手动模式演化,并且没有 Web UI。它提供的是契约,论点是这个契约对于处理持续状态的代理来说是必要的,而仅靠检索无法提供它。
该领域正在向结构化内存方向靠拢。问题是谁用您的数据构建您信任的层以及它提供什么保证。我希望从一开始就构建该层,而不是事后用螺栓固定。本地优先、开放、可检查且受用户控制。