加载中

发送工具结果

第 25 课10 分钟

在Claude请求工具调用后,您需要执行该函数并将结果发送回去。这通过向Claude提供其所请求的信息来完成工具使用工作流程。

运行工具函数

当Claude以工具使用块进行响应时,您需要提取输入参数并调用您的函数。以下是访问工具参数的方法:

python
response.content[1].input

这会为您提供一个字典,其中包含Claude想要传递给您函数的参数。由于您的函数期望的是关键字参数而不是字典,因此您可以使用Python的解包语法:

python
get_current_datetime(**response.content[1].input)

工具结果块

运行工具函数后,您需要使用工具结果块将结果发送回Claude。该块位于用户消息内,用于告知Claude您执行该工具时发生了什么。

工具结果块具有几个重要属性:

  • tool_use_id - 必须与此ToolResult所对应的ToolUse块的id相匹配
  • content - 运行您的工具后的输出,序列化为字符串
  • is_error - 如果发生错误,则为True

处理多个工具调用

Claude可以在单次响应中请求多个工具调用。例如,如果用户问"10 + 10是多少,30 + 30又是多少?",Claude可能会响应两个独立的ToolUse块。

每个工具调用都会获得一个唯一的ID,在发送回结果时,您必须匹配这些ID。这可确保Claude知道哪个结果对应哪个请求,即使结果以不同的顺序到达也是如此。

构建后续请求

您向Claude发出的后续请求必须包含完整的对话历史记录以及新的工具结果。以下是其结构:

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

完整的消息历史记录现在包含:

  • 原始用户消息
  • 带有工具使用块的助手消息
  • 带有工具结果块的用户消息

发出最终请求

发送后续请求时,即使您不期望Claude再次进行工具调用,您仍必须包含工具模式(schema)。Claude需要该模式来理解您对话历史记录中的工具引用。

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

随后,Claude将以最终消息进行响应,该消息将工具结果整合为对用户的自然响应。工具使用工作流程现已完成——您已成功使Claude能够通过您的自定义函数访问实时信息。