第 40 页 / 共 100 页 / 飞书修订版 5

5.Handling message blocks

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

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

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

在使用Claude的工具功能时,你会遇到一种与之前见过的简单文本响应不同的新响应结构。Claude现在不再只是返回单个文本块,而是可以返回包含文本和工具使用信息的多块消息。

进行启用工具的API调用

要让Claude能够使用工具,你需要在API调用中包含一个tools参数。以下是如何构建请求的方法:

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 决定使用工具时,它会返回一个包含多个块的助手消息,这些块位于内容列表中。这与您之前使用的简单纯文本响应相比是一个重大变化。

image1.png

多块消息通常包含:

  • 文本块 - 人类可读的文本,解释 Claude 正在做什么(例如"我可以帮您查找当前时间。让我为您找到这个信息")
  • ToolUse 块 - 为您的代码提供指令,说明要调用哪个工具以及使用什么参数

ToolUse 块包括:

  • 用于跟踪工具调用的 ID
  • 要调用的函数名称(如"get_current_datetime")
  • 格式化为字典的输入参数
  • 类型标识"tool_use"

使用多块消息管理对话历史

请记住,Claude不会存储对话历史 - 您需要手动管理。在处理工具响应时,您必须保留完整的内容结构,包括所有块。

以下是如何正确地将多块助手消息添加到对话历史中:

messages.append({

"role": "assistant",

"content": response.content

})

这样可以同时保留文本块和工具使用块,这对于在后续API调用中维护对话上下文至关重要。

完整的工具使用流程

image2.png

工具使用过程遵循以下模式:

  1. 向Claude发送包含工具模式的用户消息
  2. 接收包含文本块和工具使用块的助手消息
  3. 提取工具信息并执行实际函数
  4. 将工具结果连同完整对话历史一起发送回Claude
  5. 接收Claude的最终响应

每个步骤都需要仔细处理消息结构,以确保Claude拥有提供准确响应所需的完整上下文。

更新辅助函数

如果你一直在使用像add_user_message()和add_assistant_message()这样的辅助函数,你需要更新它们以处理多块内容。当前版本可能只支持单个文本块,但现在它们需要适应包含工具使用块的更复杂内容结构。

这种多块消息处理对于构建强大的应用程序至关重要,这些应用程序能够无缝集成Claude的工具功能,同时保持适当的对话流程。

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



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