加载中

编写完工具函数后,下一步是创建一个 JSON 模式,告诉 Claude 您的函数期望什么参数以及如何使用它。这个模式充当文档,供 Claude 阅读以理解何时以及如何调用您的工具。

理解 JSON Schema

JSON Schema 并非专门用于 AI 或工具调用——它是一种广泛使用的数据验证规范,已经存在多年。AI 社区采用它是因为它是描述函数参数和验证数据的便捷方式。

完整的工具规范有三个主要部分:

  • name - 工具的清晰、描述性名称(如 "get_weather")
  • description - 该工具的功能、何时使用以及返回什么
  • input_schema - 描述函数参数的实际 JSON 模式

编写有效的描述

您的工具描述对于帮助 Claude 理解何时使用您的函数至关重要。最佳实践包括:

  • 力求用 3-4 句话解释该工具的功能
  • 描述 Claude 何时应该使用它
  • 说明它返回什么类型的数据
  • 为每个参数提供详细描述

生成模式的简便方法

您可以使用 Claude 本身来生成 JSON 模式,而不必从头编写。以下是具体流程:

  1. 复制您的工具函数代码
  2. 前往 Claude 并要求它为工具调用编写一个 JSON 模式
  3. 将 Anthropic 关于工具使用的文档作为上下文包含进去
  4. 让 Claude 按照最佳实践生成一个格式正确的模式

提示应该类似于:"为此函数编写一个用于工具调用目的的有效 JSON 模式规范。请遵循所附文档中列出的最佳实践。"

在代码中实现模式

一旦 Claude 生成了您的模式,将其复制到您的代码文件中。以下是一个值得遵循的良好命名模式:

python
def get_current_datetime(date_format="%Y-%m-%d %H:%M:%S"):
    if not date_format:
        raise ValueError("date_format cannot be empty")
    return datetime.now().strftime(date_format)

get_current_datetime_schema = {
    "name": "get_current_datetime",
    "description": "Returns the current date and time formatted according to the specified format",
    "input_schema": {
        "type": "object",
        "properties": {
            "date_format": {
                "type": "string",
                "description": "A string specifying the format of the returned datetime. Uses Python's strftime format codes.",
                "default": "%Y-%m-%d %H:%M:%S"
            }
        },
        "required": []
    }
}

使用 function_name 后跟 function_name_schema 的模式,以保持您的模式井然有序,并便于与其对应的函数相匹配。

添加类型安全

为了更好的类型检查,从 Anthropic 库中导入并使用 ToolParam 类型:

python
from anthropic.types import ToolParam

get_current_datetime_schema = ToolParam({
    "name": "get_current_datetime",
    "description": "Returns the current date and time formatted according to the specified format",
    # ……模式的其余部分
})

虽然这对功能而言并非严格必要,但它可以防止您在将模式与 Claude 的 API 一起使用时出现类型错误,并使您的代码更加健壮。