
Fine-tuning 能取代 RAG 做 KB 檢索嗎 — 它真正學到的東西,以及純 IR 勝出的時機
知識庫檢索能不能用 Fine-tuning 取代 RAG:Fine-tuning 真正學到的是什麼、純 IR 或長脈絡勝出的時機,以及各自的成本。
本頁目錄
引言
用 RAG 建置知識庫(KB)檢索系統的人不少,我也是其中之一。某天,一個很單純的疑問冒了出來。
「如果拿一個小型的本地模型,用我們的內部文件做 Fine-tuning,是不是就能做到跟 RAG 一樣的事,而且模型更小、更便宜?」
讓模型針對它要參考的文件量身打造,檢索基礎設施和向量資料庫就都不需要了。直覺上似乎說得通。但實際上並非如此,原因在於 Fine-tuning 學到的是行為而不是事實,因此它無法提供 KB 檢索真正需要的東西。反而站得住腳的是相反的一課:只要需求夠窄,比完整 RAG 更單純的做法往往更好。從這個疑問出發,我依序想清楚了另外三個問題:Fine-tuning 能不能替代 RAG、Fine-tuning 到底在做什麼、以及除了 RAG 是不是真的沒有別的選擇。
希望這些整理,對抱著同樣疑問的人有幫助。
疑問 1:Fine-tuning 能不能取代 RAG
實際查下去之後才發現,這個直覺並不太站得住腳。Fine-tuning 和 RAG 一開始要解決的,本來就是不同的問題。
Fine-tuning 學的是「行為」,不是「事實」
Fine-tuning 調整模型的權重,改變它的風格、輸出格式、語氣,以及執行任務的模式。它不擅長的,是把特定的事實嵌進去、之後還能穩定地取出來。
用內部文件做 Fine-tuning,模型會學會「講話像內部文件」,但面對具體問題時,它照樣會給出流暢、自信而錯誤的答案。RAG 的做法剛好相反:把事實以原文的樣子,保存在可檢索的儲存中。

為什麼 RAG 適合 KB 檢索
整理下來,RAG 適合 KB 檢索系統的理由可以歸成三點:依據與出處、更新成本低,以及靠檢索脈絡壓下幻覺。在 KB 裡,能追溯出處這件事的價值特別大。
「更便宜、更小」這個直覺的陷阱
「針對自家文件特化的小模型,應該又便宜又小」這個想法很吸引人,但有幾個漏洞。
- Fine-tuning 並不會讓模型在任何有意義的層面變小。決定模型大小的是你需要的推理與語言能力,而不是你餵了多少領域文字。小模型就算用你的文件量身打造,仍然是一個不擅長綜合與遵守指示的小模型。
- 建置與維護 Fine-tuning 有實際成本:資料準備、運算、評估,以及每次文件更新都要重新訓練。RAG 完全避開了這些。
- RAG 的推論成本(檢索到的片段會讓提示詞變長)確實值得擔心,但通常還是比自己養一條訓練管線便宜。
Fine-tuning 真正有用的場合
這些都不代表 Fine-tuning 沒有意義。和 RAG 搭配起來,它其實很有效。
- 教出一致的輸出格式、語氣與領域術語(行話)
- 改善模型運用檢索脈絡的方式(RAFT,也就是 Retrieval-Augmented Fine-Tuning,以及類似做法),並提升對查詢的理解
- 把每次都要重複的指示寫進權重裡,讓提示詞變短
所以成熟的做法是「事實交給 RAG,行為交給(必要時輕量的)Fine-tuning」,而不是拿它來取代 RAG。
疑問 2:Fine-tuning 到底在做什麼
到這裡為止我都寫著「Fine-tuning 改變的是行為」,但老實說,有一部分我一直沒有真正想通。
「Fine-tuning 不就是拿自家資料,把 ChatGPT 或 Claude 這類產品模型稍微調一下嗎?如果行為的改變就只有這樣,那用提示詞不就夠了?」
這個疑問來自我不知道基礎模型的存在。
我們在用的模型,早就被 Fine-tuning 過了
查下去之後最讓我意外的是,ChatGPT、Claude 這類產品模型並不是 LLM 的「成品」。它們是 LLM 經歷過大規模 Fine-tuning 之後的樣子。在它們背後的基礎模型(預訓練完成的模型),和我們每天接觸的東西完全是兩回事。

