先定输出结构再写提示:Schema First 实用教程
模型写得流畅却缺字段,往往是因为你先写「请写得专业」,却没先写「必须有哪些键」。Schema First:先冻结输出结构,再补语气与示例。
适用场景
生成周报 JSON、客服工单字段、RAG 引用列表、或任何要对进表格/数据库的结果。
流程概览
- 列出字段名、类型、是否必填、枚举值
- 给 1 个合法示例与 1 个非法示例(可选)
- 再写任务背景与语气
- 要求模型先输出结构,再填内容;或只输出结构实例
- 用校验脚本/人工表头核对
提示词模板
【输出 Schema】(严格遵守,不要增删字段)
- title: string, 必填
- items: array of {name: string, status: enum[open,done]}
- risks: string[], 可空
- needs_human: boolean
【任务】根据下列材料填充 Schema。
【材料】:
【规则】只输出一个 JSON 对象;未知字段填 null 并在 risks 说明;不要 Markdown 围栏外的解释。
与少样本的关系
少样本应示范「结构如何填」,而不是示范文笔。选例方法见少样本示例怎么选。
技巧与坑
- 枚举写全;模型爱发明近义状态名。
- 长散文字段单独放,避免破坏整表解析。
- 若平台支持 JSON mode / tool calling,优先用平台能力,提示词作补充。
对照:结构后置 vs 结构先行
结构后置常见结果:漂亮段落但缺 needs_human。结构先行常见结果:字段齐、语气稍后用第二轮润色。
小结
先锁 Schema,再谈文采。对接系统的提示词,结构就是合约。
第二轮再润色
先产出合法 JSON,再用另一轮提示把某个字符串字段润色成对外文案。两轮分离,可避免「为了通顺而改字段名」。
校验失败怎么办
自动重试时应固定 Schema,只允许模型改字段值;不要在重试时顺便「优化」字段结构,否则对接方崩溃。
与工具调用的关系
若平台支持 function calling,把 Schema 定义成工具参数,通常比纯文本 JSON 更稳。提示词仍需写清「何时调用」与「缺字段怎么办」。本地开源模型若无可靠 JSON 模式,用更严的少样本与校验重试;校验失败不要把坏 JSON 写入生产库。
团队协作时,把 Schema 放进仓库的 schemas/ 目录,提示词只引用版本号。这样改字段会经过评审,而不是某次聊天里随手加键。对接方(表格、数据库、工作流)以 Schema 为合约,生成端与校验端共用同一份定义。若必须兼容旧版,显式写 schema_version 字段,便于迁移。润色轮不得改版本与键名。