Anthropic 上下文检索技术提升 RAG 准确性

TL;DR

Anthropic 推出了 上下文检索(Contextual Retrieval)技术,该技术在创建嵌入和 BM25 索引之前,为每个文档块前添加简洁的、与块相关的上下文信息,仅使用上下文嵌入即可将前 20 个块的检索失败率降低 49%,结合重排序后可降低 67%。该方法可通过 Claude 和公开的使用手册立即部署,为大型知识库提供一种成本效益高的方式来提升检索增强生成(RAG)性能。


传统 RAG 为何会丢失上下文

传统 RAG 将语料库拆分为小块,对每一块进行嵌入,并在向量数据库中搜索语义相似性。这种方法常常丢弃文档的上下文信息,导致块内容模糊,缺乏关键标识(例如,缺少公司名称的营收增长句子)。上下文的丢失可能导致系统检索到无关或不完整的信息,从而降低下游模型的性能。


核心思想:上下文检索

上下文检索通过在嵌入和构建 BM25 索引之前,为每个块预先添加解释性元数据,解决了上下文丢失的问题。添加的元数据(“上下文化块”)描述了该块的来源——文档标题、章节、日期或其他显著信息,同时保持简短(约 50–100 个标记)。

示例转换

original_chunk = "The company's revenue grew by 3% over the previous quarter."

contextualized_chunk = "This chunk is from an SEC filing on ACME Corp's performance in Q2 2023; the previous quarter's revenue was $314 million. The company's revenue grew by 3% over the previous quarter."

然后将上下文化块进行嵌入(上下文嵌入),并使用 BM25 进行索引(上下文 BM25)。


实施流程

  1. 拆分语料库 – 将文档拆分为 ≤ 几百个标记的片段。
  2. 生成上下文元数据 – 使用 Claude 3 Haiku,通过接收整个文档和目标块的提示,返回一个简洁的上下文字符串。
  3. 前置上下文 – 将生成的元数据附加到原始块上。
  4. 创建嵌入 – 将上下文化块输入嵌入模型(例如,Gemini Text-004、Voyage)。
  5. 构建 BM25 索引 – 使用基于 TF-IDF 的 BM25 对相同的上下文化文本进行索引。
  6. 运行时检索 – 查询向量存储和 BM25,融合结果,去重,并将前 K 个块(通常为 20 个)传递给生成模型。
  7. 可选重排序 – 对初始前 N 个块(≈150 个)运行重排序器(例如,Cohere),然后保留前 K 个用于最终提示。

步骤 2–5 的可视化概览见 Anthropic 博客中的图片。


定量影响

Anthropic 在多个领域(代码、小说、ArXiv、科研论文)和嵌入模型提供商上评估了上下文检索。主要指标为 1 – recall@20(前 20 个结果中遗漏的相关块的百分比)。结果如下:

配置 失败率(1 – recall@20) 相对改进
基线嵌入仅使用 5.7 %
+ 上下文嵌入 3.7 % 35 % 降低
+ 上下文嵌入 + 上下文 BM25 2.9 % 49 % 降低
+ 重排序(Cohere)在前 150 个 → 前 20 个 1.9 % 67 % 降低

所有测试的嵌入模型均受益,其中 Gemini 和 Voyage 表现最佳。


利用 Claude 提示缓存实现低成本部署

Claude 的 提示缓存 功能允许开发者一次性将整个文档加载到缓存中,并在每个块的上下文化步骤中重复使用。假设每块 800 标记,文档为 8k 标记,50 标记的上下文生成提示,每块约 100 标记的上下文,一次性成本仅为 每百万文档标记 1.02 美元。这使得大规模上下文化变得经济可行。


实际考虑因素

  • 块边界 – 选择能保留逻辑单元的大小、重叠和断点;块过小会稀释上下文,块过大则增加延迟。
  • 嵌入模型选择 – 虽然上下文检索提升了所有模型,但 Anthropic 测试中 Gemini Text-004 和 Voyage 嵌入表现最佳。
  • 自定义提示 – 调整 Claude 提示(例如,添加领域特定术语表)可进一步提升上下文相关性。
  • 检索块数量 – 实验表明,20 个块在相关性和模型负载之间取得了良好平衡;开发者应针对自身用例验证该数值。
  • 重排序权衡 – 添加重排序器可提高准确性,但会增加延迟和成本;并行评分可缓解延迟,但最优重排序的前 N 数值取决于预算和响应时间要求。

简单的长提示已足够的情况

如果知识库 < 200k 标记(约 500 页),Anthropic 建议直接将整个语料库嵌入提示中,利用 Claude 的提示缓存来保持低延迟和低成本(>2 倍加速,最高节省 90% 成本)。当语料库超过此规模时,上下文检索才真正有价值。


如何开始

Anthropic 提供了一个逐步操作的 使用手册,可自动化整个流程——从分块、上下文元数据生成,到嵌入、BM25 索引,以及可选的重排序。使用手册地址为:

https://platform.claude.com/cookbook/capabilities-contextual-embeddings-guide


总结

所有评估的技术——嵌入 + BM25上下文检索重排序——具有叠加效应。部署完整方案(上下文嵌入、上下文 BM25、重排序和前 20 个块选择)可最大程度降低检索失败率,从而实现最可靠的 RAG 驱动应用。


致谢

研究与撰写由 Daniel Ford 完成,Orowa Sikder、Gautam Mittal 和 Kenneth Lien 提供了关键反馈;Samuel Flamini 提供了实施支持;Lauren Polansky 负责项目协调;Alex Albert、Susan Payne、Stuart Ritchie 和 Brad Abrams 负责编辑润色。

Sources

相关