Anthropic 上下文檢索技術提升 RAG 准確度

TL;DR

Anthropic 推出 上下文檢索,一種在建立嵌入向量與 BM25 索引前,為每個文件片段預先附加簡潔、片段專屬的上下文資訊的技術,僅使用上下文嵌入向量即可將前 20 個片段的檢索失敗率降低 49%,若再結合重排序(reranking)則可達 67%。此方法現已可透過 Claude 和公開的食譜(cookbook)部署,為大型知識庫提供一種成本效益高的方式來提升檢索增強生成(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

相關