第 42 页 / 共 100 页 / 飞书修订版 8

7.Multi-turn conversations with tools

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

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

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

H7DRb6maNoyq9Zx7FiYcFYqdnNb.bin

在构建具有多个工具的应用程序时,您需要处理Claude可能需要按顺序调用多个工具来回答单个用户问题的场景。例如,如果用户询问"从今天开始103天后是星期几?",Claude需要首先获取当前日期,然后在此基础上加上103天。

image1.png

这创建了一个多轮对话模式,其中Claude在提供最终答案之前会发出多个工具请求。您的应用程序需要自动处理这种情况。

多轮工具模式

以下是当Claude需要多个工具时幕后发生的情况:

  1. 用户询问:"从今天开始103天后是星期几?"
  2. Claude响应一个工具使用块,请求get_current_datetime
  3. 您的服务器调用该函数并返回结果
  4. Claude意识到它需要更多信息,并请求add_duration_to_datetime
  5. 您的服务器调用该函数并返回结果
  6. Claude现在有足够的信息来提供最终答案
image2.png

构建对话循环

为了处理这种模式,你需要一个对话循环,该循环会持续运行直到Claude停止请求工具:

def run_conversation(messages):

while True:

response = chat(messages)

add_user_message(messages, response)

# 伪代码

if response isn't asking for a tool:

break

tool_result_blocks = run_tools(response)

add_user_message(tool_result_blocks)

return messages

image3.png

重构辅助函数

在实现对话循环之前,您需要更新辅助函数以正确处理多个消息块。

更新消息处理器

您当前的 add_user_message 和 add_assistant_message 函数假设您总是处理纯文本。请更新它们以处理完整的消息对象:

from anthropic.types import Message

def add_user_message(messages, message):

user_message = {

"role": "user",

"content": message.content if isinstance(message, Message) else message

}

messages.append(user_message)

这样您就可以传入字符串、块列表或完整的消息对象。

更新聊天函数

修改你的聊天函数以接受工具列表并返回完整消息而不仅仅是文本:

def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):

params = {

"model": model,

"max_tokens": 1000,

"messages": messages,

"temperature": temperature,

"stop_sequences": stop_sequences,

}

if tools:

params["tools"] = tools

if system:

params["system"] = system

message = client.messages.create(**params)

return message

从消息中提取文本

由于现在返回的是完整的消息对象,需要创建一个辅助函数来在需要时提取文本:

def text_from_message(message):

return "\n".join(

[block.text for block in message.content if block.type == "text"]

)

这个函数会找到消息中的所有文本块并将它们连接在一起,当你需要向用户显示最终响应时非常有用。

Key Improvements

这些重构步骤为你的代码准备了强大的工具处理能力:

  • 灵活的消息处理 - 你的辅助函数现在可以处理不同的消息格式
  • 聊天中的工具支持 - 聊天功能可以接收并传递工具模式
  • 完整消息返回 - 您获得的是完整的消息对象而不仅仅是文本,保留了所有块
  • 文本提取实用程序 - 从复杂消息中获取可读文本的简便方法

有了这些基础,您就可以实现对话循环,自动处理多个工具调用,创造无缝体验,让Claude可以根据需要使用任意数量的工具来回答用户问题。

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



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