跳轉到

進階 RAG:先找出哪一步壞了,再加新技巧

RAG(Retrieval-Augmented Generation):先找相關資料,再依資料回答。

← 回到 Stage 6:RAG 與 Memory

基本 RAG 像「先翻書,再回答」。進階 RAG 不是把更多零件全裝上去,而是先看哪一步找錯資料,再只修那一步。

📌 學習目標

完成這頁後,你可以:

  1. 分清楚「找不到」「排序錯」「證據不夠」「回答亂講」四種問題。
  2. 知道何時該改搜尋、重排結果、換問法,或連起跨文件的關係。
  3. 用一小組固定問題比較修改前後,不靠一次漂亮回答下結論。
  4. 知道什麼時候先停在基本 RAG,不增加成本與複雜度。

🧩 先認識八個核心詞

核心詞 白話說法 這裡怎麼用
Chunk(資料片段) 把長文件切成小段 搜尋時先找片段,並保留它的來源。
Embedding(向量表示) 用一串數字表示文字意思 把問題與資料片段轉成可比較的數字。
Vector Search(向量搜尋) 找意思相近的內容 比較向量的相近程度,不只看字是否一樣。
BM25(關鍵字排名方法) 按字詞匹配程度排順序 例如找產品編號 AB-123;也考慮字詞多常見及文件長度。
Retriever(檢索器) 幫你找資料的零件 依問題找出可能有用的片段;這些就是「候選資料」。
Hybrid Search(混合搜尋) 兩種找法一起用 合併 BM25 與向量搜尋的結果,去掉重複資料。
Reranking(重新排序) 把找到的資料再排一次 再看問題與候選資料的關係,把更有用的往前放。
Baseline(基線) 修改前的成績 保存原本系統與測試結果,留待改完後比較。

先看這條路:問題 → 找候選資料 → 重新排序(可選)→ 依資料回答。Retrieval(檢索)是找資料;Generation(生成)是寫答案。先分清楚哪一步出錯,再改那一步。

🩺 先看症狀,再選方法

先固定一組問題,並標出每題該找回的資料。k 是只看前幾筆,例如 k = 5 就看前五筆。

  • Recall@k(前 k 筆召回率):該找回的資料,前 k 筆找回了多少比例。
  • 命中率:這組問題中,有多少比例的題目在前 k 筆至少找到一筆相關資料。

例如:一題該找回四份資料,前五筆找到兩份,Recall@5 就是 50%;這題也算命中。

例如搜尋 AB-123 的保固,卻只找到其他產品?先看正確資料有沒有被找回,再試 BM25。若已找回卻排很後面,再試 Reranking。兩者都正常,才檢查答案是否照著證據寫。

你看到的問題 先量什麼 第一個可試的方法 先不要做什麼
文件裡有答案,卻沒找回 Recall@k、命中率 調整切法或混合搜尋 先換更大的生成模型
正確資料有找回,但排很後面 人工看前 k 筆的順序 重新排序 一口氣增加很多零件
問題太模糊,或一次問太多事 各問法的命中率與等待時間 改寫或拆開問題 無限制地產生查詢
要連起多份文件的人物、事件 準備幾題跨文件問題,核對關係 先試關係搜尋 每個系統都先建圖
問題不需資料也一直搜尋 多查了幾次、花多少錢和時間 加入是否搜尋的判斷 無上限地重試
證據正確,答案卻不照證據寫 逐句核對答案與引用 改提示詞、引用與拒答規則 繼續改搜尋掩蓋回答問題

要把排序變成分數時,再用 MRR(Mean Reciprocal Rank)看第一筆相關結果是否夠前面;用 nDCG(Normalized Discounted Cumulative Gain)比較整體排序與理想順序。核對答案是否受證據支持,叫 Faithfulness(忠實度);它不等於答案符合所有外部事實。

📚 必修閱讀

請照順序讀;它們是學習主線,不藏在選單裡。

  1. LangChain:Retrieval 概念 — 分清楚保存資料、找資料與決定下一步的零件。
  2. Anthropic:Contextual Retrieval(情境化檢索) — 先替片段補來源背景,再建立搜尋用的目錄(索引)。
  3. Qdrant:Hybrid Queries — 看兩路搜尋結果如何合併與重新排序。
  4. Weaviate:Hybrid Search — 看另一種關鍵字與向量搜尋的合併方式。
  5. LangGraph:Agentic RAG(由 Agent 決定何時搜尋) — 先完成固定的「找資料 → 回答」,再看如何加入判斷。
  6. Ragas — 把「看起來不錯」改成可重跑的資料集與評測迴圈。

