工具使用的運作方式
Claude 支援兩種類型的工具:Anthropic 定義的工具使用版本化類型(例如
web_search_20250305、text_editor_20250124)以確保跨模型版本的相容性。客戶端工具
透過以下步驟將客戶端工具與 Claude 整合:1
為 Claude 提供工具和使用者提示
- 在您的 API 請求中定義客戶端工具的名稱、描述和輸入架構。
- 包含可能需要這些工具的使用者提示,例如「舊金山的天氣如何?」
2
Claude 決定使用工具
- Claude 評估是否有任何工具可以幫助處理使用者的查詢。
- 如果有,Claude 會構建格式正確的工具使用請求。
- 對於客戶端工具,API 回應的
stop_reason為tool_use,表示 Claude 的意圖。
3
執行工具並返回結果
- 從 Claude 的請求中提取工具名稱和輸入
- 在您的系統上執行工具程式碼
- 在包含
tool_result內容區塊的新user訊息中返回結果
4
Claude 使用工具結果來制定回應
- Claude 分析工具結果以制定對原始使用者提示的最終回應。
伺服器工具
伺服器工具遵循不同的工作流程:2
Claude 執行伺服器工具
- Claude 評估伺服器工具是否可以幫助處理使用者的查詢。
- 如果可以,Claude 執行工具,結果會自動整合到 Claude 的回應中。
3
Claude 使用伺服器工具結果來制定回應
- Claude 分析伺服器工具結果以制定對原始使用者提示的最終回應。
- 伺服器工具執行不需要額外的使用者互動。
工具使用範例
以下是一些程式碼範例,展示各種工具使用模式和技術。為了簡潔起見,工具是簡單的工具,工具描述比理想情況下更短,以確保最佳效能。單一工具範例
單一工具範例
JSON
get_weather 函數,並在新的 user 訊息中返回結果:JSON
並行工具使用
並行工具使用
多工具範例
多工具範例
您可以在單一請求中為 Claude 提供多個工具供其選擇。以下是一個包含 在這種情況下,Claude 可能會:
get_weather 和 get_time 工具的範例,以及一個同時詢問兩者的使用者查詢。- 依序使用工具(一次一個)— 先呼叫
get_weather,然後在收到天氣結果後呼叫get_time - 使用並行工具呼叫 — 當操作是獨立的時,在單一回應中輸出多個
tool_use區塊
user 訊息中返回所有工具結果,每個結果都在自己的 tool_result 區塊中。缺少資訊
缺少資訊
如果使用者的提示不包含足夠的資訊來填寫工具的所有必需參數,Claude Opus 更有可能識別出缺少參數並詢問。Claude Sonnet 可能會詢問,特別是在提示它在輸出工具請求之前先思考時。但它也可能盡力推斷一個合理的值。例如,使用上面的 這種行為並不保證,特別是對於更模糊的提示和較不智能的模型。如果 Claude Opus 沒有足夠的上下文來填寫必需的參數,它更有可能回應澄清問題而不是進行工具呼叫。
get_weather 工具,如果您問 Claude「天氣如何?」而沒有指定位置,Claude,特別是 Claude Sonnet,可能會對工具輸入進行猜測:JSON
順序工具
順序工具
某些任務可能需要依序呼叫多個工具,使用一個工具的輸出作為另一個工具的輸入。在這種情況下,Claude 會一次呼叫一個工具。如果提示一次呼叫所有工具,Claude 很可能會為下游工具猜測參數,如果它們依賴於上游工具的工具結果。以下是使用 在這種情況下,Claude 會首先呼叫
這個範例展示了 Claude 如何將多個工具呼叫串聯在一起來回答需要從不同來源收集資料的問題。關鍵步驟是:
get_location 工具獲取使用者位置,然後將該位置傳遞給 get_weather 工具的範例:get_location 工具來獲取使用者的位置。在您在 tool_result 中返回位置後,Claude 會然後使用該位置呼叫 get_weather 來獲取最終答案。完整的對話可能看起來像這樣:| 角色 | 內容 |
|---|---|
| 使用者 | 我所在地的天氣如何? |
| 助理 | 我會先找到您目前的位置,然後檢查那裡的天氣。[使用 get_location 工具] |
| 使用者 | [get_location 的工具結果,具有匹配的 id 和結果 San Francisco, CA] |
| 助理 | [使用 get_weather 工具,具有以下輸入]{ “location”: “San Francisco, CA”, “unit”: “fahrenheit” } |
| 使用者 | [get_weather 的工具結果,具有匹配的 id 和結果 “59°F (15°C), mostly cloudy”] |
| 助理 | 根據您在舊金山,加州的目前位置,現在的天氣是 59°F (15°C) 且大部分多雲。這是一個相當涼爽和陰天的日子。如果您要外出,可能需要帶一件輕薄的外套。 |
- Claude 首先意識到它需要使用者的位置來回答天氣問題,所以它呼叫
get_location工具。 - 使用者(即客戶端程式碼)執行實際的
get_location函數並在tool_result區塊中返回結果「San Francisco, CA」。 - 現在知道了位置,Claude 繼續呼叫
get_weather工具,傳入「San Francisco, CA」作為location參數(以及猜測的unit參數,因為unit不是必需參數)。 - 使用者再次使用提供的參數執行實際的
get_weather函數並在另一個tool_result區塊中返回天氣資料。 - 最後,Claude 將天氣資料整合到對原始問題的自然語言回應中。
思維鏈工具使用
思維鏈工具使用
預設情況下,Claude Opus 被提示在回答工具使用查詢之前先思考,以最好地確定是否需要工具、使用哪個工具以及適當的參數。Claude Sonnet 和 Claude Haiku 被提示盡可能多地嘗試使用工具,更有可能呼叫不必要的工具或推斷缺少的參數。要提示 Sonnet 或 Haiku 在進行工具呼叫之前更好地評估使用者查詢,可以使用以下提示:思維鏈提示
使用相關工具(如果可用)回答使用者的請求。在呼叫工具之前,進行一些分析。首先,考慮提供的工具中哪個是回答使用者請求的相關工具。其次,檢查相關工具的每個必需參數,並確定使用者是否直接提供或給出足夠的資訊來推斷值。在決定是否可以推斷參數時,仔細考慮所有上下文以查看它是否支援特定值。如果所有必需參數都存在或可以合理推斷,則繼續進行工具呼叫。但是,如果必需參數的值之一缺失,請不要調用函數(即使使用缺失參數的填充值),而是要求使用者提供缺失的參數。如果未提供可選參數,請不要要求更多資訊。 JSON 模式
JSON 模式
您可以使用工具讓 Claude 產生遵循架構的 JSON 輸出,即使您沒有意圖透過工具或函數運行該輸出。以這種方式使用工具時:
- 您通常想要提供單一工具
- 您應該設定
tool_choice(請參閱強制工具使用)以指示模型明確使用該工具 - 記住模型會將
input傳遞給工具,所以工具的名稱和描述應該從模型的角度來看。
record_summary 工具來描述遵循特定格式的圖像。定價
Tool use requests are priced based on:- The total number of input tokens sent to the model (including in the
toolsparameter) - The number of output tokens generated
- For server-side tools, additional usage-based pricing (e.g., web search charges per search performed)
- The
toolsparameter in API requests (tool names, descriptions, and schemas) tool_usecontent blocks in API requests and responsestool_resultcontent blocks in API requests
tools, we also automatically include a special system prompt for the model which enables tool use. The number of tool use tokens required for each model are listed below (excluding the additional tokens listed above). Note that the table assumes at least 1 tool is provided. If no tools are provided, then a tool choice of none uses 0 additional system prompt tokens.
| Model | Tool choice | Tool use system prompt token count |
|---|---|---|
| Claude Opus 4.1 | auto, noneany, tool | 346 tokens 313 tokens |
| Claude Opus 4 | auto, noneany, tool | 346 tokens 313 tokens |
| Claude Sonnet 4.5 | auto, noneany, tool | 346 tokens 313 tokens |
| Claude Sonnet 4 | auto, noneany, tool | 346 tokens 313 tokens |
| Claude Sonnet 3.7 (deprecated) | auto, noneany, tool | 346 tokens 313 tokens |
| Claude Haiku 4.5 | auto, noneany, tool | 346 tokens 313 tokens |
| Claude Haiku 3.5 | auto, noneany, tool | 264 tokens 340 tokens |
| Claude Opus 3 (deprecated) | auto, noneany, tool | 530 tokens 281 tokens |
| Claude Sonnet 3 | auto, noneany, tool | 159 tokens 235 tokens |
| Claude Haiku 3 | auto, noneany, tool | 264 tokens 340 tokens |
usage 指標的一部分。