一整份文件,怎麼切成找得到又看得懂的段落?
上一章說,程式先找出相關段落,再把原文和問題一起送給模型 (Model)。但範例裡,那些短段落已經準備好了。
公司實際交來的可能是一整份說明,裡面同時談密碼、個人資料與帳號停用。這些可以拿來搜尋的段落,是怎麼從完整文件裡切出來的?又為什麼不能隨便切?
先看同一份《帳號說明》中的幾句話:
帳號用途 公司帳號用來登入內部系統。
忘記密碼 忘記密碼時,到設定頁點「忘記密碼」,重設連結會寄到帳號信箱。 上述方式只適用於仍能收取帳號信箱郵件的人;若已無法收信,請聯絡資訊窗口核對身分。
個人資料 變更顯示名稱可在個人資料頁完成。首次登入時,請先確認個人資料是否正確。
帳號停用 離職時,帳號由資訊窗口停用。
現在讀者問:「公司帳號忘記密碼,而且帳號信箱已經收不到信,該怎麼辦?」
文件有答案:收不到信時,要聯絡資訊窗口。但假如只找到「到設定頁點忘記密碼」那一句,卻沒把下一句一起送入,模型這次收到的資料就少了關鍵條件。
切成小塊,是為了每次能選取一部分
把文件切成一塊一塊可分別搜尋、取回的文字,叫做文件分塊 (Chunking)。一塊可以是一句、幾段,也可以保留一個完整小節;沒有規定每塊一定等於一段。
先分清兩個時間:
| 什麼時候 | 程式做什麼 | 留下什麼 |
|---|---|---|
| 準備資料時 | 讀取文件文字,依選定規則切分;保留文件名稱與所在小節 | 可分別找出的文字塊與來源 |
| 有人提問時 | 從這些塊裡找候選,取回原文,再和問題一起送入模型 | 這次回答可以參考的資料 |
若沿用上一章的向量搜尋 (Vector Search),程式可以在準備時,替每塊文字算出並保存一組用來比較的數值,叫做向量 (Vector);提問時再比較問題與各塊。關鍵字搜尋 (Keyword Search) 則有別的找法。切分先決定「有哪些文字會綁在一起被取回」,搜尋才從中選。
為什麼不總是整份送?文件很短、也容易選中時,整份提供就可能夠用。文件很長或混了很多主題時,選出相關部分能減少這次帶入的文字;模型可處理的輸入也有上下文視窗 (Context Window) 上限。分塊是整理資料的一種方法,不是每份文件都必須做的儀式。
同一份原文,三種切法會帶入什麼?
先想一下:把每句各放一塊,讀者的問題又包含「收不到信」,只拿到操作那句會夠嗎?
從「逐句」改成「依主題」,再看「整份」。同一份原文與問題保持不變,對照取回的那塊是否同時包含操作與收不到信的處理方式。
練習固定取回含「忘記密碼」操作的那塊,只讓切法改變,方便看出差異:
| 切法 | 這次拿到什麼 | 取捨 |
|---|---|---|
| 逐句 | 只有點「忘記密碼」的操作 | 短,但收不到信的處理方式留在另一塊 |
| 依主題 | 操作+適用條件 | 這個例子保留了回答需要的兩句 |
| 整份 | 兩句都在,還帶入個人資料等事項 | 資料較完整,也帶入這個問題用不到的文字 |
所以問題不只是「切多短」。一塊被單獨拿出來時,讀者還能知道它在講什麼、什麼條件下成立嗎?
最短的不一定最好,按主題也不是萬用答案
「上述方式」要和哪個操作一起看?表格下方的例外適用哪幾列?若一刀把兩者分開,就可能把原本完整的規定拆成不完整的依據。反過來,一塊塞進太多主題,也可能不利於找出細節,並增加取回後帶入的文字。
有時一個主題本身就很長,仍須再切。常見做法是讓相鄰塊重複保留一小段文字,稱為重疊 (Overlap)。例如第一塊有操作步驟,第二塊放適用條件時,也帶上前面的操作,讓「上述方式」有對應對象。但重複內容也占空間,不能保證重要條件一定沒被切開。
另一種做法是找到操作後,再取回相鄰段落。這是改變「搜尋後帶回多少內容」,和事先讓各塊重疊是兩件事;本章練習刻意只取一塊,先看清切法本身的影響。
因此,實際切分可以先尊重標題、小節與完整句子,再依文件長度調整,最後用真實問題檢查:需要的條件有沒有一起取回?是否帶了大量無關文字?沒有一個長度能保證所有文件與問題都最合適。
原文與來源要一起留下
文字切開後,仍應能找回它屬於哪份文件、哪個小節及哪個版本。例如這個片段附上「《帳號說明》/忘記密碼/v1」,程式才能把來源一起提供,也方便人回查完整內容。
這些資訊要由程式實際保存與提供,模型不會因為看到一段文字,就自動知道原本的頁碼與版本。
回到本章問題:完整文件經過切分,成為可以分別取回的文字塊;切在哪裡,會影響哪些條件隨原文一起進入模型輸入。 分塊沒有替模型學新知識,而是在整理回答時可取得的資料。
參考:Microsoft 的文件分塊說明。查核日期:2026-10-09。保留上下文、切分粒度、重疊及來源資訊的取捨依此說明;練習使用固定句子與固定選取規則,不測試真實搜尋排名或模型回答。