程序员窃喜!卡了大模型脖子的Json输出,OpenAI终于做到了100%正确

news2024/9/25 21:20:47

OpenAI上次提到JSON模式的概念,还是在去年的DevDay上。那是ChatGPT第一次拥抱JSON模式。

图片

但这个功能可以说是饱受诟病。

经常遇到模型不遵循指令,不按照你想要的格式输出,即使在 prompt 中明确说了要按照指定格式(比如Json、XML)返回结果,但是它就是不听话。

因为大语言模型在处理结构化数据时比想象中要困难得多

很多人说,为什么非要纠结 JSON 格式的输出,我用的挺好的,啥 JSON 格式都没见过,这种要么就是用的不多,要么就不是做开发的!

要知道!对于开发者来说,模型的结构化输出结果是很重要的!比如你想要一些抽取好的关键信息,这时候怎么给你?肯定是结构化的字段信息,简洁明了。比如:

非结构化的结果:

小明今年18岁,是一名高三学生。他身高175cm,体重65kg。小明喜欢打篮球,每周都会和朋友一起打球。他的梦想是成为一名软件工程师。

结构化结果 (JSON格式):

{
  "name": "小明",
  "age": 18,
  "education": {
    "grade": "高三",
    "status": "在读"
  },
  "physicalAttributes": {
    "height": 175,
    "weight": 65
  },
  "hobbies": ["打篮球"],
  "frequency": "每周",
  "careerAspiration": "软件工程师"
}

今天,OpenAI就给它的GPT-4o模型翻了个新,升级到2024-08-06版本,并带来了一个全新升级后的功能:

在 API 中引入了结构化输出(Structured Outputs)

模型输出现在可靠地遵循开发人员提供的 JSON 模式。它可以实现输出JSON的100%准确率!

在此之前,开发者一直通过第三方开源工具,或者在 prompt 上面做功夫,让大模型遵循你的命令,再或者反复重试请求来绕过LLMs在结构化处理的缺陷,现在都不需要了。

图片

▲新模型 gpt-4o-2024-08-06 的结构化输出得分高达 100%。相比之下,gpt-4-0613 的得分不到 40%

具体怎么接入结构化能力呢,有两种办法:

一种是函数调用,在函数定义中设置 strict:true进行结构化输出;

图片

另一种是新增了一个response_format 的参数选项

图片

这是怎么做到的?

第一种方法比较传统,就是最经典的专项培训:对于特定的复杂的JSON架构进行针对性模型训练,Openai通过这种方法能把模型准确率提到93%。 相较于最开始带JSON模式的GPT-4的40%准确率,已经高出很多了。

尽管最新的模型gpt-4o-2024-08-06性能有所提高,但是模型本质上是非确定性的,无法保证JSON的稳定输出,所以采用了确定性的、基于工程的方法来约束模型的输出,以实现 100% 的可靠性。

但很明显,93%的准确率也就意味着7%的不可靠,对于开发人员来说,不是100%的准确就是不够用的,所以OpenAI又用了第二个方法。

而这第二种方法就有点神乎其神。OpenAI使用了约束解码(constrained decoding)技术。

默认情况下,大模型在进行token输出时,可以在词汇表中选择任意一个词汇,作为下一个输出token。而这种不可控性会让模型在输出一些固定格式的文本时犯格式错误。

图片

而在使用动态的约束解码技术后,大模型在下一个token输出时,便增加了一些约束,将模型限制在有效的token内,而不是所有token。

