输出格式约束是什么
输出格式约束是把「结果长什么样」写进提示:字段名、类型、顺序、空值表示、单位、日期格式、是否允许额外字段、是否允许解释文字。不写这些约定时,模型会自行选择样式,第一次可能是 {"temp": 36.5},第二次变成 "温度 36.5 摄氏度",程序侧就得为每种写法都写一遍容错。格式要求写清后,输出可以直接进入下游程序,改动时也有明确的契约。
提示词约束与平台校验的分工
提示词负责表达期望,平台负责强制。支持结构化输出的接口(JSON Schema、函数调用参数)会在解码阶段限制可用取值,比纯提示更严格;只有提示词约束时,模型仍可能加解释、加围栏、漏字段。所以工程上的正确做法是两层一起用:提示里写清字段约定,程序侧用 schema 校验兜底,校验失败走重试或兜底路径。
必须写清的六件事
| 字段名与类型 | 英文小写下划线;数字与字符串分开,不要混用 |
|---|---|
| 字段顺序 | 下游按顺序解析时顺序即契约,明确写出 |
| 空值约定 | 想清楚「没有此项」与「没抽到」是 null 还是省略 |
| 单位与时区 | 温度摄氏度、金额币种、日期时区都要落到字段说明里 |
| 额外字段 | 说明是否允许模型自行增添字段,通常写「不要新增字段」 |
| 输出边界 | 是否包围栏、是否允许解释、是否允许多段输出 |
典型使用场景
- 票据与工单抽取:字段直接入库,字段名与类型必须固定
- 系统间数据对接:上游模型输出要当接口返回值用,需要稳定的结构
- 批处理流水线:同一模板每天跑上千次,字段漂移会放大成批量失败
- 需要人工复核的输出:固定字段让复核人按列核对,而不是读整段文字
- 多语言场景:字段名用英文,值用目标语言,避免解析依赖中文键名
字段级约定示例
字段级约定示例
用 JSON 输出,字段固定为:
{
"device": "设备名(字符串,必填)",
"temp_c": 0, # 摄氏度,保留 1 位小数,无值填 null
"updated": "YYYY-MM-DD", # 日期,时区 UTC+8
"tags": [] # 字符串数组,可为空数组,不要填 null
}
要求:仅输出 JSON 本体,不加解释、不加 markdown 代码围栏。输出逐项检查
| 检查项 | 正常写法 | 常见异常 |
|---|---|---|
| 字段名 | device、temp_c 一律小写下划线 | Device、tempC 混用,跨批次不一致 |
| 数字 | 36.5 不带单位、不带千分位 | 1,234.50 元 让后续计算报错 |
| 布尔 | true / false 小写 | 是/否、True、Y 混用 |
| 空值 | 按约定填 null 或空数组 | 用 无、N/A、- 等多种写法 |
| 外层包装 | 仅 JSON 本体 | 被代码围栏或解释句包住,解析前要剥离 |
支持结构化输出或函数调用的平台,优先用 Schema 声明字段而不是在提示里描述,参数的类型与必填由平台校验,错误率更低。
字段名与含义的对应关系要落在文档里:换人维护提示时,只看提示很难知道 temp_c 的口径是摄氏度还是华氏度。