JSON 结构化输出问答合集:用法、模板和坑
刚接触 JSON 结构化输出的人,问得最多的往往是下面这几个问题。
Q1:结构化输出到底是什么?
结构化输出是让 AI 按照固定的字段和格式返回结果,例如 JSON、表格或固定标题的清单。这样结果可以直接粘贴进表格、导入系统,或被程序自动处理。
Q2:为什么它有效?和自由文本回答有什么不同?
自由文本每次结构都不同,后续整理很费时;预先定义字段相当于给 AI 一张要填的表,结果更一致,也更容易检查遗漏。自由文本可读性好但格式不稳定;结构化输出牺牲一点流畅度,换来可以直接复制、导入和自动处理的稳定结果。
Q3:哪些场景最值得用?
最典型的是两类:一是需要把结果导入表格或数据库;二是写程序调用 AI 接口,需要稳定解析结果。以运维工程师为例,处理“把发布流水线的构建时间缩短约三分之一”这类工作时就很适合尝试。
Q4:具体怎么开始?
建议按这三步起步:
- 先确定你需要哪些字段,以及每个字段的类型和含义。
- 把字段定义写进提示词,最好直接给出一个空的 JSON 或表头。
- 说明缺失值怎么处理,例如找不到就填 null 或“未提及”
熟练之后再养成一个习惯:如果通过接口调用,优先使用平台提供的结构化输出或 JSON 模式等功能,并在程序里做格式校验。
Q5:有没有现成的模板?
有,下面这个可以直接复制,按需替换方括号内容:
你是数据抽取程序,必须严格遵守以下 JSON Schema:
{"type":"object","required":["items"],
"properties":{"items":{"type":"array","items":{"type":"object",
"required":["name","category","amount"],
"properties":{"name":{"type":"string"},
"category":{"type":"string","enum":["办公","差旅","餐饮","其他"]},
"amount":{"type":"number"}}}}}}
规则:金额统一为数字(不带单位);无法判断类别时用“其他”;输出前自检是否为合法 JSON。
Q6:表格和 JSON 怎么选?
给人看选表格,给程序处理选 JSON;两者都要时,可以先输出 JSON,再让 AI 转成表格。
Q7:AI 偶尔输出不合法的 JSON 怎么办?
在程序中加格式校验,失败时把错误信息连同原输出发回给 AI 修正,并保留人工兜底。
Q8:一次能处理多少条数据?
取决于工具的上下文长度和稳定性,建议每次几条到十几条,批量更大时用脚本分批调用。
举个例子
举个虚构的例子:一位 HR 收到 30 份简历,需要统计候选人的工作年限、技能和期望城市。逐份阅读要花一下午;定义好字段后让 AI 逐份输出 JSON,再合并成表格,HR 只需抽查几份核对,把时间用在面试判断上。
补充:最容易踩的坑和用好的诀窍
- 要求 JSON 却允许附带解释。改进:写明“只输出 JSON”,程序解析时才不会因为多余文字报错。
- 一次提取的字段过多。改进:字段太多时拆成两次,先提取核心字段,再补充次要字段。
- 表格形式适合人看,JSON 适合程序处理,按用途选择。
- 批量处理时保持字段顺序不变,方便后续合并。
延伸学习
结构化输出和少样本提示、调用大模型 API 关系密切。建议先把结构化输出在一个真实任务里用熟,再逐个尝试相关技能,而不是一次学很多。