加载中

当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
    }]
})

对话流程如下所示:

请记住在后续请求中包含工具模式(schema),即使Claude很可能不需要再次调用工具。Claude需要该模式来理解对话历史记录中的工具引用。

完整工作流程

以下是完整的流程:

  1. 用户提出一个需要使用工具的问题
  2. Claude以工具使用块进行响应
  3. 您执行所请求的工具函数
  4. 您发送包含工具结果的后续请求
  5. Claude使用工具输出提供最终答案

最终请求包括您完整的消息历史记录、工具结果块以及工具模式。然后Claude会以一条常规文本消息进行响应,其中融合了您工具执行所得到的信息。