🪜 從基本到進階的順序

1. 先凍結一個最小 Baseline

準備 20–50 個經人工檢查的問題,每題保存預期來源與可接受答案。先跑目前的版本,記錄找回的資料、答案、等待時間(延遲)與成本。接著一次只改一件事,才知道是哪個改動有幫助。

2. 先修 Retrieval,再修 Generation

  • Chunking(切分資料):先按標題與段落切。再比較固定長度(fixed-size)、先找小段再帶回大段(parent-child),或按意思分段(semantic chunking)。
  • Metadata Filter(附加資料篩選):用片段的產品名稱、日期或權限等標籤縮小範圍。先確認篩選沒有擋掉正確資料。
  • Hybrid Search:BM25 補字詞匹配,向量搜尋補意思相近的內容;先測合併後是否真的找得更多。
  • Reranking 不會創造新文件;它只把已找回的候選重新排列。

文件也會提到 dense(密集向量)與 sparse(稀疏向量):前者通常大多數位置有數值,後者多數位置是零。Fusion(融合)是合併不同搜尋的分數或排名。向量的疏密本身不保證搜尋品質。

3. 問題不好找時,再做 Query Transformation

Query Transformation(查詢轉換)是把問題換個問法,或拆成小題後再找。先選一種試,不必全加。

  • Multi-Query:把同一問題改成幾種說法,各自搜尋後合併。
  • HyDE(Hypothetical Document Embeddings):先寫假想答案,轉成向量,再找真實資料。假想內容不是證據,也可能把搜尋帶偏。
  • RAG Fusion:合併多種問法得到的排名,降低單一措辭的影響。
  • Decomposition:把「比較 A、B 並解釋原因」拆成數個可以分別找證據的小問題。

4. 需要跨文件關係時,才考慮 GraphRAG

GraphRAG把文件中的人物、組織等「實體」及彼此的關係連成圖,再用來找證據。例如把「誰參與哪個計畫」跨文件連起來。單份問答或精確條款,通常先用一般檢索器就夠了。

Microsoft GraphRAG 是研究參考實作,官方目前標示為 largely in maintenance mode,仍修 bug 與依賴問題,但不再以新增功能為主。它的 indexing 可能昂貴,應先用小資料集。LightRAG 是另一套活躍的 graph-based RAG 實作,資料模型與 Microsoft GraphRAG 不相同,不能把兩者當成同一產品。

先拿「哪些人物共同影響這件事?」或「整批文件有哪些主題?」測試,確認建圖的成本有換到更好的答案。

5. 流程需要判斷時,才加 Corrective 或 Agentic RAG

前面的做法大多照固定步驟搜尋、回答。只有需要「現在要不要查、查不好怎麼辦」時,才增加下面的判斷。

  • Self-RAG:模型學習何時檢索,並對證據與回答做反思。
  • CRAG(Corrective Retrieval Augmented Generation,也叫 Corrective RAG):先判斷候選是否夠好,不夠時改查詢或改來源。
  • Adaptive RAG:依問題難度選擇不同流程。
  • Agentic RAG:讓 agent 決定何時叫用 retriever;必須設定步數、時間、成本與可用來源上限。

原始入口:Self-RAG、CRAG、Adaptive-RAG。

6. 最後才碰摘要樹與程式最佳化

RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)把相近片段分組、寫摘要,再逐層合成較大的摘要。細節問題找原片段,主題問題找上層摘要。

DSPy用範例與評分規則,調整 LLM(Large Language Model,能讀寫語言的模型)的提示詞或示範,改善整個流程。先有清楚任務、可靠資料與評測,才適合用它。

閱讀:RAPTOR paper · DSPy

🛠 一個可重跑的小實驗

  1. 選 20 題,為每題標出正確來源。
  2. A:基線。只用向量搜尋,保存前五筆結果與答案。
  3. B:混合搜尋。保留 A,只加入 BM25 並合併結果,重跑同一批題目。
  4. C:再加排序。保留 B,只加入重新排序,重跑同一批題目。
  5. 三組都記錄 Recall@5、命中率、延遲與成本。其餘設定相同,寫下哪幾題變好或變差。

