提示词明确要求JSON
这是最直接的方法,直接在提示词中提要求,类似这样:
请描述这张图片,输出用JSON格式
就可以让LLM输出JSON格式
当然,这种方法不是100%让结果是JSON,有时候结果会是Markdown,有时候干脆就不是结构化的文本。
提示词中给出JSON样例
给出JSON样例的好处,是可以让LLM在生成的JSON中使用指定的key name。
例如,提示这么写:
描述这张图片,输出为JSON格式,例如{“desc”: “somebody is dancing”, “character_count”: 3}
产生的结果真的就包含desc和character_count两个key。
这是一个业内公认的方法,但是,在实操过程中,我发现对llama 3.2 vision使用这招产生非JSON输出的概率反而更大了,可能因为『描述图片内容』这个任务不容易让LLM上道输出指定的JSON。
指定结果开头字符为{
前面的方法,有可能结果虽然包含JSON,但是在JSON之前还要加一段废话,为了强制LLM只输出JSON,还有一招,就是在提示词中要求LLM输出以{开头(当然JSON也可以是以[开头),这样更大概率输出的就只有JSON。
上面这些都是在提示词上做文章,除此之外,在模型参数上也可以做一些trick。
调整模型参数
对于OpenAI的API,可以通过调整 logit_bias 来操纵输出token的概率,比如下面的配置,可以增加 {
和 }
字符的输出概率,减少 '''
的输出概率,从而增大输出为JSON的概率。
1 | logit_bias: { |
llama 3.2没有对等的logits_bias参数,但是我试了一下调整 temperature 和 top_p 参数,降低temperature和top_p的值,可以让模型少点『创意思维』,老老实实规规矩矩输出,似乎(我只敢说似乎)能够让模型更大概率遵守提示词以JSON格式输出。