【新智元导读】程序员福音!OpenAI新推出的模型API全部支持结构化输出,JSONSchema匹配率高达100%,成本还立减一半。
还在绞尽脑汁想一堆提示词,为一顿操作后五花八门的输出结果而头疼?
OpenAI终于听到了群众的呼声,为广大开发者送上渴望已久的第一大功能。
OpenAI今日宣布新功能上线,ChatGPTAPI现已支持JSON结构化输出。
JSON(JavaScriptObjectNotation)是文件和数据交换格式的行业标准,因为它既易于人类读取又易于机器解析。
然而,LLM常常与JSON对着干,经常会产生幻觉,要不生成仅部分遵循指令的响应,要不就生成一堆「天书」,根本无法完全解析。
这就需要开发人员使用多种开源工具、尝试不同的提示或重复请求等来生成理想的输出结果,耗时耗力。
结构化输出功能于今天发布,以上棘手的难题迎刃而解,确保模型生成的输出与JSON中规定的schema相匹配。
一直以来,结构化输出功能是开发人员呼声最高的头号功能,奥特曼在推文中也表示,该版本是应广大用户的要求发布的。
OpenAI发布的新功能确实击中了许多开发者的心,他们一致认为「Thisisabigdeal」。
纷纷留言表示赞叹,直呼「Excellent!」。
几家欢喜几家愁,OpenAI的这次更新,又让人担心会吞噬初创公司。
然而,对于更多的普通用户来说,他们更关心的问题是GPT-5到底什么时候发布,至于JSONSchema,「那是什么?」
毕竟,没有GPT-5的消息,OpenAI今年秋季的DevDay,可能与去年相比,将会显得安静了许多。
轻松确保模式一致性
有了结构化输出,只需要定义一个JSONSchema,AI就会不再「任性」,乖乖按照指令要求输出数据。
并且,新功能不仅仅让AI变得更加听话,还能大大提高输出内容的可靠性。
在对复杂的JSONschema的跟踪评估中,带有结构化输出的新模型gpt-4o-2024-08-06获得了100%的满分。相比之下,gpt-4-0613的得分不到40%。
实际上,JSONSchema功能就是OpenAI在去年的DevDay上推出的。
现在,OpenAI在API中扩展了这项功能,确保模型生成的输出与开发人员提供的JSONSchema完全匹配。
从非结构化输入生成结构化数据是当今应用中人工智能的核心用例之一。
开发人员使用OpenAIAPI构建强大的助手,能够通过函数调用获取数据和回答问题,提取结构化数据以进行数据输入,并构建多步骤的智能体工作流(multi-stepagenticworkflows),从而允许LLM采取行动。
技术原理
OpenAI采用了一种双管齐下的方法来提高模型输出与JSONSchema的匹配度。
最新的gpt-4o-2024-08-06模型经过训练,可以更好地理解复杂的Schema并生成与之匹配的输出。
尽管模型性能已显著提升,在基准测试中达到了93%的准确性,但固有不确定性仍然存在。
为了确保开发者构建应用的稳定性,OpenAI提供了一种更高准确度的方法来约束模型的输出,从而实现100%的可靠性。
约束解码
OpenAI采用了一种称为约束采样或约束解码的技术,默认情况下,模型生成输出时完全不受约束,可能从词汇表中选择任何token作为下一个输出。
这种灵活性可能导致错误,例如,在生成有效JSON时随意插入无效字符。
为了避免此类错误,OpenAI使用动态约束解码的方法,确保生成的输出token始终符合提供的schema。
为了实现这一点,OpenAI将提供的JSONSchema转换为上下文无关文法(CFG)。
对于每个JSONSchema,OpenAI计算出一个代表该模式的语法,并在采样期间高效地访问预处理的组件。
这种方法不仅使生成的输出更准确,还减少了不必要的延迟。首次请求新模式可能会有额外的处理时间,但随后的请求通过缓存机制实现快速响应。
备选方案
除了CFG方法,其他方法通常使用有限状态机(FSM)或正则表达式来进行约束解码。
然而,这些方法在动态更新有效token时能力有限。特别是对于复杂的嵌套或递归数据结构,FSM通常难以处理。
OpenAI的CFG方法在表达复杂schema时表现出色。例如,支持递归模式的JSONschema在OpenAIAPI上已得到实现,但无法通过FSM方法表达。
输入成本节省一半
支持函数调用的所有模型均可实现结构化输出,包括最新的GPT-4o和GPT-4o-mini模型,以及微调模型。
此功能可在ChatCompletionsAPI、AssistantsAPI和BatchAPI上使用,并兼容视觉输入。
与gpt-4o-2024-05-13版本相比,gpt-4o-2024-08-06版本在成本上也更具优势,开发者可以在输入端节省50%的成本(2.50美元/1Moken),在输出端节省33%的成本(10.00美元/1Mtoken)。
如何使用结构化输出
在API中可以使用两种形式引入结构化输出:
函数调用
通过在函数定义中设置strict:true,可以实现通过工具的结构化输出。
此功能适用于支持工具的所有型号,包括所有型号gpt-4-0613和gpt-3.5-turbo-0613及更高版本。
启用结构化输出后,模型输出将与提供的工具定义匹配。
示例请求:
POST/v1/chat/completions{/"model/":/"gpt-4o-2024-08-06/",/"messages/":[{/"role/":/"system/",/"content/":/"Youareahelpfulassistant.ThecurrentdateisAugust6,2024.Youhelpusersqueryforthedatatheyarelookingforbycallingthequeryfunction./
未经允许不得转载:头条资讯网_今日热点_娱乐才是你关心的时事 » 精准0误差,输入价格打骨折!OpenAI官宣API支持结构化输出,JSON准确率100%