基礎模型是什麼
基礎模型是用網路上大量的文字(網頁、書籍、程式碼等),以「預測下一個字」這個任務訓練出來的。這段預訓練讓它獲得語言的基礎能力,包括文法、知識與推理模式。
但基礎模型只是一台文字補完引擎。給它一個問題,它不會回答,而是試著把問句接下去。它不遵守指示、不回答問題,也不拒絕有害的要求。它有語言能力,卻不知道怎麼進行對話。

是 Fine-tuning 讓模型變得能用
把基礎模型變成「有用的助理」的,是被稱為後訓練的 Fine-tuning 階段。
- 指令微調(instruction tuning):用大量的(問題, 回答)配對,教會它「被問就要答」「要遵守指示」這類對話模式。
- RLHF(以人類回饋進行的強化學習):由人類評分者判斷哪些回答好、哪些不好,再依這些判斷調整模型的輸出。有用而安全的回應就是這樣被強化的。
也就是說,我們對著打提示詞的對象,本身就是龐大 Fine-tuning 的產物。當初覺得「提示詞就夠了」,其實是站在 Fine-tuning 的成果上面。
錢花在哪一邊:預訓練 vs Fine-tuning
建置一個 LLM 大致有兩個階段,兩者的成本差了好幾個數量級。
| 觀點 | 預訓練(建置基礎模型) | Fine-tuning(後訓練) |
|---|---|---|
| 做什麼 | 用大量文字學習「預測下一個字」 | 學習對話、遵守指示與安全性 |
| 運算成本概估 | 數千萬到數億美元 | 數百萬美元(含 RLHF) |
| 需要的基礎設施 | 數千到數萬張 GPU、數個月 | 數十到數百張 GPU、數天到數週 |
| 需要的資料 | 數兆個 token 的通用文字 | 數萬到數十萬筆高品質的(指示, 回答)配對,加上人類評分 |
| 進入門檻 | 非常高(資金、基礎設施、資料、專業人才) | 相對低(可以直接用開放的基礎模型) |
預訓練的成本壓倒性地高,全世界大概只有數十家公司能自己做。相對地,Fine-tuning 可以從開放的基礎模型(例如 Llama、Mistral)出發,因此新公司也構得著。
新模型變強,是靠哪一邊
看完這些之後,還有一個問題。像 GPT-3 到 GPT-4、Claude 2 到 Claude 3 這樣,新模型變得明顯更聰明時,貢獻比較大的是預訓練還是 Fine-tuning?
簡短的答案是:預訓練決定能力的天花板,Fine-tuning 決定你能靠這個天花板多近。
- 跨世代的大跳躍(GPT-3 到 GPT-4、Claude 2 到 Claude 3)幾乎全部來自預訓練的進步。更多運算資源、更好的資料、更大的模型規模、架構上的改良,這些提升的是基礎模型的底子,也就是推理的深度、知識的廣度與程式理解力。基礎模型沒有的能力,Fine-tuning 沒辦法事後裝上去。
- 同世代內的改善(GPT-4 到 GPT-4o、Claude 3 Opus 到 Claude 3.5 Sonnet)則可能大幅得益於更好的 Fine-tuning 與後訓練。在相同或相近的基礎模型上,更好的 RLHF 資料、更精緻的訓練方法,以及巧妙的蒸餾,都可能讓基準測試分數明顯提升。
所以預訓練設定「能有多聰明」的上限,Fine-tuning 決定「這份聰明能被引出多少」。兩者是互補而不是替代。一句話總結:新模型之所以強,是因為更好的 Fine-tuning 疊在更好的基礎模型上面。
新公司想擁有自家模型的現實路徑
把成本結構看清楚之後,「我們想要自己的模型」有哪些選項也就浮現了。
- 從預訓練開始:數千萬美元起跳。需要前沿實驗室等級的資金與基礎設施。現實上只有數十家公司做得到。
- 開放基礎模型加上自家 Fine-tuning:數萬到數百萬美元。可以打造出針對自家領域特化的模型。多數 AI 新創走的就是這條路。
- 產品模型 API 加上提示詞工程:每月數百到數千美元。門檻最低,但模型不是你的。

