当您需要从Claude获取结构化数据时,您有两种主要方法:使用消息预填充和停止序列的基于提示的技术,或使用工具的更稳健的方法。虽然基于提示的方法设置更简单,但工具能以额外的复杂性为代价提供更可靠的输出。
用于结构化数据的工具
基于工具的方法通过创建一个JSON schema来定义您想要提取的数据的确切结构。您不再需要寄望于Claude正确地格式化其响应,而是本质上给Claude一个函数来调用,该函数带有与您期望的输出结构相匹配的特定参数。

以下是该过程的工作方式:
- 编写一个描述您所寻找数据结构的schema
- 使用
tool_choice参数强制Claude使用工具 - 从工具使用响应中提取结构化数据
- 无需提供后续响应——一旦获得数据,您就完成了
例如,如果您想从一份报表中提取财务余额和关键见解,您的schema会将它们分别定义为整数和字符串数组。
控制工具使用
这项技术的一个关键部分是确保Claude确实调用了您的工具。您可以使用tool_choice参数来控制此行为:

{"type": "auto"}- 模型自行决定是否需要使用工具(默认){"type": "any"}- 模型必须使用工具,但可以选择使用哪一个{"type": "tool", "name": "TOOL_NAME"}- 模型必须使用指定的工具
对于结构化数据提取,您通常会希望使用第三个选项,以保证Claude调用您的特定schema工具。
实现示例
假设您想从一篇文章中提取标题、作者和关键见解。首先,您需要创建一个工具schema:
python
article_summary_schema = {
"name": "article_summary",
"description": "Extracts structured data from articles",
"input_schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"author": {"type": "string"},
"key_insights": {
"type": "array",
"items": {"type": "string"}
}
}
}
}然后您需要调用Claude并使用该工具,强制其使用:
python
response = chat(
messages,
tools=[article_summary_schema],
tool_choice={"type": "tool", "name": "article_summary"}
)响应将包含一个工具使用块,其中您的结构化数据位于input字段中。您可以直接访问它:
python
structured_data = response.content[0].input何时使用每种方法
当您需要快速简单的东西时,选择基于提示的结构化输出。当您需要保证可靠性并能够处理额外的设置复杂性时,使用工具。这两种技术都很有价值,具体取决于您的特定用例和需求。