首页 教程 常见问题

Agent SDK 结构化输出

让 Claude 代理返回结构化的 JSON 数据——便于程序化处理结果。

什么是结构化输出

结构化输出让 Claude 按照你定义的格式返回数据,而不是自由文本。这在需要将结果传递给其他系统时非常有用。

使用方式

import json

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=2048,
    system="""请以 JSON 格式回答,格式如下:
    {
        "summary": "代码摘要",
        "issues": [
            {"file": "文件名", "severity": "high|medium|low", "description": "问题描述"}
        ],
        "score": 1-10
    }
    只返回 JSON,不要有其他内容。""",
    messages=[
        {"role": "user", "content": "审查 main.py"}
    ]
)

result = json.loads(response.content[0].text)
print(f"代码评分: {result['score']}")
for issue in result['issues']:
    print(f"[{issue['severity']}] {issue['file']}: {issue['description']}")

使用工具实现结构化输出

更可靠的方式是通过工具强制结构化:

tools = [
    {
        "name": "submit_review",
        "description": "提交代码审查结果",
        "input_schema": {
            "type": "object",
            "properties": {
                "summary": {"type": "string"},
                "score": {"type": "integer", "minimum": 1, "maximum": 10},
                "issues": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "file": {"type": "string"},
                            "severity": {"enum": ["high", "medium", "low"]},
                            "description": {"type": "string"}
                        }
                    }
                }
            },
            "required": ["summary", "score", "issues"]
        }
    }
]

下一步