在使用Claude的工具功能时,您会遇到一种与之前看到的简单文本响应不同的新型响应结构。Claude现在不再只返回单个文本块,而是可以返回包含文本和工具使用信息的多块消息。
发起启用工具的API调用
要让Claude能够使用工具,您需要在API调用中包含一个tools参数。以下是构建请求的方法:
python
messages = []
messages.append({
"role": "user",
"content": "What is the exact time, formatted as HH:MM:SS?"
})
response = client.messages.create(
model=model,
max_tokens=1000,
messages=messages,
tools=[get_current_datetime_schema],
)tools参数接受一个JSON模式列表,用于描述Claude可以调用的可用函数。
理解多块消息
当Claude决定使用工具时,它会返回一条助手消息,该消息的内容列表中包含多个块。这与您之前使用的简单纯文本响应相比是一个重大变化。

一条多块消息通常包含:
- 文本块 - 解释Claude正在做什么的人类可读文本(例如"我可以帮您查询当前时间。让我为您查找这些信息")
- ToolUse块 - 告知您的代码应调用哪个工具以及使用哪些参数的指令
ToolUse块包括:
- 用于跟踪工具调用的ID
- 要调用的函数名称(例如"get_current_datetime")
- 以字典格式呈现的输入参数
- 类型标识"tool_use"
使用多块消息管理对话历史
请记住,Claude不会存储对话历史——您需要手动管理它。在处理工具响应时,您必须保留整个内容结构,包括所有块。
以下是将多块助手消息正确追加到对话历史中的方法:
messages.append({
"role": "assistant",
"content": response.content
})这样可以同时保留文本块和工具使用块,这对于在后续API调用中维护对话上下文至关重要。
完整的工具使用流程

工具使用过程遵循以下模式:
- 将带有工具模式的用户消息发送给Claude
- 接收包含文本块和工具使用块的助手消息
- 提取工具信息并执行实际函数
- 将工具结果连同完整的对话历史一起发送回Claude
- 接收Claude的最终响应
每个步骤都需要仔细处理消息结构,以确保Claude拥有提供准确响应所需的完整上下文。
更新辅助函数
如果您一直在使用像add_user_message()和add_assistant_message()这样的辅助函数,您需要更新它们以处理多块内容。当前版本可能只支持单个文本块,但现在它们需要适应包含工具使用块的更复杂内容结构。
这种多块消息处理对于构建能够无缝集成Claude工具能力同时保持正确对话流程的健壮应用程序至关重要。