AI 怎麼從一堆文件中,找到可能有答案的段落?
閱讀順序先接模型只能處理 token,怎麼用工具讀取文件?:那章先拆模型提出要求、程式執行與工具結果回傳。本章再放大「從很多文件中,怎麼選出可能有用的段落」。檢索可以由程式先執行,也可以包成模型可呼叫的工具。
你問 AI:「我們公司的帳號忘記密碼,要怎麼辦?」
但回答用的模型 (Model) 沒有看過公司的內部說明。只收到這句問題,它頂多提供常見做法,不能據此確定你公司的規定。
那要怎麼讓模型取得公司的資料,再根據資料回答?
關鍵是:程式先從公司提供的文件裡找資料,再把「你的問題+找到的原文」一起送給模型。 先看這整件事怎麼發生,再拆中間的找資料步驟。
先看模型最後收到什麼
假設公司已把內部文件交給這套問答系統,其中《帳號說明》有這一段:
到設定頁點「忘記密碼」,重設連結會寄到帳號信箱。
程式找到這段後,可以把送給模型的內容組成下面這樣:
問題: 我們公司的帳號忘記密碼,要怎麼辦?
參考文件:《帳號說明》 到設定頁點「忘記密碼」,重設連結會寄到帳號信箱。
回答要求: 請根據參考文件回答;文件沒有說的事,請明說資料不足。
這時,模型在這次收到的文字裡,就看得到公司的操作步驟。它可以據此整理出這樣的回答:
依《帳號說明》,先到設定頁點「忘記密碼」,再到帳號信箱收取重設連結。
所以,資料進入回答的途徑是「放進這次的輸入」。這個做法不需要為了加入這段文件,就重新訓練 (Training) 回答模型。模型有沒有照著文件寫對,仍然需要核對。
文件從哪裡來?誰在找?
公司要先提供可查詢的文件,例如匯入內部說明,或讓程式連接存放文件的地方。模型不會只因為有人問「我們公司的規定」,就自動取得這些內容。
在這個例子裡,工作分成兩步:
| 誰負責 | 收到什麼 | 交出什麼 |
|---|---|---|
| 找資料的程式 | 你的問題、公司提供的文件 | 可能有答案的原文段落。 |
| 回答用的模型 | 你的問題、程式選出的原文、回答要求 | 依這些內容生成的回答。 |
如果只有一小段說明,直接把它與問題一起提供就可以。文件有幾千頁時,一次能提供的文字有限,也沒有必要把不相關的休假規定、報帳辦法都交給模型。這才需要先找出可能有用的幾段。
從文件中找出候選內容,叫做檢索 (Retrieval)。 接下來只放大圖裡「找資料」的部分。
怎麼找到《帳號說明》那一段?
最直接的起點是關鍵字搜尋 (Keyword Search):在文件中查「密碼」。但找到有這個詞的段落,還不表示找到了答案。
問題還是「我們公司的帳號忘記密碼,要怎麼辦?」。看看這幾段的差別:
| 段落 | 內容 | 能提供什麼? |
|---|---|---|
| A 重設步驟 | 到設定頁點「忘記密碼」,重設連結會寄到帳號信箱。 | 直接提供重設步驟。 |
| B 恢復帳號 | 無法登入時,使用建立帳號時的信箱恢復存取權。 | 沒寫「密碼」,卻可能提供找回帳號的線索。 |
| C 額外驗證 | 從新裝置登入時,會多一道確認你是不是本人的步驟。 | 也談登入,卻沒有重設密碼的步驟。 |
| D 密碼安全 | 避免重用舊密碼,並定期更換。 | 提到密碼,卻沒回答忘記密碼時怎麼辦。 |
A 最直接。B 用詞不同,也值得查看。C、D 看起來跟帳號或密碼有關,卻未必能解決這次的問題。我們希望程式除了看用詞,也能比較問題與段落在談的事情是否接近。
怎麼把「意思接近」變成可以計算的比較?
前面學過向量 (Vector),就是一串數字。這裡可以使用一個已經訓練好的嵌入模型 (Embedding Model):把一整句或一整段文字交給它,它會算出代表那段內容的一串數字。
它在訓練時,例如會練習把相關的文字配對與其他文字區分開。學出的數字表示,才可能讓「忘記密碼」和「恢復帳號」這類用詞不同的內容,在比較時得到較接近的結果。這是學出的能力,仍可能判斷不好。
它不用先背下公司的文件。 公司現在提供一段新文字,它就對這段文字做計算,產生表示;規定的內容仍來自公司交出的原文。
放回剛才的例子,程式會做三件事:
- 替文件準備表示: 把 A、B、C、D 分別交給嵌入模型,每段得到自己的一串數字,與原文一起保存。
- 替問題準備表示: 收到「忘記密碼怎麼辦」時,也把問題交給相容的嵌入模型,得到問題的那串數字。
- 比較並取回原文: 用問題的數字,分別與 A、B、C、D 的數字比較;依分數排列,取出靠前段落的原文。
這種用文字表示來找意思相關內容的方法,叫做語意搜尋 (Semantic Search)。兩份表示的比較結果叫做相似度 (Similarity)。數字負責幫程式選段落,真正交給回答模型參考的,仍是段落原文。
這裡有兩種模型的分工:嵌入模型把文字變成可比較的數字;回答模型收到找到的文字,再生成回答。兩種能力可以由不同模型負責。
最後還要決定:取回幾段?
開啟工具,選「看示範情境」,保留預設的 FAQ 情境。問題是「how do I reset my password」,也就是「怎麼重設密碼?」。排名依序是 A、B、C、D。
「只取前 k 段」稱為 top-k。k = 1 會只取 A;k = 3 會取 A、B、C。改的是拿幾段,沒有改問題、文件或它們的相似度。
把 top-k 從 3 改成 1,再改回 3,看看哪些原文進入取回範圍。這些就是後續程式可以放進回答模型輸入的候選資料;本工具只做到找資料,沒有生成回答。
選「看示範情境」,把排名區的 top-k 從 3 改成 1,再改回 3;點選排名列查看原文。手機用「輸入/排名/證據」切換面板。這次只看哪些段落被取回,不需要下載模型。
多找幾段,回答就會更好嗎?
回到 k = 3,C 也進來了。但 C 只談新裝置登入時的確認步驟,沒有重設密碼的答案。多拿一段不相關文字,不會自動讓回答更可靠。
工具中 A 的示範相似度是 0.92。它表示這組向量比較得到的分數,不是「答案有 92% 的機率正確」。過期文件也可能很像問題;所有文件都沒答案時,也仍會有第一名。
所以要分開核對:找資料時,有沒有找到能回答問題的原文?生成回答後,有沒有忠實使用原文? 這接回前面的可靠度問題。
回頭看一開始的問題:模型沒看過公司的資料,也可以在回答當下收到找到的原文,再據此生成回答。 把「先找資料」接上「依資料生成回答」,就是檢索增強生成 (Retrieval-Augmented Generation, RAG) 的基本思路。
這裡先理解問題、文件、找資料程式與回答模型如何接起來。文件要怎麼整理、更新、標示來源,以及怎麼檢查整個系統,後續再繼續拆解。
參考:Microsoft 的文件檢索與回答流程說明、Sentence Transformers 的語意搜尋說明、all-MiniLM-L6-v2 的表示與訓練方式。查核日期:2026-10-09。文字配對的訓練方式以此模型為例;公司情境與工具向量是教材示意,不是實測。