OpenAI新模型gpt4o20240806完全解读结构化输出价格降一半
去年的DevDay活动中,OpenAI推出了JSON模式,它成为了开发者利用GPT系列模型构建 可靠 应用程序的重要工具。尽管JSON模式在提升模型输出有效JSON方面起到了关键作用,但它并没有 确保输出结果能够完全符合特定的模式要求 。8月6日,OpenAI推出了一个新版本的 GPT-4o 模型: gpt-4o-2024-08-06 ,该模型可通过API实现可靠的结构化输出,这一功能专门设计来确保模型输出能够精确地符合开发者所提供的JSON Schema。
从非结构化输入生成结构化数据是当今AI应用程序的核心使用案例之一 。开发者使用OpenAI API构建AI助手,这些助手能够通过函数调用获取数据和回答问题,提取输入数据的结构化信息,并构建多步骤的代理工作流程,允许LLM执行操作。开发者一直在通过 开源工具 、 提示 和 重复尝试请求 来解决LLM模型在这方面的限制,以确保模型输出与他们系统所需的格式匹配。现在,通过引入 结构化输出 技术,这一挑战得到了有效解决。该技术通过设定严格的参数匹配规则,引导OpenAI模型的输出严格遵循开发者所设定的模式,并且通过进一步训练,提高了模型对复杂模式的理解和适应能力。
在对复杂JSON模式的遵循性评估中,新模型 gpt-4o-2024-08-06 在结构化输出方面取得了完美的100%得分。相比之下, gpt-4-0613 的得分不到40%。

