什么是结构化输出?让 AI 按字段交卷,少交一篇顺口的废话
让 AI 比较方案,它常交回一篇很顺的短文,月费和限制条件却找不着。这篇讲清结构化输出是什么,怎样规定字段让缺失变成空格,以及格式正确为什么仍不等于内容为真。
你让 AI 比较两家服务,它回了一篇很顺的短文:功能全面、价格合理、适合大多数人。你真正想找的三样东西——月费、能不能按月取消、有没有写明数据保留多久——在文章里都没出现,或者被揉进一句“总体来说很灵活”。字是够了,表是空的。
结构化输出要解决的就是这个。你先规定交卷的格子,它只能往格子里填。填不出的格子保持空白,不能用一段好听的话把空白糊上。
一段话为什么总像已经答完
普通聊天时,模型在续写一段通顺的文字。通顺本身就会制造“答完了”的感觉:句子有开头、有转折、有收束,读者的注意力被语气带走。缺的事实只要不单独占一格,就很容易混进“一般来说”。
这也是幻觉特别会藏的地方。编一个数字放进流畅的句子里,比留下一个空单元格更不像出错。你要的不是更会写的模型,而是一个不愿意用句子填洞的格式。
散文奖励完整。表格惩罚空白。把任务换成表格,空着就会显眼。
结构化输出就是先画好格子
结构化输出的意思是:回答必须符合你事先定好的形状。形状可以是一张表的列名,也可以是一组字段,比如“名称、金额、日期、来源原句、不确定的地方”。程序或你自己都能检查:该有的列在不在,不该猜的地方是不是写成了“未知”。
开发者用的产品里,这常被叫作 JSON 模式或按结构输出。模型被要求交回一份机器能读的数据,缺字段会被判不合格,而不是被当成一篇还行的文章。你不是开发者也可以用同一思想:在对话里把列名写死,并规定空值怎么写。
它和工具调用相邻,但不是同一件事。工具调用是模型举手,让旁边的程序去搜索或计算,再把结果拿回来。结构化输出是模型交卷时必须按格子填。一次回答可以两件事都发生:先调用计算器,再把得数填进“金额”那一列。只规定格式,不会让它真的去算。数字仍然要核对。
| 一段话 | 按字段交卷 | |
|---|---|---|
| 缺信息时 | 容易写成“通常可以”“比较灵活” | 该格写“材料未写明” |
| 你怎么检查 | 通读,靠感觉找漏洞 | 按列看,空格和原句对得上吗 |
| 适合什么 | 还没想清问题、需要来回讨论 | 要比较、要摘录、要交给下一步使用 |
| 仍然会错的地方 | 语气很确定地编 | 格式全对,格子里仍是编的 |
不用写程序,也能把格子定死
你可以直接这样说:
请把下面的材料整理成表格,列只能是:项目、材料中的原句、我该做的下一步、不确定之处。每一行必须有原句。材料没写的,填“未写明”,不要用常识补。不要在表格外面再写一段总结。
最后一句很要紧。模型喜欢在表格后面再补一段“综合来看”,把你刚禁掉的猜测又写回来。只要格子,就明确说不要表格外的散文。
列不要贪多。四列能用,就不要八列。列越多,它越会为了填满而编。一个好格子只问你下一步真的会用到的东西:谁、多少钱、哪一天、依据是哪一句、哪里还不知道。

