[Boris Cherny（Anthropic 的 Claude Code 的创建者）发推文](https://x.com/bcherny/status/2017824286489383315) Claude Code 从 RAG 加本地向量数据库转向代理搜索。他说，它的效果更好，而且更简单，安全和隐私方面的问题也更少。其他工具则走不同的道路。例如，Cursor 使用基于云的嵌入来索引代码库并通过语义相似性进行搜索。

因此，我们至少有两种检索范式：基于嵌入的搜索（预索引、向量相似性）和代理搜索（按需工具使用）。它们不一样。每个都有不同的权衡。两者都是检索策略。真相层是另一回事。它保留规范实体、维护来源并支持确定性查询。这是关于状态，而不是检索。这篇文章将真实层与两种检索模型进行了比较。它还与我仅依靠检索时所遇到的限制有关。

## 我遇到极限的地方

我使用 Cursor 作为我所有数字工作流程的中心界面，而不仅仅是编码。电子邮件分类、任务管理、财务查询、内容规划、交易、联系人。它们都通过相同的代理运行并访问相同的存储库。跨文件的代理搜索通常效果很好。代理查找上下文、推断联系并完成任务。

但我已经达到极限了。代理人推断；它不能保证。看起来是这样的：

- **数据集大，召回不完整。** 按需搜索会遗漏或截断数千个交易或数百个联系人。每次检索都会重新推导。没有结构化存储来查询完整的结果。
- **不可恢复的覆盖。** 客服人员覆盖联系人或任务，并且之前的状态消失。没有回滚。写入就位。没有版本控制或仅附加跟踪来跟踪和回滚。
- **没有跨工具访问。** 我无法使用 Claude.ai 或 ChatGPT 中的相同记录。检索受提供者限制。
- **不可重复的答案。**同样的问题，不同的答案。我无法重现结果以进行验证或调试。检索是不确定的。
- **没有可追溯性。** 当代理给出错误的号码或索赔时，我无法追溯到源文件或记录。检索没有出处。
- **不稳定的规范身份。** 代理可能会将“Acme Corp”和“ACME CORP”在一个会话中视为相同，而在下一个会话中视为不同。检索每次都会重新推断。没有持久的规范 ID 或合并规则。

## 两种检索范式，一种状态范式

基于嵌入的搜索和代理搜索都向代理获取信息。它们不一样。基于嵌入的搜索（例如光标）通过向量相似度对语料库和答案进行预索引。该索引可以在云中托管和更新。代理搜索（例如克劳德代码）跳过持久索引并使用工具按需搜索和读取。不同的实现，不同的权衡：隐私、陈旧性、简单性。

他们共享的是检索。代理在查询时查找内容。真相层不是检索。它是持久的、结构化的状态：规范实体、出处、确定性查询。

我们将一种状态范式（真相层）与两种检索范式（基于嵌入和代理）进行比较。下表列出了这三者。当两个检索列共享一个限制（例如没有出处）时，这就是它们之间相对于真实层的相似性。这不是两者的等式。

|域名 |基于嵌入的搜索 |代理搜索|真相层 |
|--------------------|------------------------|----------------|--------------|
|文献检索|预索引相似度、语义匹配 |按需搜索、推理 |实体解析、重复数据删除、来源 |
|多源聚合 |索引范围和新鲜度取决于构建|跨来源实时搜索 |统一图，确定性合并 |
|实体查找 |嵌入的相似性；没有规范的 ID |每会话推理 |规范ID，基于规则的合并|
|时间线查询 |仅当已编入索引时；没有本地时间模型|按需组装|预先计算、模式驱动 |
|出处和审核 |无 |无 |不可变的审计跟踪 |
|跨平台|与提供商/索引相关 |特定于提供商的工具 |跨工具的相同数据 |

两种检索方法都针对便利性和灵活性进行了优化。真相层针对一致性和可验证性进行了优化。

## 真相层提供什么

结构化内存层是围绕不同的原语构建的：

1. **持久规范身份。** 跨会话和工具的稳定实体 ID。
2. **确定性合并逻辑。** 基于规则的观察组合，而不是每次会话的 LLM 推理。
3. **出处和审核。** 从来源到答案的可追溯血统。
4. **幂等性。** 相同的输入产生相同的输出。
5. **跨平台真相。** ChatGPT、Claude、Cursor 具有相同的内存。
6. **清晰的隐私模型。** 用户控制，无提供商培训使用，清晰的数据边界。

这些并不是对代理搜索的增量改进。它们是不同的设计。尽力而为的检索和编排与可验证、可重播的状态。选择取决于您的需要。

## 检索可以近似什么（代理或基于嵌入）

三个示例显示检索（代理或基于嵌入）近似于上述功能。在每个示例中，代理都会得到当前看起来正确的东西。在每一个中，都出现了相同的限制：没有持久的规范身份，没有出处，不能保证“相同的查询”在会话或索引重建中产生“相同的结果”。下面的示例使用代理术语（工具、按需搜索）。基于嵌入的检索可以通过索引上的语义搜索来近似相同的行为，并达到相同的限制。

**示例 1：会话范围的实体解析。** 代理具有搜索文件、电子邮件和云的工具。它具有将同一实体的提及视为一个实体的说明。您问：“我在 Acme Corp 的总支出是多少？”代理人搜索银行出口、收据、发票。它找到“Acme Corp”、“ACME CORP”、“Acme Corporation”，推断相同的实体和金额。这看起来像是此查询和会话的实体解析。出了什么问题：明天再问，数字可能会有所不同。代理可能会丢失文件（搜索被截断、路径错误）并且计数不足。或者，它可能将“Acme Corp”和“Acme Industries”视为相同并多算。没办法验证。没有审计追踪，没有稳定的 ID。不同的会议可能会有不同意见。

**示例 2：按需时间线组装。** 代理具有广泛的文件和数据访问权限。您问：“2024 年第三季度我的主要支出是什么？”该代理搜索、解析日期、组装按时间顺序排列的列表、按“专业”进行过滤。您无需专用时间线系统即可获得类似时间线的答案。出了什么问题：每次都会推断出“Major”。一次会议不包括 500 欧元的物品。接下来包括它。具有非标准日期格式的文档会被丢弃或排序错误。当有 15 个时，代理可能会截断（“这里是前 10 个”）。每次相同的查询，不同的结果。

**示例 3：混合内存层。** 提供商提供代理搜索和轻量级内存。代理提取结构化片段，存储它们，并在以后检索它们。它处理收据，存储“{供应商：“Acme Corp”，金额：150，日期：“2024-07-15”}`。稍后的会话将检索此内容并与实时搜索结果合并。这看起来像结构化记忆。出了什么问题：稍后的提取会覆盖该片段。无版本控制，无回滚。同一供应商在存储内存中显示为“Acme Corp”，在新搜索中显示为“ACME CORP”。重复累积。提供商更改了功能或架构，您存储的片段就会消失。无法追踪错误号码的来源。

在每个示例中，行为都近似于真实层提供的行为。限制是检索所固有的。无论代理使用嵌入搜索还是代理搜索，您仍然可以获得会话范围和基于推理的合并。您仍然得不到来源和跨平台保证。真相层通过持久化状态而不是重新检索状态来解决这些问题。

## 当检索表现出色时（代理或基于嵌入）

**探索性发现。**“在我的下载或笔记中找到有关巴塞罗那公寓的任何内容。”你不知道它住在哪里，也不知道它叫什么。跨文件、文件夹和格式的代理搜索会显示相关片段。无需架构。代理进行推断和组装。

**快速跨源总结。**“我们在与承包商的最后三封电子邮件中决定了什么？”搜索收件箱、提取主题、总结。一场会议，一个答案。您不需要该摘要在下次保留或完全匹配。

**临时代码和文档遍历。**“我们在哪里处理 Stripe webhook？”搜索代码库、自述文件、内部文档。布局因存储库而异。代理搜索适应。不需要统一的图表。

**单文档或单线程分类。**“总结此 PDF”或“这封电子邮件的要求是什么？”上下文是有界的。推理就足够了。无实体解析或跨会话状态。

## 当真相层表现出色时

**对大型数据集的完整回忆。**“列出过去两年中与供应商 X 的每笔交易。”对于数千行，代理搜索可能会丢失记录、截断或产生幻觉聚合。真相层查询结构化存储。您可以获得所有匹配的记录或精确的计数。

**跨会话一致性。** 代理在会话一中创建后续任务。您明天将开启一个新会话。该任务必须在那里，并链接到正确的联系人和电子邮件。代理搜索没有持久图。真相层可以。

**审计和出处。** “这个数字是从哪里来的？”追踪源记录、导入日期和派生规则。代理搜索返回推断的答案。真相层返回带有血统的答案。

**大规模实体解析。** 数百个联系人，一些重复（名称变化、合并的公司）。数以千计的交易以不同的拼写引用同一供应商。真实层维护规范 ID 和合并规则。代理搜索会重新推断每个会话，并且可能会不一致。

**确定性重播。** 每次都是相同的查询，相同的结果。对于报告、合规性或调试至关重要。代理搜索是不确定的。真相层是幂等的。

**不良写入的可恢复性。** 代理会覆盖联系人、将两个任务合并为一个，或者根据错误的推理“纠正”事务。通过代理搜索和直接文件写入，以前的状态就消失了。无法撤消。真相层使用仅附加或版本化写入。您可以跟踪更改的内容并回滚。突变是显式操作，而不是静默覆盖。

## 为什么区别很重要

检索（基于嵌入或代理）是会话绑定的。它本身并不为您提供持久的身份、出处或跨会话一致性。它的价值在于灵活、按需访问。真相层的价值是持久的、跨会话的真相。确定性、可审计的实体解析很困难。嵌入相似性和临时代理搜索都不等同。提供商托管的代理面临着与用户控制的、隐私优先的记忆相冲突的激励。他们的记忆和工具往往是特定于产品的。

切尔尼的推文反映了一个真正的转变。 RAG 加上矢量 DB 非常复杂，并且会影响隐私。代理搜索简化了克劳德代码的检索。光标和其他人采取不同的检索路径（云嵌入）。两种检索范式都解决了“代理如何找到东西？”两者都没有解决“我们如何获得稳定的身份、出处和验证？”真相层针对的是后者。检索层和状态层将共存。他们解决不同的问题。

## 我正在构建什么

我正在构建 [Neotoma](https://github.com/markmhendrickson/neotoma)，这是一个采用真相层方法的结构化内存层：实体解析、时间线、出处、确定性、通过 MCP 跨平台。我正在我自己的代理堆栈中对其进行测试，以了解这些原语在实践中的重要性。基于嵌入的搜索和代理搜索是两种检索策略。两者都不给你持久的身份或可验证的状态。真相层可以。我正在构建后者。