本頁涵蓋工具呼叫的生命週期:從 Claude 的回應中讀取 tool_use 區塊、在您的回覆中格式化 tool_result 區塊,以及傳達錯誤訊號。若要了解自動處理這些流程的 SDK 抽象層,請參閱 Tool Runner。
Claude 的回應會依據其使用的是用戶端工具或伺服器工具而有所不同。
回應的 stop_reason 會是 tool_use,並包含一個或多個 tool_use 內容區塊,其中包括:
id:此特定工具使用區塊的唯一識別碼。稍後將用於比對工具結果。
name:所使用工具的名稱。
input:一個物件,包含傳遞給工具的輸入,符合該工具的 input_schema。
當您收到用戶端工具的工具使用(tool use)回應時,您應該:
- 從
tool_use 區塊中擷取 name、id 和 input。
- 在您的程式碼庫中執行與該工具名稱對應的實際工具,並傳入工具的
input。
- 傳送一則
role 為 user 的新訊息以繼續對話,其中的 content 區塊包含 tool_result 類型及以下資訊:
tool_use_id:此結果所對應之工具使用請求的 id。
content(選填):工具的結果,可以是字串(例如 "content": "15 degrees")、巢狀內容區塊的列表(例如 "content": [{"type": "text", "text": "15 degrees"}]),或文件區塊的列表(例如 "content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}])。這些內容區塊可以使用 text、image、document 或 search_result 類型。
is_error(選填):若工具執行導致錯誤,請設為 true。
收到工具結果後,Claude 會使用該資訊繼續針對原始使用者提示生成回應。
Claude 會在內部執行工具,並將結果直接整合到其回應中,無需額外的使用者互動。
搭配 Claude 使用工具時,可能會發生幾種不同類型的錯誤:
處理 Claude 在單一回合中呼叫多個工具的回應。
讓 SDK 為您管理 tool_use 迴圈、結果格式化與重試。
撰寫能引導 Claude 選用正確工具的結構描述與說明。