对于本地和开放代理内存，检索是默认设置：RAG 管道、代理搜索、嵌入存储和图形遍历是大多数构建器首先要做的。一项 [2026 年调查](https://arxiv.org/abs/2602.19320) 得出的结论是，内存设计，而不是模型能力，现在是长寿命智能体的限制因素。

检索对于编码和探索来说效果很好，但当代理处理正在进行的状态时，它就会崩溃。主要项目（[Zep](https://www.getzep.com/)、[Mem0](https://mem0.ai/)、[Letta](https://www.letta.com/)、[LangMem](https://langchain-ai.github.io/langmem/)）正在添加实体解析、持久性和图结构，但完全融合到结构化设计面临着难以改造的障碍：模式优先查询、确定性身份、仅附加出处和本地优先控制。

## 为什么检索占主导地位

检索适合将代理放在地图上的用例：编码。代码库是探索性的，您通常不知道事物位于何处，并且您想“我们在哪里处理 X？”而不是“列出每个函数的出处”。语义搜索和即席遍历非常适合于此。

大多数人通过编码形成对智能体记忆的直觉，其中检索就足够了。问题就出在这一点上。对于任务、联系人、交易和承诺等操作状态，您下周需要相同的答案、全套和审计跟踪。

添加检索也很便宜。您可以嵌入文档，连接向量存储，并在一个下午内拥有工作记忆，无需模式设计，无需实体解析，也无需来源跟踪。这是一个真正的优势，而不仅仅是惯性。

## 检索中断的地方

当你依靠特工记忆来获取真相时，断裂就会出现。

**答案不一致。** 询问“列出项目 X 的​​所有任务”，一天返回七个结果，第二天返回四个结果。检索每次都会重新推断。 [研究证实](https://arxiv.org/abs/2512.12818)，代理会合并不同会话中的信息，并随着记忆的增长而产生暂时不一致的答案。

**不完全召回。** 检索召回率低于 80% 的 RAG 系统显示 [幻觉率为 34%，而召回率高于 90% 的系统的幻觉率为 20%](https://www.ijmsrt.com/storages/download-paper/IJMSRT25SEP018)。基于嵌入的检索丢弃了时间和关系结构，拥有的实体越多，召回率就越差。

**无出处。** 当你问“这个数字是从哪里来的？”检索可以让您从出现的任何块中推断出答案。从答案到源记录没有任何血统。

**不可恢复的写入。** 当代理覆盖联系人或合并任务时，之前的状态就会消失。没有版本控制，也没有回滚。

**跨工具漂移。** 在 ChatGPT 中创建的任务无法在 Cursor 中可靠地查询。提供程序内存[不可预测地不一致](https://www.datastudios.org/post/can-chatgpt-remember-previous-conversations-memory-behavior-session-limits-and-persistence)，并且默认情况下开放检索设置也不是跨工具的。

## 结构化状态提供什么

结构化状态意味着具有类型化实体、稳定 ID、关系和时间线的存储。相同的查询每次都会返回相同的结果，并且您可以获得来源和回滚。

|需要|结构化商店 |检索|
|------|--------------------|------------|
|完整集（“项目 X 中的所有任务”）|是的，通过模式和关系 |部分或推断|
|下周同样的答案 |是的 |没有 |
|溯源|是的，来源链 |没有 |
|从错误写入中恢复 |是，如果仅附加 |通常没有 |
|跨工具一致性 |是的，如果是跨平台的话 |仅当所有工具共享相同后端时 |
|探索未知 |可能但不是它的力量|是的，这就是检索的优势 |
|一次性总结 |矫枉过正|是的 |

结构化存储可以是图形形状的，我正在构建的存储层 [Neotoma](https://neotoma.io) 是：一个与 MCP 兼容的本地存储层，为代理提供实体、关系和谱系的单一事实来源。它与检索中常见的“图形设置”的区别在于持久性、规范 ID 和出处。我在其他地方写了更多关于[为什么代理内存需要真相层](/posts/truth-layer-agent-memory) 的内容。

## 领域正在移动的地方

主要项目正在从检索方面转向结构化状态。

**[Zep](https://www.getzep.com/)/[Graphiti](https://www.getzep.com/)**构建了一个[时间知识图](https://arxiv.org/abs/2501.13956)，其精度比 MemGPT 提高了 18.5%，延迟降低了 90%，并配备了 MCP 服务器。它是当前生态系统中最接近结构化状态的。

**Mem0** 使用[两阶段提取和合并管道](https://mem0.ai/research)，报告的准确度比 OpenAI 的内存高 26%，并具有实体关系的图形变体。它仍然主要是检索优先，并且结构化层是附加的。

**[Letta](https://www.letta.com/)**（以前的[MemGPT](https://docs.letta.com/guides/legacy/memgpt-agents-legacy)）[将所有状态保留在数据库中](https://docs.letta.com/guides/agents/context-engineering)，具有可编辑的内存块。它是检索源项目最明确的“结构化状态”。

**[LangMem](https://langchain-ai.github.io/langmem/)/[LangGraph](https://langchain-ai.github.io/langgraph/)**提供了一个[持久内存SDK](https://blog.langchain.com/langmem-sdk-launch/)，具有语义、情景和过程类型以及内存整合。持久层是真实的，但主要访问模式仍然是嵌入搜索。

**[Hindsight](https://arxiv.org/abs/2512.12818)**（[2025 年研究](https://arxiv.org/abs/2512.12818)) 将内存组织成四个逻辑网络，并在长期基准测试中实现 83-91% 的准确率。它表明了方向：具有显式实体网络的结构化记忆优于平面检索。

## 检索系统可以完全收敛吗？

有些东西自然会融合，但另一些东西在结构上很难改造。

**已经收敛的东西。** 实体提取和图结构在 Zep 和 [Mem0g](https://mem0.ai/) 中是真实的。 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](https://neotoma.io) 还早。它是一个[开发人员版本](/posts/neotoma-developer-release)：仅限本地、CLI 优先、具有启发式实体解析、手动模式演化，并且没有 Web UI。它提供的是契约，论点是这个契约对于处理持续状态的代理来说是必要的，而仅靠检索无法提供它。

该领域正在向结构化内存方向靠拢。问题是谁用您的数据构建您信任的层以及它提供什么保证。我希望从一开始就构建该层，而不是事后用螺栓固定。本地优先、开放、可检查且受用户控制。