智能體與前沿

工具使用與函數呼叫(tool use / function calling)

/ TOOL yooss and FUNK-shun KAWL-ing /

語言模型本身只會產生文字。它沒法真的去查今天的天氣,沒法對大數做可靠的算術,也查不到它從沒記住過的事實。工具使用,就是讓它伸手到自身之外的竅門:模型不再憑記憶硬答,而是寫出一條請求——「呼叫 get_weather,城市=東京」——再由外面的程式去執行那個真實函數,把答案遞回來。就像給一位才華橫溢卻足不出戶的專家一部電話和一套儀器:現在他能去問世界,而不必靠猜。

函數呼叫,是把這件事接通的那種具體而規整的方式。開發者描述每一個可用工具——它叫什麼、做什麼、需要什麼輸入——而模型一旦判斷某個工具有用,就吐出一條整潔的結構化請求(通常是JSON),點名要呼叫的函數並填好參數。關鍵在於:模型自己什麼都不執行,它只是用固定格式提出這個呼叫。是應用程式去校驗並執行它,再把結果餵回對話,模型才能接著用。這就是幾乎每一個現代AI智能體底下的「管路」。

最大的好處,是對「模型做不到什麼」保持誠實:算術交給計算機,時事交給搜尋工具,私有資料交給你的資料庫。但決定何時、如何呼叫工具的,仍然是模型,而它可能決定得很糟——編造參數、選錯工具、或漏掉本該發出的呼叫。所以外層程式碼必須把模型提出的每一個呼叫都當作不可信的輸入來對待:校驗它、限制工具能做的事,絕不能讓一團判斷失誤的JSON,比如說,把整個資料庫抹掉。

你問「4891×2733 等於多少?」模型不去猜,而是吐出:{"tool": "calculator", "args": {"expression": "4891*2733"}}。應用執行真正的計算機,得到13,367,103,再餵回去。模型於是用大白話回答:「答案是13,367,103。」之所以精確,是因為算這道題的是一台真計算機,而不是模型那模糊的記憶。

模型提出一個結構化的呼叫;應用執行真正的工具,再返回結果。

一個常見誤解:以為模型「執行」了工具。它並沒有——它只寫下請求。從請求到結果之間的一切,都是你掌控的普通軟體,而那裡正是你必須放安全檢查的地方。模型可能被騙(比如被一個動了手腳的網頁),從而請求一個危險的呼叫,所以真正的安全邊界,在工具那一層,而不在模型身上。

又稱
tool usefunction callingtool calling工具调用函数调用函數呼叫