所以「在 Fine-tuning 上花數百萬美元」從來就不是為了改變個性。它是把一個只會補完文字的基礎模型,變成能當助理用的那道工序,而這道工序本身就創造了產品的核心價值。
企業為什麼還要再做 Fine-tuning
也有公司會在產品模型之上再做 Fine-tuning。這不是「改個性」,而是有很強的實務理由。
- 可靠度:提示詞是「請求」,Fine-tuning 是「訓練」。在數百萬次的正式呼叫中,5% 的失敗率可能是致命的。
- 新能力:工具使用模式、結構化擷取、領域推理。只靠提示詞做不穩的事情,可以教得會。
- 降低成本:與其每次都在提示詞裡塞 3,000 個 token 的指示,不如把它們寫進權重裡,用 50 個 token 就解決。規模一大,差距就很可觀。
- 蒸餾(distillation):用龐大而昂貴的模型的輸出,去 Fine-tune 一個又小又便宜的模型,用很低的成本拿到大部分的能力。

大致的原則是「先用提示詞,撞到牆了再 Fine-tuning」。提示詞達不到的可靠度、複雜到寫不完的行為、長提示詞開始變貴的規模,走到那一步再投資,然後靠推論成本的下降回收。
| 觀點 | 提示詞工程 | Fine-tuning |
|---|---|---|
| 能給的範例數量 | 幾個 | 數萬筆 |
| 一致性與可靠度 | 以「請求」為基礎,會浮動 | 以「訓練」為基礎,比較高 |
| 賦予新能力 | 有限 | 可以 |
| 提示詞長度與推論成本 | 容易愈長 | 可以寫進權重並縮短 |
| 能力在模型之間的移轉 | 做不到 | 可以透過蒸餾 |
疑問 3:除了 RAG 真的沒有別的選擇嗎
確認「事實交給 RAG」之後,下一個疑問是:RAG 是唯一的正解嗎?這裡幫上忙的,是把「RAG 到底是什麼」拆開來看。
把 RAG 拆成兩個階段
RAG 不是一整塊,而是兩個階段黏在一起。
- 檢索(retrieval):找出相關的文字。這正是古典的 ML 與資訊檢索(IR):BM25、嵌入、重排序器、向量檢索。不需要推理。
- 生成(generation):由 LLM 讀取檢索到的文字,並合成一個答案。
所以「要 ML 還是要 RAG」是個假二分法。ML(機器學習)就是 RAG 的檢索那一半。真正的設計問題是:「我真正需要哪些階段,而每個階段又需要做到多精緻」。
這樣看,依需求而生的替代方案就清楚了。
依情境選擇
- 如果只需要「找到」,就把 LLM 拿掉:如果目標只是找出正確的文件或段落,古典 IR(BM25 加上密集檢索器再加上重排序器)本身就能構成完整的系統。不用生成、沒有幻覺、便宜、快,而且可稽核。很多「KB 檢索」的需求其實就是這種,有些甚至是後來硬加上 LLM 才被過度設計的。
- 如果語料庫很小,跳過檢索直接用長脈絡:以現在的大型脈絡視窗來說,只要知識大致塞得下,就可以把整份都放進提示詞裡(搭配提示詞快取,成本也不高)。不需要向量資料庫、不需要切塊、也不會漏檢。對於小而穩定的語料庫,這比 RAG 更單純。它會在規模變大時垮掉,垮在成本、延遲,以及「lost in the middle」,也就是長輸入中段材料的召回率下降。
- 如果關係很重要,用 GraphRAG 或知識圖譜:對於需要跨多份文件串接事實(多跳)的問題,單純的向量 RAG 會很吃力,因為它是各自獨立地取回每個片段。建置並查詢知識圖譜,或使用 GraphRAG,會更合適。建置與維護成本也比較高。
- 如果查詢複雜或需要多步驟,用智能體式檢索:與其做一次「檢索完就生成」,不如讓模型反覆地搜尋、閱讀、修正查詢、再搜尋。面對難題很強,但每次查詢更慢也更貴。
| 需求 | 建議做法 | 需要生成(LLM) |
|---|---|---|
| 只要找到文件或段落 | 純 IR(BM25 加密集檢索加重排序器) | 不需要 |
| 小而穩定的語料庫 | 長脈絡(加上提示詞快取) | 需要(不需要檢索) |
| 多跳、關係 | GraphRAG 或知識圖譜 | 需要 |
| 複雜、多步驟的查詢 | 智能體式檢索 | 需要 |
| 在大型且持續變動的語料庫上合成答案 | RAG | 需要 |
老實說的總結
老實說,針對「在大型且持續變動的語料庫上,回傳有依據、即時而且合成過的答案」這個組合,沒有東西能取代 RAG。那本來就是 RAG 的工作。
但當需求更窄的時候,比 RAG 更單純的做法通常會勝出。這就是我學到的一課。錯不在「選了 RAG」,而在於明明便宜的子集就夠用,卻伸手去拿全副武裝的 RAG。所以實務上該問的不是「什麼能打敗 RAG」,而是「使用者真的需要一個合成過的答案嗎、語料庫又有多大多穩定」。這兩個答案就決定了架構。
和前面幾節怎麼對得上
前面說 Fine-tuning 不擅長嵌入事實、因為那是 RAG 的工作,這個說法是狹義而正確的。同時,如同疑問 2 所呈現的,Fine-tuning 的「改變行為」涵蓋的範圍非常廣:從把基礎模型變成助理,到可靠度與新能力,再到透過蒸餾降低成本。
再深入一點:如果降低成本才是真正的目的
回到最初的動機,我真正在意的其實是把成本壓下來。在這件事情上,有些做法比 Fine-tuning 更有效。
- 把 RAG 背後的生成模型換成更小、更便宜的
- 提升檢索品質(更好的切塊、重排序、混合檢索),讓送出去的 token 更少
- 快取嵌入
- 自行架設一個小型的開放模型(例如 7 到 8B 這個級距)當作 RAG 的生成器
這樣就能得到「針對使用情境量身打造的小型本地模型」,而不必放棄依據。
有一點要提醒:如果你的「KB 檢索」其實是查找而不是生成,也就是找出正確的段落,那麼最大的收穫幾乎全部都在檢索這一側,選哪個 LLM 幾乎沒有差別。
總結
從「能不能用 Fine-tuning 更便宜地取代 RAG」這個很單純的疑問出發,我最後落在這些結論上:
- Fine-tuning 學的是「行為」,不是「事實」。為 KB 檢索提供事實是 RAG 的工作,成熟的做法是兩者並用,而不是拿其中一個取代另一個。
- RAG 不是一整塊。它是檢索(古典 ML 與 IR)加上生成(LLM)。如果需求很窄,純 IR、長脈絡、GraphRAG 或智能體式做法,往往在單純度上勝出。
- 實務上該問的不是「什麼能打敗 RAG」,而是「需不需要一個合成過的答案」以及「語料庫有多大、多穩定」。
- 我們在用的產品模型 ChatGPT 與 Claude,本身就是把大規模 Fine-tuning 套用在基礎模型上的結果。預訓練(數千萬到數億美元)與 Fine-tuning(數百萬美元)的成本差了好幾個數量級,而使用開放模型降低了進入門檻。原則是先用提示詞,撞到牆了再 Fine-tuning。
- 如果目的是降低成本,換更小的生成模型、提升檢索品質、快取嵌入,以及自行架設,都比 Fine-tuning 更有效。
做決定的起點其實很簡單:使用者要的是一個答案還是一份文件,以及語料庫有多大、更新得多頻繁。先把這兩件事定下來,架構的選擇就會容易得多。