得益于 结构化输出 技术, gpt-4o-2024-08-06 在评估中达到了100%的可靠性,完美地匹配了输出模式。
如何使用结构化输出技术
OpenAI API引入了两种形式的结构化输出功能,以增强模型输出的准确性和一致性:
函数调用 :通过在函数定义中设置 strict: true ,可以启用通过工具实现的结构化输出。此功能适用于所有支持工具的模型,包括 gpt-4-0613 、 gpt-3.5-turbo-0613 及之后的所有版本。启用结构化输出后,模型的输出将严格匹配所提供的工具定义。
响应格式参数的新选项 :开发者现在可以通过 json_schema 这个新的参数选项,在 response_format 中提供JSON Schema。当模型不需要调用工具,而是需要以结构化的方式响应用户时,这个功能特别有用。它适用于OpenAI最新发布的GPT-4o模型,包括最新发布的 gpt-4o-2024-08-06 和之前的 gpt-4o-mini-2024-07-18 。当 response_format 参数中包含了 strict: true ,模型的输出将严格匹配所提供的模式。
这项新特性意味着开发者可以更加精确地控制模型的输出,确保它们符合预期的格式和结构,从而在构建应用程序时实现更高的灵活性和可靠性。
结构化输出技术应用案例
动态生成用户界面 :基于用户的意图,开发人员可以利用结构化输出来创建代码或用户界面生成应用程序,可以根据用户输入生成不同的用户界面。
分离最终答案与支持推理/附加评论 :为了提高回答的最终质量,给模型一个单独的字段来表达思考过程可能是有益的。这样可以帮助模型更清晰地组织和呈现其推理过程,从而提供更全面、更有说服力的答案。
从非结构化数据中提取结构化数据 :例如,指导模型从未结构化的会议记录中提取待办事项、截止日期和任务分配等信息。这种能力使得从大量文本中快速提取关键信息成为可能,极大地提高了数据处理的效率。
结构化输出实现原理
为了提升模型输出与JSON Schema匹配的可靠性,OpenAI采取了双重策略。首先是训练了最新的模型 gpt-4o-2024-08-06 ,使其能够理解复杂的模式,并更有效地生成与之匹配的输出。然而,由于 模型行为本质上是非确定性的 ,即便该模型在性能上有了显著提升(在我们的基准测试中达到了93%),它仍然无法满足开发者构建稳定应用程序所需的可靠性。因此,OpenAI还采用了一种 基于工程的确定性方法 ,通过限制模型的输出来实现100%的可靠性。
受限解码技术
OpenAI结构化输出的实现基于一种称为 受限采样 或 受限解码 的技术。通常,当模型被采样以产生输出时,它们是完全没有限制的,可以从词汇表中选择任何标记作为下一个输出。这种灵活性是模型可能出错的原因;例如,它们通常可以在任何时候自由地采样一个花括号标记,即使这不会生成有效的JSON。为了强制输出有效,OpenAI限制了模型只能选择根据所提供模式有效的标记,而不是所有可用的标记。
在实践中实施这种限制可能具有挑战性,因为一个模型输出过程中有效的标记会有所不同。假设我们有以下模式:
{ "type": "object", "properties": { "value": { "type": "number" } }, "required": ["value"], "additionalProperties": false}
在输出的初始阶段,模型可能会选择如左花括号“{”、引号“{"”或换行符“{n”等作为有效标记。但是,一旦模型选择了“{“val”这样的序列,左花括号就不再适用。为了应对这种变化,OpenAI实施了一种动态的 受限解码 技术,这种技术能够在每个标记生成之后,即时决定哪些新的标记是合适的,而不是在生成过程开始之前就限定好。
这个过程的核心是将JSON模式转换成一种特殊的规则集,称为 上下文无关文法 (Context-Free Grammar, CFG)。这种文法定义了哪些结构在JSON这种“语言”中是有效的,类似于英语句子中必须有动词这样的规则。例如,在JSON中,一个多余的尾随逗号就是不合法的。
对于每个JSON模式,OpenAI都会构建一个对应的CFG,并在首次使用新模式时进行预处理,以便在模型生成输出时快速引用。这就是为什么当你第一次使用一个新的JSON模式时,可能会遇到一些延迟,因为他们需要将这个模式转换成一个易于处理的形式。
在模型生成输出的过程中,每当生成一个新标记后,推理引擎会立即根据已经生成的标记序列和CFG中的规则,来确定下一个合法的标记是什么。然后,系统会使用这个合法标记的列表来指导下一个标记的选择,确保不会选中任何无效的标记,从而将出错的可能性降到最低。由于模式已经被预处理并缓存,这个过程可以非常高效地完成,几乎不会引入额外的延迟。
一些限制
使用结构化输出时需注意以下几点:
支持的JSON Schema子集 :结构化输出只支持JSON Schema的一个子集,这有助于确保最佳性能。
初次响应的延迟 :使用新模式的首次API响应可能会增加额外的延迟,但随后的响应将快速且无延迟惩罚。这是因为在首次请求时,需要按上述方式处理模式,并缓存这些结果以便后续快速重用。典型的模式在首次请求中处理时间少于10秒,但更复杂的模式可能需要长达一分钟。
模型拒绝不安全请求 :如果模型选择拒绝一个不安全的请求,它可能无法遵循模式。如果发生拒绝,返回的消息中将设置一个拒绝布尔值来表示这一点。
生成中断 :如果生成过程在完成前达到最大令牌数或其他停止条件,模型也可能无法遵循模式。
错误类型 :结构化输出不能防止所有类型的错误。例如,模型在JSON对象的值中可能仍然会出错(比如在数学方程式中计算步骤错误)。如果开发者发现错误,建议在系统指令中提供示例或将任务拆分为更简单的子任务。
并行函数调用不兼容 :结构化输出与并行函数调用不兼容。如果生成了并行函数调用,它可能与提供的模式不匹配。设置 parallel_tool_calls: false 可以禁用并行函数调用。
数据保留政策 :与结构化输出一起提供的JSON Schema不符合零数据保留(ZDR)资格。
新模型可用性及定价
结构化输出功能现已在API中普遍可用。
函数调用的结构化输出 :此功能适用于所有支持API中函数调用的模型,包括最新型号 gpt-4o 和 gpt-4o-mini ,以及 gpt-4-0613 和 gpt-3.5-turbo-0613 之后的各个版本,还有支持函数调用的任何微调模型。这一能力在聊天完成API、助手API和批量API中均可使用,并且与视觉输入兼容。
响应格式的结构化输出 :这一功能在 gpt-4o-mini 和 gpt-4o-2024-08-06 以及基于这些模型的任何微调版本上可用。同样,它也在聊天完成API、助手API和批量API中提供,并且与视觉输入兼容。
使用成本降低 :最新的 gpt-4o-2024-08-06 模型,与 gpt-4o-2024-05-13 相比,可以在输入上节省 50 %(每100万个输入令牌2.50美元)和在输出上节省 33 %(每100万个输出令牌10.00美元)。




共有 0 条评论