三种常见任务,格子可以怎么画
- 比较:方案、月费、能否取消、数据保留、材料原句。没有原句的单元格写“未写明”;
- 摘录:日期、金额、责任人、条件、原句。条件包括“仅当、除外、截至”;
- 行动:下一步、谁来做、何时之前、做完交什么。缺时间就空着,不要写成“尽快”。
比较时最容易被“总体更合适”带跑。你可以把结论列改成“在哪一个字段上不同”,禁止它写“推荐你选哪一个”。选择是你的事。它的事是把差异放进能对账的格子。
材料很长时,还要记得中段更容易被漏。结构化输出不会自动读匀长文。格子规定的是交卷形状,不是阅读质量。长材料先切片,每次只让它填这一节的表,再把几张表合起来。一次把三十页塞进去要一张总表,中段的例外仍可能整行消失。
一张表怎么从“像答案”变成能核对
假设材料只有三句:甲方案月费 30 元,按月扣;乙方案写了“年付更划算”,没写月费;两边都没写数据保留多久。你要的表不该长成一篇推荐。
| 项目 | 材料原句 | 下一步 | 不确定 |
|---|---|---|---|
| 甲的月费 | 月费 30 元,按月扣 | 核对这句是否仍在最新报价单 | 未写明能否中途取消 |
| 乙的月费 | 未写明 | 向对方要月费,而不是年付口号 | 未写明 |
| 数据保留 | 未写明 | 先不要填任何天数 | 材料未写 |
坏表长这样:乙的月费被写成“大约 25 元”,数据保留被写成“通常 30 天”,下面再加一句“综合建议选乙”。这三个数和这句建议都不是材料里的。格子的用处,就是让你能一眼删掉它们。
你还可以规定允许填写的词。比如“下一步”只准用:核对原句、向对方提问、先不做。模型一旦写出第四种,比如“建议购买”,你就知道它越过了格子。允许的词越少,它越难用一个新句子把决定偷偷做完。
格式全对,内容仍可能是编的
这是结构化输出最容易给人的错觉:既然是表格、既然字段都在,它就比一段话更真。不是。模型可以按你的列名,把编出来的月费、日期和“原句”填得整整齐齐。原句那一列如果在原文里搜不到,这一行就作废,不管其他列写得多像。
所以检查顺序是固定的:
- 该有的列在不在,有没有表格外面的散文;
- “未写明”是不是被改成了具体数字或日期;
- 原句能不能在材料里找到,旁边的限制词还在不在;
- 金额和日期再对一次原文,不靠它的转述。
四步里任何一步失败,就不要把这张表交到下一步。下一步包括发给同事、填进自己的预算、拿去和对方确认。表是草稿的形状,不是已经核对过的事实。

什么时候先别用格子
问题还没想清时,硬要表格会把探索变成填空。你还不知道该比较哪几项,就让它先列出“要做这个决定,缺哪些信息”,不要立刻生成一张假完整的对比表。讨论阶段用短句子来回问;要交给别人或交给自己执行时,再收成格子。
另外,不要为了填表把不该贴的东西贴进去:别人的身份证件、未公开的报价、完整病历。格子越清楚,这些内容越容易被原样留在对话里。能改写成就事的字段,就不要贴原件。
字段名称也要写成你真的会核对的话。“优势”“体验”“风险等级”这种列,模型最容易填形容词。改成“月费数字”“取消方式的原句”“材料没写的项目”。列名里如果已经包含判断,它就会交判断;列名里只有事实,它才比较容易把判断留空。同一张表里不要混进“推荐”列。推荐列几乎总会被填上,而且填的人不是你。你若需要自己的选择,把选择写在表外,并写明它依据的是哪一行。表内只留能核对的格子。核对不了的列,宁可不设。设了就会被填满,填满之后你还要花时间把它们删掉。不如一开始就不要那一列。少一列,就少一次被编造填满的机会。
小结
- 结构化输出是先规定字段,让缺失变成看得见的空格,而不是一段顺口的总结;
- 它和工具调用不同:一个管交卷形状,一个管有没有去外部查或算;
- 普通人用固定列名即可,并写明没依据就填“未写明”,不要表格外的散文;
- 格式正确不等于内容为真,原句搜不到的那一行就作废;
- 长材料先切片再填表。问题还没想清时,先别逼它交一张完整的表。
你要的经常不是一篇更像答案的文章,而是一张不敢把空白填满的表。空白留在那里,你才知道下一步该去问谁,而不是跟着一段流畅的话往下走。若一张表你无法在两分钟内指出哪一格是空的、哪一格有原句,这张表对你就还太长。删列,直到你能逐格核对为止。
本文为「读懂 AI」原创,说明结构化输出的用法和边界。不同产品对 JSON、表格和字段校验的支持不同。涉及金额、日期、合同和隐私时,请回到原始材料核对,不要把填好的表当成已经审过的事实。