使用 Claude 执行工具调用的指南

Claude 能够与外部客户端工具和函数交互,允许您使用自己的自定义工具来装备 Claude,以执行更广泛的任务。现在,对于使用 Anthropic Messages API、Amazon Bedrock 和 Google Vertex AI 的开发人员,工具使用功能已在整个 Claude 3 模型系列中普遍可用!以下是如何使用 Messages API 为 Claude 提供工具的示例:

    
curl https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-3-opus-20240229",
    "max_tokens": 1024,
    "tools": [
      {
        "name": "get_weather",
        "description": "获取给定位置的当前天气",
        "input_schema": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "城市和州,例如旧金山,加利福尼亚州"
            }
          },
          "required": ["location"]
        }
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "旧金山的天气如何?"
      }
    ]
  }'

工具使用的工作原理

使用 Claude 的工具涉及以下步骤:

  1. 为 Claude 提供工具和用户提示:(API 请求)
    • 定义您希望 Claude 访问的工具集,包括它们的名称、描述和输入模式。
    • 提供一个用户提示,可能需要使用一个或多个这些工具来回答,例如“旧金山的天气如何?”。
  2. Claude 使用工具:(API 响应)
    • Claude 评估用户提示,并决定是否有任何可用工具可以帮助回答用户的查询或任务。如果是,它还会决定使用哪些工具以及使用什么输入。
    • Claude 构造格式正确的工具使用请求。
    • API 响应将具有 stop_reason 为 tool_use,表示 Claude 想要使用外部工具。
  3. 提取工具输入,运行代码并返回结果:(API 请求)
    • 在客户端,您应该从 Claude 的工具使用请求中提取工具名称和输入。
    • 在客户端运行实际的工具代码。
    • 通过使用包含 tool_result 内容块的新 user 消息继续对话,将结果返回给 Claude。
  4. Claude 使用工具结果来制定响应:(API 响应)
    • 在收到工具结果后,Claude 将使用该信息来制定对原始用户提示的最终响应。

步骤 (3) 和 (4) 是可选的 - 对于某些工作流,Claude 使用工具就是您需要的所有信息,您可能不需要将工具结果返回给 Claude。

指定工具

工具在 API 请求的 tools 顶级参数中指定。每个工具定义包括:

  • name:工具的名称。必须匹配正则表达式 ^[a-zA-Z0-9_-]{1,64}$
  • description:对工具功能、何时使用以及如何运作的详细纯文本描述。
  • input_schema:定义工具预期参数的 JSON Schema 对象。

以下是一个简单的工具定义示例:

    
{
  "name": "get_weather",
  "description": "获取给定位置的当前天气",
  "input_schema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "城市和州,例如旧金山,加利福尼亚州"
      },
      "unit": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"],
        "description": "温度单位,'celsius' 或 'fahrenheit'"
      }
    },
    "required": ["location"]
  }
}

工具使用和工具结果内容块

当 Claude 决定使用您提供的工具之一时,它将返回一个 stop_reason 为 tool_use 的响应,并在 API 响应中包含一个或多个 tool_use 内容块,其中包括:

  • id:此特定工具使用块的唯一标识符。
  • name:正在使用的工具的名称。
  • input:包含传递给工具的输入的对象,符合工具的 input_schema

以下是包含 tool_use 内容块的 API 响应示例:

    
{
  "id": "msg_01Aq9w938a90dw8q",
  "model": "claude-3-opus-20240229",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "<thinking>我需要使用 get_weather,用户想要 SF,这可能是旧金山,加利福尼亚州。</thinking>"
    },
    {
      "type": "tool_use",
      "id": "toolu_01A09q90qw90lq917835lq9",
      "name": "get_weather",
      "input": {"location": "San Francisco, CA", "unit": "celsius"}
    }
  ]
}

在收到工具使用响应时,您应该:

  1. tool_use 块中提取 nameidinput
  2. 在您的代码库中运行与该工具名称对应的实际工具,传入工具 input
  3. 通过发送一个新消息继续对话,其中 role 为 user,content 块包含tool_result 类型和以下信息:
    • tool_use_id:这是结果对应的工具使用请求的 id
    • content:工具的结果,作为字符串或嵌套内容块的列表。
    • is_error(可选):如果工具执行导致错误,则设置为 true

以下是返回成功工具结果的示例:

    
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "15 度"
    }
  ]
}

错误处理

在使用 Claude 的工具时可能会发生几种不同类型的错误:

  1. 工具执行错误: 如果工具在执行过程中抛出错误(例如获取天气数据时的网络错误),您可以在 content 中返回错误消息以及 is_error: true

        
    {
      "role": "user",
      "content": [
        {
          "type": "tool_result",
          "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
          "content": "ConnectionError: 天气服务 API 不可用(HTTP 500)",
          "is_error": true
        }
      ]
    }
    
  2. 超过最大令牌数: 如果由于达到 max_tokens 限制而截断了 Claude 的响应,并且截断的响应包含不完整的工具使用块,则需要使用更高的 max_tokens 值重试请求以获取完整的工具使用。

  3. 无效的工具使用: 如果 Claude 尝试使用工具无效(例如缺少必需参数),通常意味着没有足够的信息供 Claude 正确使用该工具。您可以返回错误响应,Claude 通常会使用填充了缺失信息的请求重试。

强制工具使用

在某些情况下,您可能希望 Claude 使用特定工具来回答用户的问题。您可以通过在 tool_choice 字段中指定工具来做到这一点:

    
"tool_choice": {"type": "tool", "name": "get_weather"}

工具使用最佳实践和限制

在使用 Claude 的工具时,请记住以下限制和最佳实践:

  • 使用 Claude 3 Opus 处理复杂的工具使用,如果处理简单的工具则使用 Haiku。
  • 工具数量:即使使用数百个简单工具,所有 Claude 3 模型仍可保持 >90% 的准确性。
  • 复杂和深度嵌套的工具:尝试将输入模式从深度嵌套的 JSON 对象扁平化,并减少输入的数量。
  • 顺序工具使用:设计工作流程和工具,以引出并使用来自 Claude 的一系列顺序工具。
  • 重试:如果 Claude 的工具使用请求无效或缺少必需参数,可以返回错误响应,Claude 通常会使用填充了缺失信息的请求重试。

总结

工具使用是一种强大的技术,通过将 Claude 连接到外部数据源和功能来扩展其能力。使用设计良好的工具集,您可以使 Claude 能够处理大量仅凭其基础

阅读全文
AI工具教程
免费领取AI学习资料 进AI副业交流群
礼物
AI工具教程
免费领取AI学习资料 进AI副业交流群