完成條件: 你能拿出同一份測試集的三組結果,而不是只展示一題成功案例。

成本、資料與上線前檢查
  • Indexing 是否會呼叫付費模型?先用小樣本估算一次完整重建成本。
  • 每個 chunk 是否保留來源、頁碼/位置、版本、時間與存取權限?
  • Retriever 是否在查詢前套用權限,而不是找到後才遮住答案?
  • Agentic loop 是否有最大步數、timeout、budget 與安全來源清單?
  • Cache 是否會讓舊文件繼續被取回?更新與刪除流程是否測過?
常見失敗與排查順序
  1. 先看正確證據有沒有進 top-k。
  2. 有進 top-k,再看 reranker 是否把它往後排。
  3. 排名正確,再看 prompt 是否要求引用與拒答。
  4. 最後才檢查生成模型;不要用更大模型掩蓋 retrieval 錯誤。

🎯 精選 Projects 與學習資源

評分代表「對這張學習地圖的教學價值」,不是專案品質排行榜。先選一個框架、一個資料層與一個評測工具。

資料查核:2026-08-30 UTC

分類專案/文件評分用途限制
流程與範例⭐⭐⭐⭐⭐
適合誰: 文件型應用開發者
能學什麼: 找資料、組織回答與評測
狀態/限制: MIT;套件多,先跟官方 starter
⭐⭐⭐⭐
適合誰: 想把處理步驟拆成小零件
能學什麼: 拆分零件、選路與搜尋
狀態/限制: Apache-2.0;先做小型流程
⭐⭐⭐⭐⭐
適合誰: 想比較技術的讀者
能學什麼: 可執行 notebooks 與技術對照
狀態/限制: 自訂非商業授權;商用須書面許可;事實回官方文件核對
⭐⭐⭐⭐
適合誰: 想讀完整產品架構的團隊
能學什麼: 讀取文件、混合搜尋與操作畫面
狀態/限制: Apache-2.0;不適合當第一個 starter
搜尋與圖⭐⭐⭐⭐⭐
適合誰: 要合併密集與稀疏向量搜尋
能學什麼: 合併搜尋結果與篩選資料
狀態/限制: Apache-2.0;需規劃服務與備份
⭐⭐⭐⭐
適合誰: 已使用 PostgreSQL 的團隊
能學什麼: 在同一資料庫做文字與向量搜尋
狀態/限制: 仍需索引與查詢調校
⭐⭐⭐⭐
適合誰: 研究跨文件關係的讀者
能學什麼: 實體關係、局部與整體主題搜尋
狀態/限制: MIT;維護模式、建索引成本高
⭐⭐⭐⭐
適合誰: 比較以關係圖找證據的讀者
能學什麼: 關係圖與向量搜尋
狀態/限制: MIT;架構不同於 Microsoft GraphRAG
評測與最佳化⭐⭐⭐⭐⭐
適合誰: 要重跑評測的團隊
能學什麼: 測試資料、評分與實驗比較
狀態/限制: Apache-2.0;模型評分仍需人工校準
⭐⭐⭐⭐
適合誰: 想追查執行過程並評測
能學什麼: 自訂評分、紀錄與比較
狀態/限制: 先確認整合與資料保存方式
⭐⭐⭐⭐⭐
適合誰: 已有測試資料與評分規則的開發者
能學什麼: 改善模型的工作流程
狀態/限制: MIT;不是初學 RAG 的第一步
⭐⭐⭐⭐⭐
適合誰: 已完成 baseline 的讀者
能學什麼: 片段補背景與評測
狀態/限制: 供應商範例;數字只適用其設定

✅ 自我檢查

  • 我會先保存 baseline,再一次改一個元件。
  • 我能分清楚 Hybrid Search 與 Agentic RAG。
  • 我知道 Reranking 不能找回根本沒進候選集的文件。
  • 我能說出 GraphRAG 適合的問題,也能說出不該用它的情況。
  • 我的評測同時記錄品質、延遲、成本與失敗案例。

← 回到 Stage 6:RAG 與 Memory