要让大模型(如GPT、LLaMA、Claude等)稳定输出合法的JSON格式,需要结合 理论分析、Prompt工程、解码约束 和 后处理验证 等多方面技术。
1. Prompt工程
通过提供输入-输出对(Few-Shot),模型能更快学习任务分布。
实践示例:
请严格按以下JSON格式回答,确保可直接被`json.loads()`解析:
示例1:
输入: "列出两种编程语言"
输出: {"languages": ["Python", "JavaScript"]}
示例2:
输入: "告诉我巴黎的人口和面积"
输出: {"city": "Paris", "population": 2148000, "area_km2": 105.4}
现在请回答:
输入: "提供三个颜色名称和其16进制代码"
输出:
2. 解码约束
约束解码的主要思想还是是在 LLM 生成每个 token 的过程中,根据提前定义号的规则对候选 token 进行过滤,只保留符合token。
假设我们构造一个 JSON 格式的数据,它包含 “name” 和 “age” 这两个属性,其中 “age” 属性的值必须为数字类型。
{ “name”: “Shuai”, “age”: 88 }
其约束规则可以这样描述:
以 { 符号起始
接着是 "name":
然后是一个被双引号包裹的字符串
紧接着是 ,
之后是 "age":
再跟着一个数字
最后以 } 符号结束
优势就是可以保证正确性,缺点就是效率太低了
3. 后处理校验
可以使用一些外部工具来校验生产的是不是对的,如果不对就让LLM再次生成


