Anthropic 上下文检索

Anthropic 推出了 上下文检索,这是一种用于检索增强生成(RAG)的预处理技术,当结合上下文嵌入和 BM25 时,可将检索失败率降低 49%;若进一步整合重排序(reranking),失败率可降低 67%。该方法解决了传统 RAG 中的“上下文困境”问题——即传统 RAG 的文本块在分割后丢失了必要的背景信息,导致 AI 模型无法准确检索或使用。

传统 RAG 中的上下文困境

传统 RAG 系统通常将文档拆分为较小的块(通常为几百个 token),以保持效率。然而,这一过程常常破坏了关键上下文。例如,一个仅包含“公司收入增长了 3%”的文本块,若系统无法判断其指代的是哪家公司或哪个时间段,当用户针对特定实体提出具体问题时,就会导致检索失败。

上下文检索的工作原理

上下文检索通过在每个文本块嵌入或索引前,为其添加一段简短而明确的解释性上下文(通常为 50–100 个 token),从而解决上下文丢失问题。

通过 Claude 实现

为避免手动标注,Anthropic 使用 Claude 3 Haiku 自动生成该上下文。模型会接收整个文档和特定文本块,然后被提示生成一段简短的上下文,以帮助在整体文档中定位该块,从而提升检索效果。

预处理流程

  1. 上下文生成:Claude 根据整个文档为每个文本块生成简洁的上下文。
  2. 上下文嵌入:将带有上下文的文本块转换为向量嵌入。
  3. 上下文 BM25:使用 BM25(最佳匹配 25)对上下文化后的文本块进行索引,以实现词汇匹配。
  4. 混合搜索:系统通过排名融合(rank fusion)结合语义嵌入和 BM25 的结果,找出最相关的文本块。

性能基准测试

Anthropic 在多个领域(包括代码库、小说和科学论文)测试了该方法。使用 1 减去 recall@20 作为指标(衡量未能检索到的相关文档占比),结果如下:

  • 上下文嵌入:将前 20 个文本块的检索失败率降低了 35%(从 5.7% 降至 3.7%)。
  • 上下文嵌入 + 上下文 BM25:失败率降低 49%(从 5.7% 降至 2.9%)。
  • 上下文检索 + 重排序:在上述基础上增加重排序步骤(使用 Cohere 重排序器),失败率降低 67%(从 5.7% 降至 1.9%)。

成本与延迟优化

提示词缓存

为每个文本块生成上下文可能成本较高。Anthropic 利用 提示词缓存 来降低开销。通过仅缓存一次参考文档,并在每个文本块中复用,生成上下文化文本块的一次性成本约为 每百万文档 token 1.02 美元(基于 800 token 的文本块和 8k token 的文档)。

重排序的权衡

虽然重排序显著提升了准确性,但也增加了运行时步骤,导致延迟和成本上升。开发者需在重排序的文本块数量(例如检索 150 个并重排序至 20 个)与所需响应速度之间进行权衡。

关键实现建议

基于大量测试,Anthropic 提供了以下建议,以最大化 RAG 性能:

  • 使用混合搜索:结合嵌入和 BM25 的效果优于仅使用嵌入。
  • 选择高性能嵌入模型:Gemini 和 Voyage 嵌入模型表现尤为出色。
  • 优化文本块数量:通常将前 20 个文本块传递给模型,效果优于传递 5 或 10 个。
  • 组合技术:最高性能通过结合上下文嵌入、上下文 BM25 和重排序步骤实现。

Sources

相关

  • Dispatch
  • Dispatch
  • 项目
  • Dispatch
  • Dispatch