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)。
實作流程
- 分割語料庫 – 將文件分割成最多數百詞元的片段。
- 產生上下文元資料 – 使用 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