模型只能處理 token,怎麼用工具讀取文件?
你問 AI:「請讀《帳號說明》,告訴我公司帳號忘記密碼要怎麼辦。」
模型 (Model) 處理的是輸入的 token,也就是文字切成的小片段。那它怎麼打開公司文件?讀出的內容又怎麼回到模型裡?
中間有一個程式負責接手。模型先產生「請用哪個工具、讀哪份文件」的要求;程式執行讀檔,再把讀到的文字加進下一次輸入。模型收到這次輸入,才繼續生成回答。
這章先固定讀《帳號說明》,追清楚這次交接。從很多文件中挑哪一份、哪一段,留到下一章的檢索。
先讓模型知道有哪些工具
開發者要先準備真正能讀公司文件的程式,再把它的使用方式提供給支援工具的模型。例如:
| 提供給模型的資訊 | 這個例子的內容 |
|---|---|
| 工具名稱 | read_document |
| 用途 | 讀取一份公司已提供的文件,回傳文字內容。 |
| 呼叫參數 (Arguments) | 要讀的文件名稱,例如「帳號說明」。 |
工具的說明讓模型知道可以要求什麼;真正讀檔的程式,要由開發者接好。 只寫一個工具名稱,並不會憑空出現讀檔能力。
第一次:模型輸出一份讀檔要求
第一次送給模型的內容包含你的問題與可用工具的說明。假設模型判斷需要先讀文件,它會產生約定格式的工具呼叫 (Tool Call),意思是:
| 模型產生的欄位 | 值 |
|---|---|
| 工具名稱 | read_document |
| 要讀的文件 | 帳號說明 |
「read_document」和「帳號說明」也都是模型可以產生的輸出內容。服務依工具呼叫的約定格式回傳這份要求,外面的程式才能取出名稱和參數。這種合作方式常稱為工具使用 (Tool Use),也稱函式呼叫 (Function Calling)。
到這裡,模型產生了要求,文件還沒被讀取。 就像程式輸出「請列印這一頁」,還需要印表機與控制程式去執行;要求本身不會完成動作。
模型為什麼會產生這種要求?這是一種可以透過訓練 (Training) 學會的輸出行為:依問題與工具說明,選工具、填參數,再利用回傳結果。不同模型的支援與表現會不同,不是每個模型都自動具備這項能力。
接手:程式真的讀取文件
程式收到呼叫後,先確認這是已登記的工具、文件名稱可用,並檢查是否允許讀取;接著執行 read_document 對應的讀檔程式。真正接觸檔案的是這一步。
假設工具讀到的文字是:
到設定頁點「忘記密碼」,重設連結會寄到帳號信箱。
讀檔成功,還不表示模型已經看到了。 程式必須把結果回傳,才能接著走下一步。
第二次:把讀到的文字放回輸入
程式把文件文字包成一則工具結果 (Tool Result) 訊息,並標明它對應剛才哪一次呼叫。接著再送一次請求,保留需要的前文:
| 順序 | 第二次輸入中的訊息 | 用途 |
|---|---|---|
| 1 | 使用者的原始問題 | 讓模型知道要回答什麼。 |
| 2 | 模型剛才提出的讀檔呼叫 | 讓模型知道自己要求了哪個工具。 |
| 3 | 對應呼叫的工具結果,內容是文件原文 | 讓模型有新的資料可以參考。 |
可用工具的說明等設定,也按所用服務的規則一併提供。這一次,模型才有那段公司文件可讀。
外部結果怎麼成為 token?
讀檔工具已經把文件內容讀成文字。程式加入的是文字,例如「到設定頁點忘記密碼」,不用自己把它換成 token 編號。
模型服務收到訊息後,會依自己的格式組裝角色、工具呼叫與結果等資訊,再把文字內容切分、轉成模型可處理的 token 編號。於是,文件原文就成了這次輸入的一部分,和問題一起參與後續計算。
文件不是變成一顆很大的 token,也不是直接插進模型正在生成的某一層。 它的文字會切成許多 token,在本例的第二次模型請求中被處理。工具結果因此也占用輸入的容量;太長時,程式要控制提供的範圍。
模型接著可能生成:
依《帳號說明》,先到設定頁點「忘記密碼」,再到帳號信箱收取重設連結。
文件資訊來自剛加入的輸入,不需要為了這次讀檔就重新訓練模型。收到原文後有沒有回答正確,仍要核對。
補充:用重播台對照兩次輸入
下面把剛才的例子記成四則訊息:問題 → 工具呼叫 → 工具結果 → 回答。複製這份 JSON,開啟下方工具,選預設的「OpenAI」格式,貼進輸入區。這只是重播台支援的一種訊息格式;Claude、Gemini 等服務也有工具呼叫,欄位與交接格式各有不同。
4 則訊息 · OpenAI 格式。看問題、讀檔要求、文件結果與回答如何排在一起。
也可以開啟這份 JSON 範例,複製內容或存檔後載入重播台。
展開兩輪的輸入切片,先看第一輪還沒有公司文件;再看第二輪,多了工具呼叫與工具結果。這個差異,就是新資料如何進入下一次模型輸入。
用上方範例卡複製 JSON,貼到輸入區,保留「OpenAI」格式;展開兩輪輸入切片,比較哪一輪開始有工具結果。手機用「messages JSON/迴圈時間軸」切換。這個工具只重播紀錄,不執行讀檔。
再改一個地方試試:把第三則工具結果的文字改成「請聯絡公司資訊人員重設密碼」。第二輪輸入中的依據就會跟著改變。
第四則回答是你貼進去的固定紀錄,重播台不會替它重新生成。如果回答還寫「點忘記密碼」,你就看到了:結果文字改了,舊回答卻沒有因此自動更新。真實程式需要把新結果再次交給模型,才能取得新的生成結果。
程式先找資料,也一定要模型呼叫嗎?
不一定。程式可以先按照固定流程讀取文件,再把文字與問題交給模型;這條路線沒有「模型提出讀檔要求」那一步。
本章則是模型先提出工具呼叫,再由程式執行。兩種路線都要把外部資料提供給模型,差別在由誰決定何時讀取、讀什麼。下一章只討論「怎麼從很多段落選出候選資料」,那個搜尋能力既可以被程式直接使用,也可以包成模型可要求使用的工具。
這章接起的是:token 輸出可以表達一份工具要求,外部程式據此執行;讀出的文字再經由下一次輸入,變成模型能處理的 token。 讀哪一份文件先定好了,接著才到檢索章看文件很多時怎麼找。
參考:Google 的函式呼叫流程、Anthropic 的工具執行與結果回傳、OpenAI 的函式呼叫格式、Toolformer 工具使用研究。查核日期:2026-10-09。本章採文字文件與一次讀檔的簡化流程,不代表所有服務、工具或模型都使用相同訊息格式。