加载中

当您需要从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

何时使用每种方法

当您需要快速简单的东西时,选择基于提示的结构化输出。当您需要保证可靠性并能够处理额外的设置复杂性时,使用工具。这两种技术都很有价值,具体取决于您的特定用例和需求。