載入中

現在我們來到工具使用工作流程的最後一步。在執行完我們的工具並取得結果後,我們需要將所有內容傳回給 Claude,以便它能為使用者提供完整的回應。

這個過程很直接:取出我們產生的所有工具結果部分,將它們打包成一則使用者訊息,然後連同原始的工具結構定義,將整個對話歷史傳回給 Claude。

新增助手訊息

首先,我們需要確保我們的對話歷史是完整的。在 Claude 對工具使用請求做出初始回應之後,我們需要使用 add_assistant_message() 將該回應加入我們的訊息歷史中。

這確保我們擁有完整的對話流程:使用者問題 → 助手工具請求 → 工具結果 → 最終助手回應。

執行工具並建立工具結果

run_tools() 函式會處理 Claude 回應中所有的工具使用請求,並建立格式正確的工具結果部分。每個工具結果包含:

  • 工具使用 ID(與原始請求相符)
  • 執行該工具所得到的實際輸出
  • 表示成功或錯誤的狀態

此函式能優雅地處理成功的工具執行與錯誤情況,將所有內容包裝成 Claude 所期望的正確 JSON 結構。

將工具結果加入對話

一旦我們取得工具結果,就使用 add_user_message() 將它們加入對話中:

python
add_user_message(messages, run_tools(parts))

這會建立一則包含所有工具結果部分的使用者訊息。現在對話已具備 Claude 提供最終回應所需的完整來回互動。

最後呼叫 Claude

最後一步是將所有內容傳回給 Claude。這需要兩個重要元素:

  • 完整的訊息歷史(使用者 → 助手 → 使用者)
  • 原始的工具結構定義
python
text, parts = chat(messages, tools=[get_current_datetime_schema])

包含工具結構定義至關重要。若沒有它們,Claude 會對對話歷史中的工具參照感到困惑,也無法理解 get_current_datetime 實際上是做什麼的。

成功

當一切運作正常時,Claude 會收到工具結果,並能提供完整且有根據的回應。在我們的範例中,Claude 成功取得了目前時間,並以自然的方式回應:「目前的日期與時間是 2025-04-03,12:54:00。」

這證明我們的工具整合運作正常。雖然 Claude 知道目前的日期,但它無法取得像確切目前時間這樣的即時資訊——而這正是我們的工具所提供的。

完整的工具使用循環現在已經運作起來:Claude 請求一個工具,我們執行它、回傳結果,然後 Claude 將該資訊納入其對使用者的最終回應中。