AI 怎麼接著使用下一個工具,又由誰決定停止?
在工具呼叫那一章,我們看到模型 (Model) 提出讀檔要求,程式讀出文件,再把內容交回模型。那次取得資料後,就能回答。
但如果你問:「依公司出差規定,兩天的餐費最多可報多少元?」它可能還要先查規定,再算金額,最後才回答。
第一次讀檔結束後,誰讓它接著去算?如果一直查下去,又是誰把它停下來?
先抓住分工:模型根據這輪收到的內容,提出下一步;外層程式負責執行、把結果交回去,並決定是否允許繼續。 不是模型在產生文字時,突然能直接操作電腦。
查完還沒回答,就再交接一次
外層程式一開始把原問題和可用工具的說明一起送入。這個例子提供「讀規定」和「計算乘法」兩個工具。模型可以產生工具呼叫 (Tool Call),也可以直接產生給使用者看的回答。
| 模型這輪收到什麼 | 模型提出什麼 | 程式接著做什麼 |
|---|---|---|
| 第 1 回合:問題說要算兩天餐費,但還沒有規定 | 讀取《出差餐費規定》 | 執行讀檔,得到「每天 300 元」,把結果加進下一次輸入 |
| 第 2 回合:原問題+讀檔結果 | 計算 2 × 300 | 執行計算,得到 600,再把結果加進下一次輸入 |
| 第 3 回合:原問題+讀檔結果+計算結果 | 回答「兩天最多可報 600 元」,沒有再要求工具 | 把回答呈現給使用者,結束這次過程 |
注意第二回合:程式不是讀完文件就自己指定「下一步一定算乘法」;而是先把「每天 300 元」交回模型,由模型根據新內容提出計算要求。 第三回合也要再呼叫一次模型,才有機會得到整理好的回答。
因此,這裡有 3 次模型回合、2 次工具執行。一次模型回合裡仍可能逐個產生很多 token;模型回合數、工具執行次數與 token 數,是三個不同的數量。
工具結果怎麼變成下一次的輸入?
可以把每次交接看成這個圈:
把目前資料送入模型 → 模型提出工具要求 → 程式執行工具 → 程式加入結果 → 再送入模型。
例如讀檔結果是「餐費上限為每天 300 元」。程式把這段結果放入訊息,再連同原問題與先前的工具呼叫送給模型;文字會經過切分,成為模型下一次處理的 token。工具名稱、參數與結果屬於不同訊息位置,並不是程式把一句「請使用工具」當成工具已經執行。
本章為了看清交接,每次都保留原問題與先前結果。實際產品也可能整理或裁剪歷史,所以應看程式這次真正送入什麼,而不能假設模型自動保有所有先前資料。
先看正常的三次交接,再把工具上限改成 1 次。接著試「查無規定」和「反覆讀檔」,比較「模型回報資料不足」與「程式用完次數」的差別。
停下來,不只有「做完了」一種原因
| 發生什麼事 | 這次由誰讓過程結束 | 能不能當成完成? |
|---|---|---|
| 模型提出最後回答,不再要求工具 | 程式將它作為最終回覆,結束迴圈 | 有答案,但仍須檢查規定與計算是否正確 |
| 讀檔回報找不到規定,模型改為請人提供文件 | 程式呈現資料不足的回覆,不再執行工具 | 沒算出金額;這次等待補資料 |
| 模型繼續要求讀檔,但工具次數已用完 | 程式拒絕執行下一個工具,停止這次過程 | 沒完成;需要處理卡住的原因 |
「查無規定」不表示所有系統都必須立刻停止。錯誤也能當成工具結果交回模型,它可能改找別的文件,也可能請人協助。本章選擇請人提供文件,讓讀者看清一種合理的結束方式。
工具上限則是程式實際檢查的限制,不只是對模型說「最多查兩次」。即使模型又提出第三次讀檔要求,程式也可以不執行。實際系統還能限制時間或費用,或在沒有進展時交給人處理。
練習把上限設為 2 次,正常情境仍可完成:讀檔與計算已經各用一次,第三個模型回合只是回答,沒有執行第三個工具。若上限只有 1 次,則在提出計算要求時被程式擋下;這和「只算一半,卻說完成」是不同的狀態。
這和代理有什麼關係?
讓大型語言模型 (Large Language Model, LLM) 根據工具結果,接著選擇動作的系統,常稱為 AI 代理 (AI Agent)。名稱的使用範圍不完全一致;本章關心的特徵是:下一步會根據目前得到的結果,由模型提出,而外層程式持續安排執行與交接。
如果開發者早已把「先讀這個檔案,再做這次乘法」寫死在程式裡,就屬於預先安排的工作流程 (Workflow)。兩者都能使用工具;不能只看執行了幾次,就判斷是不是代理。
真實模型可能選錯工具、誤讀結果,或在沒有完成時說完成,因此外層限制與答案核對仍然必要。
回到開頭的問題:AI 能接著用工具,是因為程式反覆把結果交回模型,讓模型再提出下一步;能不能繼續執行,則由外層程式檢查。 多輪操作不是單次生成偷偷多了外部能力,而是多次模型與程式的交接。
參考:Anthropic 的工具使用交接流程、代理與預定工作流程的區分。查核日期:2026-10-09。本章採簡化的單次一工具案例;不同服務的訊息格式與停止狀態可能不同,API 停止產生內容也不一定代表任務成功。