第 41 页 / 共 100 页 / 飞书修订版 6

6.Sending tool results

此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)

邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org

==================================================

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

运行工具函数

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

response.content[1].input

这会给你一个包含Claude想要传递给你函数的参数字典。由于你的函数期望的是关键字参数而不是字典,你需要使用Python的解包语法:

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

image1.png

Tool Result Block

运行工具函数后,你需要使用工具结果块将结果发送回Claude。这个块放在用户消息内部,告诉Claude你执行工具时发生了什么。

image2.png

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

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

处理多个工具调用

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

image3.png

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

image4.png

构建后续请求

你对 Claude 的后续请求必须包含完整的对话历史记录以及新的工具结果。结构如下:

messages.append({

"role": "user",

"content": [{

"type": "tool_result",

"tool_use_id": response.content[1].id,

"content": "15:04:22",

"is_error": False

}]

})

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

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

发送最终请求

在发送后续请求时,即使你不期望Claude再次调用工具,你仍然必须包含工具模式。Claude需要这个模式来理解对话历史中的工具引用。

client.messages.create(

model=model,

max_tokens=1000,

messages=messages,

tools=[get_current_datetime_schema]

)

image5.png

Claude 随后会回复一条最终消息,将工具结果融入到对用户的自然回复中。工具使用工作流程现在已经完成——您已成功让 Claude 通过您的自定义函数访问实时信息。

==================================================



此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org