结构化输出
- 解释为什么由 schema 强制的输出胜过提示要 JSON 再碰运气
- 提供一份 JSON Schema,并把响应解析为类型化的对象(Pydantic / Zod)
- 凭意图而非机制把结构化输出与工具使用区分开
- 应用四条建议,写出收得紧、可靠的 schema
- 用一个一问到底的经验法则挑出合适的工具
当 Claude 的输出要喂给其他软件时,你需要 可靠的结构——每一次都是符合已知形态的有效 JSON。不要靠"请用 JSON 回复"再寄希望;要用平台的结构化输出支持。
本课带你从为什么靠提示再碰运气会失败,走到如何强制套用一份 schema 并把它解析为类型化的对象——以及当结构化输出和工具使用看起来一模一样时,如何把它们区分开。请从上到下逐节读完,然后用接近文末的小测验来检验自己。
可靠的方式
为输出提供一份 JSON Schema,让 API/SDK 强制套用它,然后解析为类型化的对象(例如 Python 中的 Pydantic、TypeScript 中的 Zod)。SDK 的解析辅助方法会交给你一个类型化的结果,而不是一段你还得自己 JSON.parse 并校验的字符串。
Guided walkthrough1 of 3
- 把你需要的输出建模为一份 JSON Schema——在 Python 中用 Pydantic 的 BaseModel,在 TypeScript 中用 Zod schema。
- 让模型返回符合该 schema 的数据,从而由 API/SDK 强制套用它,而不是听天由命。
- 使用 SDK 的解析辅助方法直接得到类型化的结果——无需手动 JSON.parse 再加上自己手写的校验。
# Conceptual shape — see the official docs for the current API surface.
from pydantic import BaseModel
class Ticket(BaseModel):
title: str
priority: str # "low" | "medium" | "high"
tags: list[str]
# Request the model to return data conforming to Ticket's JSON schema,
# then parse the response into a Ticket instance.
想要一个可以直接套用的具体请求吗?下面就是你交给模型的内容的形态——把其中的模型换成你自己的 schema 即可。
请求符合 schema 的输出
Return the data conforming to this JSON Schema:
{
"title": "string",
"priority": "low | medium | high",
"tags": ["string"]
}
Do not include any prose outside the JSON.为什么不直接在提示词里要 JSON?
你 可以 在提示词里要 JSON,对于简单情形它也管用——但它可能漂移:多出的散文、一个尾随逗号、一个缺失的字段。由 schema 强制的输出消除了这类 bug,而一旦下游系统依赖它,这一点就至关重要。
- 提示式 JSON 在演示里管用,到了生产环境就出问题:故障只有在下游系统去解析它时才会暴露。
- 需要警惕的三种经典漂移:JSON 周围多出的散文、一个尾随逗号、一个缺失的必填字段。
结构化输出 vs. 工具使用
两种功能都会给模型一份 JSON Schema,所以它们看起来很像——人们常常选错。区别在于意图,而非机制:
| 结构化输出 | 工具使用 | |
|---|---|---|
| 你想要什么 | 最终答案,以固定的形态 | 让模型 调用某种能力(调用函数、获取数据、执行动作) |
| 谁来消费它 | 直接由你的代码消费 | 你的代码运行工具,再把结果喂回给模型 |
| 回合形态 | 一次响应,结束 | 一个循环:模型发问,你执行,模型继续 |
| 典型用途 | 抽取、分类、解析 | 智能体、实时查询、副作用 |
一个快速的经验法则:
如果 JSON 就是 交付物,使用结构化输出。如果 JSON 是模型在请求你的代码去做某件事,那就是工具使用。智能体常常两者都用:用工具来执行动作,用结构化输出来返回干净的最终结果。
提示
- 让 schema 收得紧——对固定选项使用枚举;标注必填字段。
- 描述字段——字段描述就像迷你提示词一样引导模型。
- 仍然在边界处校验——防御性解析是廉价的保险。
- 对于抽取类任务,结构化输出 + 清晰的 schema 每次都胜过自由格式。
- 把一份 JSON Schema 交给 API/SDK 并解析为类型化的对象——不要靠提示再碰运气。
- 提示要 JSON 可能漂移(多出的散文、尾随逗号、缺失字段);强制 schema 消除了这类 bug。
- 结构化输出 vs. 工具使用的区别在于意图:JSON 就是答案,还是 JSON 在请求一个动作。
- 收得紧的 schema、带描述的字段,以及边界处的校验,让抽取和分类变得可靠。
固化这些术语
1 / 5
检验自己
0/4下一步
- 工具使用 / 函数调用 — 工具同样使用 JSON schema
- 你的第一次 API 调用
- 可复用的提示词模板