← 回到 D 線・開發者線
D2

Tool Use

讓 Claude 呼叫你的功能

D 線・第 2 / 5 站

Tool Use(工具使用,也叫 function calling)讓 Claude 不只會講話,還能「呼叫你寫好的功能」——查即時庫存、寄 email、寫進資料庫、打別家的 API。你把功能的說明書交給 Claude,它判斷什麼時候該用、該帶什麼參數,你的程式負責實際執行再把結果回傳。這是把 Claude 從「聊天機器人」變成「會辦事的員工」的關鍵。

這一站重點

深入研讀 · 實作步驟

上面的重點讀完就夠用了;想真的搞懂原理、照著做,往下看完整說明與步驟

先講痛點。Claude 本質是個「文字生成器」——它靠訓練資料學會語言,但它不知道你公司此刻庫存剩幾件、不知道這張訂單的狀態、也沒辦法真的把一封 email 寄出去。官方課程用一個很好懂的例子:Claude 不擅長算大數字,你問它 1984135 乘以 9343116,它可能算錯。與其硬要它算,不如給它一個「計算機工具」,讓它把數字交給你的程式算,再拿正確答案回去。同樣道理搬到生意上:與其讓 Claude 憑空「猜」庫存,不如給它一個「查庫存工具」,它需要時就呼叫,你的程式去資料庫查真數字回傳。這樣 Claude 的回答才會是即時、正確、能負責的。

技術核心是 tool schema——一份給 Claude 看的工具說明書。每個工具要寫三塊:name(工具名,如 get_stock)、description(自然語言說明它做什麼、什麼情況該用它——這塊寫得好不好,直接決定 Claude 會不會在對的時機呼叫它,要當成寫給新同事的操作說明來寫)、input_schema(用 JSON Schema 描述它需要哪些參數,例如「產品編號,字串,必填」)。你把這些工具清單連同使用者的問題一起送給 Claude。

接下來是那個一定要記住的四步流程。第一步,你在請求裡帶上工具清單。第二步,Claude 判斷這題需不需要用工具、要用哪個、該帶什麼參數——如果要用,它回傳的 stop_reason 會是 tool_use,並附上工具名和它填好的參數(例如 get_stock,產品編號=A123)。第三步,你的程式看到 tool_use,就去實際執行——真的連資料庫查 A123 的庫存。第四步,你把查到的結果(例如「剩 12 件」)用一則 tool_result 訊息送回去,Claude 拿到後才組出給客戶看的最終回答(「A123 目前庫存 12 件,可以馬上出貨」)。這一來一回可能發生好幾輪,直到 Claude 不再需要工具、給出最終答案。

兩個進階觀念。第一,tool choice(工具選擇)可以控制 Claude 用工具的方式:預設 auto(它自己判斷要不要用);也可以強制它一定要用某個工具,這在「我就是要它輸出結構化資料」的場景很有用——例如逼它把客訴一律整理成 {類別, 情緒, 急迫度} 的固定格式,這招常被拿來做結構化輸出。第二,你可以一次給它多個工具(查庫存、查物流、寄通知),它會依對話需要,一步步串起來用。最後務必記住那條安全線:Claude 永遠只是「說」要呼叫哪個工具,真正的執行是你的程式。所以危險動作(刪資料、付款、寄信給客戶)你都可以在自己的程式裡加確認、加權限控管——決定權始終在你這邊。

實作步驟

  1. 找出 Claude 需要「一隻手」的地方 盤點你的場景裡有哪些是 Claude 憑空做不到、必須連到真實系統的動作:查即時庫存、查訂單狀態、寫進 CRM、寄通知。這些就是要做成工具的候選。
  2. 為每個工具寫 schema 給每個工具寫 namedescriptioninput_schemadescription 要當成寫給新同事的說明書——講清楚它做什麼、什麼時候該用,Claude 才會在對的時機呼叫。
  3. 把工具清單連同問題送給 Claude messages.create 請求裡加上 tools 參數。Claude 會自行判斷這題需不需要動用工具。
  4. 偵測 stop_reason 並執行工具 檢查回應的 stop_reason。若為 tool_use,取出 Claude 給的工具名與參數,在你自己的程式裡實際執行(查資料庫、呼叫別家 API)。危險動作在這一步加權限與確認。
  5. 用 tool_result 把結果送回去 把執行結果包成一則 tool_result 訊息,接在對話後面再送一次給 Claude,讓它根據真實資料組出最終回答。
  6. 需要固定格式時用 tool choice 強制 若目的是要 Claude 穩定輸出結構化資料(如把每封信整理成固定欄位),用 tool_choice 強制它呼叫指定工具,拿到可靠的 JSON。

常見踩雷

  • description 寫得太隨便——Claude 判斷要不要用工具全看這段,寫不清楚它就會亂用或不用。
  • 以為 Claude 會自己執行工具——它只負責「決定」,實際查庫、寄信都是你的程式做。
  • 沒檢查 stop_reason 就直接當成最終答案——會把「我要用工具」的中間狀態誤當結果。
  • 把危險動作(刪除、付款、對外寄信)直接讓工具無條件執行——一定要在自己程式裡加確認與權限。

深入來源:anthropics/courses・Tool Use(CC BY-NC 4.0)

出站條件

為一個「查資料」的動作寫好 tool schema,跑通「Claude 要求→你的程式執行→回傳結果」一輪。

改編來源: Building with the Claude API Claude Code in Action