RAG 系統的索引通常是把長文件切成小段(chunk),分別 embedding 後存入向量資料庫。這個做法有個根本問題:切塊之後,每個 chunk 失去了它在原文件中的脈絡。
一個路線描述文件可能包含:
- 第一段:路線概述(位置、難度、類型)
- 第二段:攀爬技術重點
- 第三段:注意事項和建議裝備
如果只存第二段的 chunk:「此路線關鍵動作在第三個保護點之後,需要平衡動作配合腳法」,脫離了上下文之後,這個 chunk 完全不知道在說哪條路線、哪個岩場、什麼難度。搜尋時命中這個 chunk,LLM 拿到的 context 缺乏關鍵資訊。
Contextual Retrieval(由 Anthropic 提出)的解法:在索引時為每個 chunk 注入文件級別的上下文摘要。
設計
索引流程不只是 chunk → embedding,而是:
Document
↓
[Document Summary] ← LLM 生成 2-3 句摘要
↓
[Chunk Splitting] ← 切成小段
↓
每個 chunk 注入 summary:
context = "[文件摘要:{summary}]\n\n{chunk_content}"
↓
[Embedding]
↓
[Vector Store]
搜尋時命中的是帶有文件上下文的 chunk,LLM 就算只看到一個小段落,也能知道這段來自哪裡、說的是什麼背景下的事。
Prompt 設計
文件摘要生成:
請為以下攀岩內容生成 2-3 句精簡摘要,包含最重要的資訊(岩場、難度、類型等)。
摘要會附加在文件的每個段落前,幫助搜尋時的語義理解。
內容:{document_content}
摘要(2-3 句):
生成的摘要例子:
龍洞北壁路線,難度 5.11a,運動攀登類型,位於新北市貢寮區。
此路線以技術難度聞名,需要良好的腳法和平衡能力。
適合中高級攀岩者,保護點充足但間距較大。
注入後的 chunk:
[文件摘要:龍洞北壁路線,難度 5.11a,運動攀登類型,位於新北市貢寮區。
此路線以技術難度聞名,需要良好的腳法和平衡能力。適合中高級攀岩者,保護點充足但間距較大。]
關鍵動作在第三個保護點之後,需要平衡動作配合腳法,建議在此前充分休息...
現在這個 chunk 即使單獨出現,搜尋引擎和 LLM 都能理解它的背景。
異步執行
文件摘要生成不在主查詢路徑上,而是在文件被加入索引時進行,使用 Cloudflare Workers 的 ctx.waitUntil():
async function indexDocument(doc: Document, env: Env, ctx: ExecutionContext) {
// 同步:基礎文件 embedding(立即可搜尋)
await embedAndStore(doc);
// 異步:生成上下文摘要並重建索引(不阻塞回應)
ctx.waitUntil(
generateContextualEmbeddings(doc, env)
);
}
這樣文件可以立即被搜尋到(基礎 embedding),Contextual 版本在背景生成後無縫升級,不需要停機或重建索引。
效果
Anthropic 的研究顯示,Contextual Retrieval 把 chunk 搜尋的 top-20 recall 提升了 49%(配合 BM25),在某些測試集上甚至達到 67%。
在攀岩這個場景,效益特別明顯:許多路線資訊的 chunk 本身很短(「第三段的技術關鍵是…」),脫離上下文幾乎沒有意義。注入岩場名稱、難度、類型之後,同樣的 chunk 搜尋相關性大幅提升。
成本考量
每個文件需要一次額外的 LLM 呼叫(生成摘要)。如果文件庫很大,索引成本會上升。幾個緩解方式:
- 增量索引:只對新增/修改的文件重新生成摘要
- 批次處理:夜間離峰時段批次更新
- 摘要快取:文件沒變的話,摘要可以重用
對搜尋品質的顯著提升,這個索引成本是值得的。
整體來說
Contextual Retrieval 解決的是 RAG 系統的一個底層問題:chunk 切割損失了上下文。這個問題在索引設計階段解決比在搜尋或生成階段補救更有效——資料品質的提升遠比演算法技巧更根本。
「垃圾進,垃圾出」是 RAG 系統最常見的失敗原因。Contextual Retrieval 確保進去的每個 chunk 都是「有意義的資訊單元」,而不只是被截斷的文字片段。
參考資料
- Contextual Retrieval — Anthropic
- Introducing Contextual Retrieval(Anthropic Engineering)
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(arXiv)
- Full text queries(Elasticsearch / BM25 hybrid search)
- iThome 鐵人賽 — Contextual Retrieval 相關文章
- NobodyClimb 系統架構:Cloudflare 全端攀岩社群平台
- NobodyClimb AI 架構:20 節點 RAG Pipeline