编写完工具函数后,下一步是创建一个 JSON 模式,告诉 Claude 您的函数期望什么参数以及如何使用它。这个模式充当文档,供 Claude 阅读以理解何时以及如何调用您的工具。
理解 JSON Schema
JSON Schema 并非专门用于 AI 或工具调用——它是一种广泛使用的数据验证规范,已经存在多年。AI 社区采用它是因为它是描述函数参数和验证数据的便捷方式。

完整的工具规范有三个主要部分:
- name - 工具的清晰、描述性名称(如 "get_weather")
- description - 该工具的功能、何时使用以及返回什么
- input_schema - 描述函数参数的实际 JSON 模式
编写有效的描述
您的工具描述对于帮助 Claude 理解何时使用您的函数至关重要。最佳实践包括:
- 力求用 3-4 句话解释该工具的功能
- 描述 Claude 何时应该使用它
- 说明它返回什么类型的数据
- 为每个参数提供详细描述

生成模式的简便方法
您可以使用 Claude 本身来生成 JSON 模式,而不必从头编写。以下是具体流程:
- 复制您的工具函数代码
- 前往 Claude 并要求它为工具调用编写一个 JSON 模式
- 将 Anthropic 关于工具使用的文档作为上下文包含进去
- 让 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 一起使用时出现类型错误,并使您的代码更加健壮。