學習如何在 Claude 中實作工具使用功能,包括模型選擇、工具定義、控制輸出和處理錯誤。
tools
頂層參數中指定。每個工具定義包括:
參數 | 描述 |
---|---|
name | 工具的名稱。必須符合正則表達式 ^[a-zA-Z0-9_-]{1,64}$ 。 |
description | 工具功能、使用時機和行為的詳細純文字描述。 |
input_schema | 定義工具預期參數的 JSON Schema 物件。 |
簡單工具定義範例
get_weather
的工具期望一個輸入物件,包含必需的 location
字串和可選的 unit
字串,後者必須是 “celsius” 或 “fahrenheit”。tools
參數呼叫 Anthropic API 時,我們會從工具定義、工具配置和任何使用者指定的系統提示構建一個特殊的系統提示。構建的提示旨在指導模型使用指定的工具並提供工具正常運作所需的上下文:
良好工具描述的範例
不良工具描述的範例
ticker
參數的含義。不良的描述過於簡短,讓 Claude 對工具的行為和使用方式有許多未解答的問題。
tool_choice
欄位中指定工具來實現這一點:
auto
允許 Claude 決定是否呼叫任何提供的工具。當提供 tools
時,這是預設值。any
告訴 Claude 必須使用提供的工具之一,但不強制使用特定工具。tool
允許我們強制 Claude 始終使用特定工具。none
防止 Claude 使用任何工具。當未提供 tools
時,這是預設值。tool_choice
參數的更改將使快取的訊息區塊失效。工具定義和系統提示保持快取,但訊息內容必須重新處理。tool_choice
設為 any
或 tool
時,我們會預填助手訊息以強制使用工具。這意味著模型不會在 tool_use
內容區塊之前發出思考鏈 text
內容區塊,即使明確要求這樣做。
tool_choice: {"type": "any"}
和 tool_choice: {"type": "tool", "name": "..."}
並會導致錯誤。只有 tool_choice: {"type": "auto"}
(預設)和 tool_choice: {"type": "none"}
與延伸思考相容。tool_choice
使用 {"type": "auto"}
(預設)並在 user
訊息中添加明確指令。例如:倫敦的天氣如何?在您的回應中使用 get_weather 工具。
record_summary
工具。請參閱使用 Claude 的工具使用以獲取完整的工作範例。
tool_choice
設為 auto
(這是預設值,請參閱強制工具使用),Claude Opus 3(已棄用)模型會這樣做,而 Sonnet 和 Haiku 可以通過提示來實現。
例如,給定提示「舊金山現在的天氣如何,那裡現在是什麼時間?」,Claude 可能會回應:
auto
時設定 disable_parallel_tool_use=true
,這確保 Claude 使用最多一個工具any
或 tool
時設定 disable_parallel_tool_use=true
,這確保 Claude 使用恰好一個工具完整並行工具使用範例
並行工具的完整測試腳本
並行工具使用的系統提示
使用者訊息提示
tool_use
的 stop_reason
和一個或多個 tool_use
內容區塊,包括:
id
:此特定工具使用區塊的唯一識別符。這將用於稍後匹配工具結果。name
:正在使用的工具名稱。input
:包含傳遞給工具的輸入的物件,符合工具的 input_schema
。具有 `tool_use` 內容區塊的 API 回應範例
tool_use
區塊中提取 name
、id
和 input
。input
。role
為 user
,content
區塊包含 tool_result
類型和以下資訊:
tool_use_id
:這是此工具使用請求結果的 id
。content
:工具的結果,作為字串(例如 "content": "15 度"
)、嵌套內容區塊列表(例如 "content": [{"type": "text", "text": "15 度"}]
)或文件區塊列表(例如 "content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 度"}]
)。這些內容區塊可以使用 text
、image
或 document
類型。is_error
(可選):如果工具執行導致錯誤,則設為 true
。成功工具結果的範例
包含圖像的工具結果範例
空工具結果的範例
包含文件的工具結果範例
tool
或 function
的 API 不同,Anthropic 的 API 將工具直接整合到 user
和 assistant
訊息結構中。訊息包含 text
、image
、tool_use
和 tool_result
區塊的陣列。user
訊息包括客戶端內容和 tool_result
,而 assistant
訊息包含 AI 生成的內容和 tool_use
。max_tokens
停止原因max_tokens
限制而被截斷,且截斷的回應包含不完整的工具使用區塊,您需要使用更高的 max_tokens
值重試請求以獲得完整的工具使用。
pause_turn
停止原因pause_turn
停止原因,表示 API 已暫停長時間執行的回合。
以下是如何處理 pause_turn
停止原因:
pause_turn
時:
工具執行錯誤
content
中返回錯誤訊息並設定 "is_error": true
:無效工具名稱
description
值再次嘗試請求。但是,您也可以使用指示錯誤的 tool_result
繼續對話,Claude 會嘗試再次使用工具並填入缺少的資訊:<search_quality_reflection> 標籤
伺服器工具錯誤
is_error
結果。對於網路搜尋,可能的錯誤代碼包括:too_many_requests
:超過速率限制invalid_input
:無效的搜尋查詢參數max_uses_exceeded
:超過最大網路搜尋工具使用次數query_too_long
:查詢超過最大長度unavailable
:發生內部錯誤並行工具呼叫無法運作