Skip to main content

Claude 结构化输出示例

以下示例展示如何使用Claude的 /v1/messages 接口获取JSON格式的结构化输出,适用于需要机器可读格式的场景。

快速开始

只需要替换 <API-KEY> 为你的实际API密钥即可运行。
curl -X POST "https://model-api.skyengine.com.cn/v1/messages" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <API-KEY>" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-3-7-sonnet-20250219",
    "max_tokens": 1000,
    "messages": [
      {
        "role": "user",
        "content": "分析苹果公司的基本信息,包括公司名称、成立年份、创始人、主要业务等,请以JSON格式返回,格式如下:{\"company_name\": \"公司名称\", \"founded_year\": 年份, \"founders\": [\"创始人列表\"], \"main_business\": [\"主要业务\"], \"headquarters\": \"总部位置\"}"
      }
    ]
  }'

结果示例

200
{
  "id": "83ffa096996a40d1b70c8611766fe3ab",
  "content": [
    {
      "text": "{\n  \"company_name\": \"苹果公司 (Apple Inc.)\",\n  \"founded_year\": 1976,\n  \"founders\": [\"史蒂夫·乔布斯\", \"史蒂夫·沃兹尼亚克\", \"罗纳德·韦恩\"],\n  \"main_business\": [\"消费电子产品\", \"软件服务\", \"数字内容服务\"],\n  \"headquarters\": \"美国加利福尼亚州库比蒂诺\",\n  \"market_cap\": \"约3万亿美元(截至2024年)\",\n  \"key_products\": [\"iPhone\", \"iPad\", \"Mac\", \"Apple Watch\", \"AirPods\", \"Apple TV\"]\n}",
      "type": "text"
    }
  ],
  "model": "claude-3-7-sonnet-20250219",
  "role": "assistant",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 156,
    "output_tokens": 185
  }
}

Claude结构化输出的特点

1. 提示工程重要性

Claude没有内置的 response_format 参数,需要通过精心设计的提示来引导输出结构化内容:
  • 明确指令: 在提示中明确要求JSON格式
  • 格式示例: 提供期望的JSON结构模板
  • 约束条件: 明确不要额外文字,只要JSON

2. 解析策略

由于Claude可能在JSON前后添加解释文字,建议采用以下解析策略:
  1. 首先尝试直接解析整个响应
  2. 如果失败,使用正则表达式提取JSON部分
  3. 提供错误处理和内容回退

应用场景

  • 数据提取: 从非结构化文档中提取关键信息
  • 内容分析: 对文档、评论、反馈进行结构化分析
  • 业务流程: 将自然语言需求转换为结构化数据
  • API集成: 为后端系统提供标准化数据格式
  • 报告生成: 自动生成结构化的分析报告

最佳实践

1. 提示设计

{用户问题}

请严格按照以下JSON格式返回结果:
{JSON模板}

重要:
1. 只返回JSON格式的数据,不要包含任何解释文字
2. 确保JSON格式正确且完整
3. 所有字符串值请使用双引号

2. 错误处理

  • 设置JSON解析的多重fallback策略
  • 对解析失败的情况提供有意义的错误信息
  • 保留原始内容以便调试

3. 数据验证

  • 验证必填字段是否存在
  • 检查数据类型是否符合预期
  • 验证枚举值是否在允许范围内

注意事项

  1. 模型差异: Claude的结构化输出完全依赖提示工程
  2. 成功率: 相比OpenAI的response_format,可能需要更多调试
  3. token消耗: 详细的格式说明会增加输入token数量
  4. 一致性: 建议使用较低的temperature以提高输出一致性