让它用固定的形式回答
结构化输出指让 LLM 用 JSON (按固定写法排列字段名和值的数据形式) 这类固定的形式给出回答。放进表格、用程序读取、交给其他系统这类用法,回答的形式如果每次不一样就会出问题。例如从咨询的文字中取出类别、是否紧急、商品名这 3 个字段的工作。
只是在指令中请它“用 JSON 回答”,形式也容易一致。不过按照 Anthropic 的说明,仅凭这一点,仍可能出现写法错误、缺少必填字段、类型不符。
指定形式的机制
很多 API 都有指定回答形式的功能。把字段的名称、类型 (数字还是文字)、可选值的列表作为 schema (形式的定义) 交给模型。模型就会被限制为只写符合该形式的回答。
OpenAI 表示,这个功能让模型给出必定遵循所给 schema 的回答,防止缺少必填字段或出现不在规定选项中的值。Anthropic 和 Google 也有目的相同的功能。可用于指定形式的 schema 的写法,各服务都有限制。
形式正确也要确认内容
形式守住了,内容也不一定正确。Google 的指南建议,即使输出是语法正确的 JSON,也一定要用自己的程序确认值。它还要求为形式对了但意思不对的回答做好准备。确认方法如下。
- 检查值是否在规定的范围或列表中
- 用已知正确答案的例子,核对取出的值
- 形式或值不对时,重新发送一次
把字段名写短、去掉不需要的字段,输出的 token 也会减少。