比如:输入“{"val”后,下一个生成的文本一定不会是“{”。

通过这种方式,大模型不仅可以实现JSON的格式正确,还可以实现合适schema结构的精确。现在OpenAI已经通过这种方式实现了100%的JSON输出准确率。

这个功能一经亮相,网友们都坐不住了:

图片

图片

但这个功能目前还有一些缺陷。因为需要额外增加Schema预处理的时间,新模型在请求新的JSON Schema时慢了一些。此外,要使用结构化输出还有一些限制:

目前结构化仅支持输出一部分JSON模式,包括String、Number、Boolean、Object、Array、Enum和anyOf。

同时,所有的字段或者函数参数必须是“required”。

图片

对象对嵌套深度和大小也有限制。一个架构总共最多可以有 100 个对象属性,最多有 5 个嵌套级别。

OpenAI还留了个底:结构化输出并不能防止所有类型的模型错误。 模型可能仍会在JSON对象的值中犯错误(比如在数学方程式中步骤出错),如果出现错误,需要使用者在指令提示词中提供示例,或者将任务拆分为更简单的子任务。

还有一个重中之重:安全 。结构化输出功能将遵守OpenAI现有的安全政策,并且仍会拒绝不安全的请求。甚至他们在API响应上设置了一个新的字符串值,让开发人员能以编程方式,检测模型是否拒绝生成。

图片

OpenAI还真是忘不了安全问题啊。

随着这个新功能的推出,OpenAI还宣布,模型在更新到GPT-4o-2024-08-06后,进行降价处理:

输入tokens降价一半,2.5美元(约合人民币17.96元)/百万个输入tokens;

输出tokens降价1/3,10美元(约合人民币71.84元)/百万个输出tokens。

但随着这个推文出现,评论区网友们也表达了对OpenAI挤牙膏式更新的不满:

一点点技术创新也能叫版本更新吗?

图片

实际上,这项功能发布的前一天,OpenAI才刚引起不小的轰动:联创John Schulman提桶跳槽Anthropic;总裁Greg Brockman享受他的超长假期;产品副总裁Peter Deng悄然离职;马斯克也恢复了对OpenAI的起诉,而Sam Altman在OpenAI中的地位甚至尚未稳固。

图片

也许OpenAI,真的需要制造一个大热门来解决这场宫斗闹剧了。

图片

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】字符/字符串转整数 常用的三个方法

前言: 做Oj题时,偶尔需要用到,久了不用,用到就得查一下,遂总结一篇用法,加深记忆。 目录 方法1:使用字符的ASCII值(字符) 方法2:使用Character.getNumeri…

【GCC】结合GPT4 延迟梯度学习1:公式推导及理论分析

大神的分析 本文主要借鉴。【TWCC 】基于gpt和python简化分析webrtc拥塞控制论文: Analysis and Design of the Google Congestion Contro for Web Real-time Communication (WebRTC)感觉应该学习好理论后再进行python 分析:【gcc】基于gpt和python的流程和延迟梯度分析另外:…

html+css+js前端作业qq音乐官网5个页面 带js

htmlcssjs前端作业qq音乐官网5个页面 带js 有轮播图,tab切换等多种效果 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编…

Flink 实时数仓(九)【DWS 层搭建(三)交易域汇总表创建】

前言 今天立秋,任务是完成 DWS 剩余的表,不知道今天能不能做完,欲速则不达,学不完就明天继续,尽量搞懂每一个需求; 1、交易域下单各窗口汇总表 任务:从 Kafka 订单明细主题读取数据&#xff0…

【Linux-WMware Tools安装失败“segmentation fault”解决方法】

VMware版本:17 Ubuntu版本: 22.04 安装常规办法,通过vmware安装Tool,安装显示报错:“segmentation fault”,查了下可能是tool和ubuntu版本不兼容导致的。解决办法:通过命令行逐次安装。 1、sudo apt insta…

PostgreSQL(二十五)PG_FDW的使用

目录 一、FDW的简介与特性 二、pg_fdw的部署与使用 1、编译postgres_fdw 2、添加postgres_fdw 3、创建FDW服务器 ​4、授权并创建用户映射 5、客户端创建FDW测试表 6、访问外部表 ​7、可能出现的问题 三、FDW的执行原理 1、PG-PG访问过程描述 2、PG-PG访问过程查看…

一部分优化算法

一、优化问题 1、优化目标 (1)优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标,后者则关注在给定有限数据量的情况下寻找合适的模型。 (2)优化算法的目标函数通常是基于训练数据集的损失函数&#x…

springboot 定义类导入爆红,@Autowried自动注入失败

springboot 定义类导入爆红,Autowried自动注入失败 根据提供的异常信息,分析如下: 异常起因:UnsatisfiedDependencyException 表示在创建名为 ‘a1001Service’ 的 bean 时存在依赖问题,具体是在字段 ‘a1001Mapper’ …

算法日记day 32(贪心之划分字母区间|合并区间|单调递增的数字|监控二叉树)

一、划分字母区间 题目: 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每…

nginx 405错误是什么意思

405错误:方法不被允许 当Web服务器收到一个它不支持的HTTP请求方法时,就会返回405错误。 原因 405错误通常是由于客户端发出了不兼容或不支持的HTTP请求方法。例如,客户端可能请求一个只能通过GET方法访问的资源,但使用了POST方…

C代码做底层及Matlab_SimuLink做应用层设计单片机程序

前言:SimuLink工具极其强大,但是能直接支持单片机自主开发的很少,造成这个问题的原因主要是我们使用的芯片底层多是C代码工程,芯片厂家也只提供C代码库,很少能提供SimuLink的支持库,即使提供也不是很不完善,如NXP的一些芯片提供的SimuLink库不含盖高级应用,再比如意法半…

视创云展:轻松构建出独一无二的元宇宙空间

视创云展作为一款前沿的元宇宙数字营销平台,集成了多项核心技术,旨在为用户提供低门槛、高效能的元宇宙体验与创作工具。其核心技术主要包括: 1、低门槛、模块化,3D场景创作工具 视创云展集成了海量的元宇宙场景模板,…

SpringBoot中如何自定义自己的过滤器Filter(简易版)

本文不再说SpringMVC中的写法,毕竟现在项目都是SpringBoot,我们还是尽量使用SpringBoot的写法,首先了解一下Filter。 说白了,就是在请求到达服务器之前进行拦截,一般使用场景是拦截登录进行权限校验,当然一…

跟李沐学AI:GoogLeNet含并行连结的网络

Inception块 GoogleNet中的基本卷积块,从4个路径从不同层面抽取信息,然后再输出通道维合并。 数据输入后共有四条路径:第一个路径为1x1的卷积层;第二个路径先用1x1的卷积层修改通道数,在输入到3x3的卷积层&#xff0c…

腾讯云AI代码助手助力软件开发体验分享

引言 现在,AI工具在软件开发中变得越来越重要,它们能显著提升效率和代码质量。本文就来分享一下我用腾讯云AI代码助手的经历,看看它是怎么在开发中帮了大忙的。 开发环境介绍 这次的项目用的是JavaScript,开发环境是Windows 10…

用于胰腺癌自动化综述报告和可切除性分类的大型语言模型| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Large Language Models for Automated Synoptic Reports and Resectability Categorization in Pancreatic Cancer 用于胰腺癌自动化综述报告和可切除性分类的大型语言模型 Background 背景 Structured radiology reports for pancreatic ductal adenocarcinom…

condition字符串匹配问题

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs使用dialplan配置文件执行业务流程,condition条件变量的配置是必然会使用的,这里记录一次配置过程中的错误示范。 环境 CentOS 7.9 freeswitch 1.10.7 问题描述 dialplan配置如下&#xf…

如何做到项目真实性优化?保姆级写简历指南第五弹!

大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致措施了很多面试机会,实在是…

pdf拆分需要怎么做?6个软件帮助你快速拆分pdf文件

pdf拆分需要怎么做?6个软件帮助你快速拆分pdf文件 拆分PDF文件可以让你更方便地处理和管理文档内容,无论是提取特定页面还是将文件分成更小的部分。以下是六款帮助你快速拆分PDF文件的软件,每款软件都有其独特的功能和优势,供你选…

4章4节:临床数据科学中如何用R来进行缺失值的处理

在临床科研中,由于失访、无应答或记录不清等各种原因,经常会遇到数据缺失的问题。本文将深入探讨医学科研中数据缺失的成因、分类、影响以及应对方法,结合R语言的实际应用,为医学研究人员提供全面的解决方案。 一、认识缺失数据 其实,很多医学的纵向研究因获取数据资料时…