结构化输出让 Agent 在完成任务后返回符合指定 JSON Schema 的验证数据,而非自由文本。Agent 可以自由使用任意工具完成任务,最终输出仍然是可直接用于程序逻辑的结构化数据。
核心机制
工作原理:传入 JSON Schema → Agent 完成任务(可使用任意工具)→ SDK 验证输出是否符合 Schema → 不符合则自动重试 → 超过重试次数返回错误。
配置方式:通过 output_format(Python)或 outputFormat(TypeScript)选项传入 Schema。
结果位置:ResultMessage.structured_output(仅 subtype == "success" 时有值)。
错误处理:验证失败超过重试次数时,ResultMessage.subtype == "error_max_structured_output_retries"。
关键细节
基础用法(JSON Schema):
schema = {
"type": "object",
"properties": {
"company_name": {"type": "string"},
"founded_year": {"type": "number"},
},
"required": ["company_name"],
}
async for message in query(
prompt="Research Anthropic and provide key company information",
options=ClaudeAgentOptions(output_format={"type": "json_schema", "schema": schema}),
):
if isinstance(message, ResultMessage) and message.structured_output:
print(message.structured_output)类型安全(Pydantic):
from pydantic import BaseModel
class FeaturePlan(BaseModel):
feature_name: str
steps: list[dict]
risks: list[str]
async for message in query(
prompt="Plan how to add dark mode...",
options=ClaudeAgentOptions(
output_format={"type": "json_schema", "schema": FeaturePlan.model_json_schema()}
),
):
if isinstance(message, ResultMessage) and message.structured_output:
plan = FeaturePlan.model_validate(message.structured_output)TypeScript 用 Zod:z.toJSONSchema(MySchema) 生成 JSON Schema,MySchema.safeParse(result) 验证。
结构化输出与流式:JSON 结果只在最终 ResultMessage 中出现,不以流式增量形式传输。
与其他概念的关联
- agent-loop - ResultMessage 中的 structured_output 字段
- streaming-output - 结构化输出与流式的兼容性限制
- custom-tools - 工具返回 structuredContent(Python 不支持)
实践要点
- Schema 越简单越好,深层嵌套和大量必填字段会增加验证失败概率
- 任务可能没有所有字段的信息时,将对应字段设为可选
- prompt 要清晰,模糊的任务描述会导致 Agent 不知道该输出什么
- 适用场景:数据提取、报告生成、API 响应格式化、将 Agent 输出集成到下游系统