当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需要该模式来理解对话历史记录中的工具引用。
完整工作流程
以下是完整的流程:
- 用户提出一个需要使用工具的问题
- Claude以工具使用块进行响应
- 您执行所请求的工具函数
- 您发送包含工具结果的后续请求
- Claude使用工具输出提供最终答案
最终请求包括您完整的消息历史记录、工具结果块以及工具模式。然后Claude会以一条常规文本消息进行响应,其中融合了您工具执行所得到的信息。