输出格式控制三件套:指令、示例与结构
一句话定义
稳定的输出格式要靠三件套协同——明确的格式指令、格式正确的示例、便于解析的结构设计——只靠其中任何一件都会漂移。
为什么重要
"格式不稳"是提示功能下线的第一大原因:下游程序解析不了,人工就得兜底。格式控制看似琐碎,实则是最容易标准化、最容易测试的环节——把格式约束做扎实,是提示从"演示"走向"产品"的第一步,也为 结构化输出:JSON/YAML 与 Schema 约束 的 schema 级约束与 校验-重试回路:让输出自修复 的自动校验铺路。
前置知识
- 零样本、少样本与示例工程:示例是格式教学的第一通道;
- 分词与上下文:模型如何"读"你的话:模型消费的是 token 模式,格式就是被模仿的模式。
直观类比
像给外包团队的交付模板:只发一句"做个 PPT"(仅指令)各人发挥;给一份样例 PPT(示例)但口头要求又不同(不一致)就乱套;最稳的是样例 + 明确要求 + 交付时文件命名规范(结构 + 锚点)三管齐下。
图示
指令(系统提示深处) ──┐
示例(格式样例) ──┼──→ 三者一致 + 结尾锚点 → 稳定格式
结构(定界符/模板) ──┤
结尾锚点(用户消息末)──┘
↑ 任一环与示例冲突,输出就跟谁走 —— 保持一致性是唯一原则核心概念
- 格式指令:对输出形态的明确文字约束("只输出 JSON""每条一行,以 - 开头")。
- 格式示例:一个格式完全正确的样例输出——比指令更有效,但必须与指令一致。
- 结构设计:选择天然不易漂移的输出结构(定界符、字段模板、分段标记),并给每个字段命名与类型。
- 结尾锚点:在用户消息末尾重复一次格式要求——紧贴生成位置,利用近因效应(注意力衰减与"迷失在中间"(Lost in the Middle))。
- 禁语清单:明确禁止"好的,以下是……"之类的前缀废话。
原理与机制
格式漂移的三个来源与对策:
- 指令与示例不一致:模型通常跟随示例 → 以示例为准修正指令,或以指令为准重写示例,绝不允许两者打架;
- 格式要求距离生成点太远:写在系统提示深处的要求会被稀释 → 用"结尾锚点"在用户消息末尾重复关键格式约束;
- 结构对解析不友好:自然语言段落中嵌数据 → 改用定界符包裹(如三个反引号或自定义标记)让"数据区"物理隔离,正则可切。
另一个机制性技巧:给输出一个开头。让响应以固定字符开头(如直接以 { 开始),程序侧配合 stop 序列或前缀校验,能把大量格式漂移拦在门外。
公式或模型
本节不适用——格式控制是约定与校验问题,无数学模型;格式合格率用 评估集构建:黄金样本与失败分类 评估集统计。
实例或案例
案例:提取服务的格式稳定化。
before(只有指令):
请从简历中提取姓名、电话、邮箱、工作年限,输出给我。after(三件套):
[系统提示内] 输出契约:仅输出如下模板,不要任何解释文字,
缺失字段填 null。
姓名:{string}
电话:{string 或 null}
邮箱:{string 或 null}
工作年限:{整数,单位年}
[少样本示例]
简历:张三,13800000000,zhang@example.com,2019 年入职。
输出:
姓名:张三
电话:13800000000
邮箱:zhang@example.com
工作年限:5
[用户消息结尾锚点]
简历:{简历文本}
再次强调:仅按模板输出,缺字段填 null,无解释。操作步骤:① 设计模板(每个字段有类型与缺省值);② 写一个格式完全正确的示例;③ 用户消息末尾放锚点;④ 程序侧做格式校验(正则/schema),失败触发 校验-重试回路:让输出自修复 的重试回路;⑤ 把格式合格率纳入回归(回归测试:把提示当代码守护)。
排错清单:
- 症状:输出前总带"好的,以下是……" → 加禁语清单 + 要求"以 { 直接开始",程序侧剥前缀兜底;
- 症状:偶发格式漂移 → 先查示例与指令是否一致;再查锚点是否被中间内容隔远;
- 症状:字段值类型不稳(年限有时"5 年"有时 5)→ 模板中写明类型与示例值,校验器拒收自动重试。
常见误区
- 以为写了指令就够:指令是三者中最弱的一环,无示例的格式约束漂移率显著更高;
- 模板复杂化:一次要求五种输出形态(摘要 + 表格 + JSON + 备注 + 评分)互相竞争,拆成多次调用各自稳定;
- 把格式问题归咎模型:多数漂移可以由三件套的一致性修复,先修提示再怀疑模型。
自测题
- 指令说"输出 JSON",示例却是纯文本,模型大概率跟谁?
答:跟示例——格式教学靠示例,所以两者必须一致,不一致时先修示例。
- 为什么要在用户消息末尾重复格式要求?
答:利用近因效应,关键约束紧贴生成位置,遵循率更高。
- 输出带固定开头有什么工程价值?
答:便于程序侧前缀校验与 stop 序列配合,把格式漂移拦在解析之前。
与其他知识点的关系
结构化输出:JSON/YAML 与 Schema 约束 把三件套升级为 schema 级约束;校验-重试回路:让输出自修复 提供格式失败的自动恢复;回归测试:把提示当代码守护 把格式合格率纳入回归集;示例放置位置参考 信息放置策略:指令、知识、数据的排布。
延伸阅读
- 综述:The Prompt Report(Schulhoff et al., 2024)——输出约束类技法的分类与对比。
来源
- The Prompt Report: A Systematic Survey of Prompting Techniques (Schulhoff et al.
- 2024)