載入中

當 Claude 請求工具呼叫後,您需要執行該函式並將結果傳回。這透過向 Claude 提供其所請求的資訊,完成了工具使用的工作流程。

執行工具函式

當 Claude 以工具使用區塊回應時,您需要提取輸入參數並呼叫您的函式。以下是存取工具參數的方法:

python
# 存取工具使用區塊
tool_use_block = response.content[1]

# 取得輸入參數
input_params = tool_use_block.input

# 使用參數呼叫您的函式
result = get_current_datetime(**input_params)

雙星號(**)會將字典解包為您函式所需的關鍵字引數。

工具結果區塊

執行工具後,您需要使用工具結果區塊將結果傳回給 Claude。此區塊有幾個重要的屬性:

  • tool_use_id - 必須與原始工具使用區塊中的 ID 相符
  • content - 您工具函式的輸出,轉換為字串
  • is_error - 如果執行過程中發生錯誤,則設為 true

處理多個工具呼叫

Claude 可以在單次回應中請求多個工具呼叫。例如,如果使用者問「10 + 10 是多少,30 + 30 又是多少?」,Claude 可能會發送兩個獨立的工具使用區塊:

每個工具使用區塊都會獲得一個唯一的 ID,您在傳回結果時必須匹配這些 ID:

這個 ID 系統確保 Claude 能夠正確地將每個結果與其對應的請求匹配,即使結果以不同的順序到達也是如此。

發送後續請求

您向 Claude 發送的後續請求必須包含完整的對話歷史記錄以及新的工具結果:

python
messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": response.content[1].id,
        "content": result,
        "is_error": False
    }]
})

對話流程如下所示:

請記得在後續請求中包含工具結構定義,即使 Claude 可能不需要再次呼叫工具。Claude 需要該結構定義來理解對話歷史記錄中的工具參照。

完整工作流程

以下是完整的流程:

  1. 使用者提出需要使用工具的問題
  2. Claude 以工具使用區塊回應
  3. 您執行所請求的工具函式
  4. 您發送包含工具結果的後續請求
  5. Claude 使用工具輸出提供最終答案

最終請求包含您完整的訊息歷史記錄、工具結果區塊以及工具結構定義。然後 Claude 會以一般文字訊息回應,其中融入了您工具執行所得的資訊。