載入中

在使用 Claude 的工具功能時,您會遇到一種與先前看到的簡單文字回應不同的新回應結構類型。Claude 現在不再只是回傳單一文字區塊,而是可以回傳包含文字和工具使用資訊的多區塊訊息。

發出啟用工具的 API 呼叫

若要讓 Claude 能夠使用工具,您需要在 API 呼叫中包含一個 tools 參數。以下是如何構建請求:

python
messages = []
messages.append({
    "role": "user",
    "content": "What is the exact time, formatted as HH:MM:SS?"
})

response = client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema],
)

tools 參數接受一個 JSON 結構描述(schema)列表,用於描述 Claude 可以呼叫的可用函式。

理解多區塊訊息

當 Claude 決定使用工具時,它會回傳一個助手訊息,其內容列表中包含多個區塊。這與您先前使用的純文字簡單回應相比,是一個重大的變化。

一個多區塊訊息通常包含:

  • 文字區塊 - 人類可讀的文字,說明 Claude 正在做什麼(例如「我可以幫您查詢目前的時間。讓我為您查找這項資訊」)
  • ToolUse 區塊 - 告知您的程式碼應呼叫哪個工具以及使用哪些參數的指示

ToolUse 區塊包含:

  • 用於追蹤工具呼叫的 ID
  • 要呼叫的函式名稱(例如「get_current_datetime」)
  • 根據您的 JSON 結構描述格式化的輸入參數
  • 類型指定「tool_use」

處理包含多區塊內容的訊息歷史

這是關鍵部分:Claude 不會儲存對話歷史,因此您必須手動管理它。在處理工具回應時,您需要保留整個內容結構,包括所有區塊。

您不能只提取文字,而需要附加完整的回應內容:

python
messages.append({
    "role": "assistant",
    "content": response.content
})

這樣可以同時保留文字區塊和工具使用區塊,為未來的 API 呼叫維持完整的對話上下文。

完整流程

工具使用流程遵循以下模式:

  1. 將包含工具結構描述的使用者訊息傳送給 Claude
  2. 接收多區塊助手訊息(文字 + 工具使用)
  3. 提取工具呼叫資訊並執行該函式
  4. 將工具結果連同完整的訊息歷史傳送回 Claude
  5. 接收 Claude 的最終回應

每個步驟都需要仔細處理訊息結構,以維持對話的連續性。關鍵的洞察是,啟用工具的對話涉及更複雜的訊息格式,但維持完整訊息歷史的基本原則保持不變。

更新輔助函式

如果您一直在使用像 add_user_message 和 add_assistant_message 這樣的輔助函式,您需要更新它們以處理多區塊內容。目前的版本可能只支援單一文字區塊,但現在它們需要能夠容納包含工具使用區塊的更複雜內容結構。