可靠地强制指定输出格式
从提示中的口头要求,到API真正的JSON模式(JSON Schema)——三个层级,帮你强制固定输出格式。
最简单的层级:提示
最经典的做法是在提示中给出清晰的格式要求:“只以JSON格式回答,字段为name、alter、stadt”,再加一个示例输出。这种方式通常效果不错,但并不能保证百分之百——模型仍有可能在前面加一句话,或者漏掉某个字段。
更可靠的层级:API功能
现代大语言模型API提供了专门的机制,能在技术层面强制执行格式,而不只是建议。Claude为此提供了结构化输出(Structured Outputs),带JSON模式校验;OpenAI的同类功能同样叫作Structured Outputs。两者都能保证回答完全符合传入的模式(Schema)——不再需要事后修复损坏的JSON。
重要区别
提示中的要求是一种模式(Pattern)——一种大多数时候有效、但不保证有效的习惯做法。而像Structured Outputs这样的API功能,则是接口本身在技术层面的保证。对于不那么关键的格式化需求,提示往往就够用;对于需要在代码中进一步处理结果的场景,使用API功能更值得。
校验作为第三重保障
即便有了格式保证,校验仍然是有意义的:对照你的模式检查回答,并在出错时构建一个重试循环。这能覆盖纯格式问题之外的情况——例如语法上有效的JSON,但字段的值在内容上毫无意义。
示例
提示层级(无保证):“只以有效的JSON格式回答,格式为 {\"stadt\": string, \"land\": string},不要有多余文字。” API层级(有保证,伪代码):output_config={\"format\": {\"type\": \"json_schema\", \"schema\": {\"type\": \"object\", \"properties\": {\"stadt\": {\"type\": \"string\"}, \"land\": {\"type\": \"string\"}}, \"required\": [\"stadt\", \"land\"]}}} —— 每一次回答都保证符合这个模式(Schema)。
🛠️ 练习——自己动手试试
分别只用提示和用模式参数(Schema-Parameter)来强制固定JSON格式,并比较两者的可靠性。
- 通过提示要求模型给出带固定字段的JSON回答,测试5次请求。
- 检查这5次回答是否都是有效、完整、不含多余文字的JSON。
- 使用你选择的一个Structured Outputs功能,配合真正的JSON模式重复同样的请求。
- 比较两种方式的出错率。
✅ 自查清单
- ☐ 在纯提示方案中,是否至少有一次回答包含多余文字或缺少字段?
- ☐ 使用模式(Schema)方案的5次结果,是否真的百分之百符合要求?
小测验
提示中的格式要求与像Structured Outputs这样的API功能,两者的核心区别是什么?
来源
- Claude官方文档:结构化输出(Structured Outputs) ↗ platform.claude.com
- OpenAI官方文档:结构化输出(Structured Outputs) ↗ developers.openai.com