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