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)

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

工具结果块有几个重要属性:
- tool_use_id - 必须与此ToolResult对应的ToolUse块的id匹配
- content - 运行你的工具的输出,序列化为字符串
- is_error - 如果发生错误则为 True
处理多个工具调用
Claude 可以在单个响应中请求多个工具调用。例如,如果用户询问"10 + 10 等于多少,30 + 30 等于多少?",Claude 可能会用两个独立的 ToolUse 块来响应。

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

构建后续请求
你对 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]
)

Claude 随后会回复一条最终消息,将工具结果融入到对用户的自然回复中。工具使用工作流程现在已经完成——您已成功让 Claude 通过您的自定义函数访问实时信息。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org