不少人觉得打开 JSON 模式后,DeepSeek 这类模型就变得不会说人话了。其实 JSON 模式限制的不是表达力,而是输出的顶层形状:它保证吐出来的内容能被当成合法 JSON 解析,至于字段里装什么、怎么描述,仍然有自然表达的空间。
JSON 模式到底锁住了什么
打开模式后,生成过程被约束在合法 JSON 的路径上:括号要配对、引号要成双、键值结构要完整。它锁的是外壳,内容不受限——字符串值里照样可以写一整段流畅的中文。误解来自把「结构化」误当成「机械」,外壳规整与内文生动可以共存。
自然语言藏在哪些位置
- 字符串值:摘要、理由、描述类字段里,句子照常写。
- 字段描述:给每个字段写一句人话说明,模型据此填充。
- 系统提示:模式之外的部分完全自由,照常用自然语言交任务。
字段描述怎么写才自然
字段描述写得越像给同事交代事情,填充质量越好。「summary:用两三句话概括用户诉求,保留数字」就比「summary:string」有效得多。在智谱清言里实测,描述写成人话之后字段填充的完整度明显变好;字段名本身保持英文短横线风格利于解析,语义则交给描述去传达。
| 位置 | 能放什么 | 写法要点 |
|---|---|---|
| 字符串值 | 摘要、理由、描述类字段 | 句子照常写,一整段流畅中文也行 |
| 字段描述 | 一句给人看的说明 | 「用两三句话概括用户诉求,保留数字」 |
| 系统提示 | 模式之外的全部交代 | 照常用自然语言交任务 |
| 默认值与约束说明 | 边界情况下的填法 | 「priority:不明确时填 normal」 |
开与不开的取舍
- 程序要直接消费输出:开,省掉清洗围栏的功夫。
- 输出给人看:不开,让模型自由选择更顺的表达。
- 混合场景:结构化字段加长文字段都塞进一个 JSON,开模式。
外壳锁住后解析端怎么接,见结构化输出和后处理解析怎么配合?;固定前缀的写法见是怎么写才能命中提示缓存的?关键步骤一次讲清;结构化输出的函数场景见函数调用场景的提示是怎么写的?;模式与推理深度的配合见思考预算和提示是怎么配合的?从原理到落地。
字段描述写成人话之外,还有一层自然表达藏在默认值与约束说明里。给字段配默认值描述,比如「priority:不明确时填 normal」,模型遇到边界情况就有了台阶;给枚举字段配一句「取值只能是以下三个之一」,合法路径被进一步收窄。长文本字段还可以在描述里给结构提示,比如「reason:先说结论,再给一条依据」,填出来的内容自带层次。调试模式输出时有个小技巧:先开模式跑一遍拿到合法外壳,再把同样的提示关掉模式对比文风,若关掉后明显更顺,可以把顺的部分翻译回字段描述里,让开模式的输出也带着那份自然。字段描述里避免双重否定,模型对「不能不」这类句式的遵循明显更弱;错误信息字段建议让它用一句自然中文描述问题,比状态码更利于排查。
JSON 模式取舍速查
- 要机读:开模式加字段描述写人话。
- 要人读:不开模式加结构要求写进提示。
- 两头都要:结构化外壳加长文字段。
模式锁外壳不锁灵魂,表达力照常在线。
调试字段填充质量时可以做描述消融:把某字段的描述删掉再跑,对比该字段填充质量的变化,就知道这段描述值多少分。值钱的多写两句,没用的删掉,描述越精,输出越稳。
聊聊JSON 模式的常见疑问
- 开了 JSON 模式还需要写格式声明吗?:需要,模式保证合法,声明保证字段和形状符合预期,两层各管一段。
- 字符串里的换行和引号会破坏结构吗?:模式开启时模型会做转义处理,一般无需担心。
- 所有模型都支持这个模式吗?:主流服务大多支持,具体行为以各家的接口文档为准。
最后收拢成一句:把模式当成安全网,别当成文风开关。


