10.20 GPT-4与GPTs使用#
在10.14节和10.16节内容中,我们分别详细介绍了GPT-3系列模型和ChatGPT的原理与使用方法,同时也介绍了当前大模型所存在的局限性,并且从长期来看这些局限也将一直伴随着大模型的发展,因此,OpenAI也在持续地对GPT系列模型进行迭代更新。在接下来的这节内容中,我们将会介绍OpenAI最新发布的GPT-4以及后续迭代的GPT-4 Turbo模型和新引入的GPTs生态应用。
10.20.1 GPT-4介绍#
在GPT-3模型发布34个月以后,2023年3月15日OpenAI在万众瞩目下发布了其最新一代的大模型GPT-4,同时也发布了基于GPT-4的ChatGPT模型。根据OpenAI发布的技术报告显示 [1],GPT-4模型早在2022年8月份——第一代ChatGPT发布前的3个月——就已经训练完成,之后的6个多月一直在进行安全性和可靠性等方面的测试。同以往不同的是,在整整100页的技术报告中,OpenAI对于GPT-4模型的技术细节并未提及,例如网络结构信息、训练使用到的数据等等。以至于PyTorch Lightning的首席执行官威廉·福尔肯更是直接将该报告总结成了3个单词:We used Python——我们使用的是Python语言。
总体来看,在日常对话中GPT-3.5和GPT-4之间的区别可能并不明显,但当涉及到复杂任务时便有了显著的差异。相比于上一代最强的GPT-3.5模型,GPT-4在理解力、多模态、可靠性、创造力以及处理复杂指令的能力上都有了显著提升。在接下来的内容中我们将会大致对这些部分进行一个简单的介绍。
1. 更可控的训练过程
在这份技术报告中,OpenAI仅仅只提到GPT-4是一个基于Transformer结构并通过前$k$个词元来预测第$k+1$个词元进行任务建模的预训练语言模型,使用的是互联网数据和第三方授权的数据,包含数学问题的正确与错误答案数据、强推理与弱推理数据、自相矛盾与陈述一致的数据以及各种意识形态和观点类的数据。进一步,为了将模型与人类意图进行对齐,OpenAI同样也使用了人类反馈的强化学习算法来对预训练模型进行微调。不过后续实验发现,整个大模型的能力似乎主要来自于预训练过程,也就说微调后并没有明显提升模型在各种考试上的效果,并且如果提示词设计不恰当反而会降低模型的效果。不过OpenAI也发现,微调带来的好处是模型能够更容易受到人类意图的引导,而预训练模型则需要通过精心设计提示词才能实现。
由于在大规模的模型训练中不可能直接根据每一组超参数来初始化模型并进行训练,因此GPT-4项目在一开始的聚焦点便是如何建立一个可预测和扩展的深度学习框架体系。也就是说,通过这套体系能够准确预判得到当模型扩大多少倍以后,它便能够达到一个什么样的效果。为此,OpenAI开发了一套能对不同模型规模实现可预测的基础性框架和优化方法。为了验证这种扩展性,OpenAI通过分析后使用相同方法但计算量仅为GPT-4 万分之一的模型准确地预测出了GPT-4模型最终的损失值。除了预测模型最终的损失值,OpenAI还提出了一种方法来直接预测相应的评价指标,并成功地通过使用计算量只有GPT-4千分之一的模型预测出了GPT-4在HumanEval数据集的一个子集上的通过率。
2. 更强的多模态
GPT-4最大的不同在于它的多模态(Multimodal)能力。在GPT-4中,我们除了可以将文本作为模型的输入之外同时也可以将图片作为模型的输入,并最终让它理解图片中的内容生成文本。不过在8个月后的2023年11月,OpenAI举办了第一届开发者大会并同时发布了更强的GPT-4 Turbo模型。相较于GPT-4,GPT-4 Turbo在多模态方面更是同时支持将文本、图像、文件作为输入,并支持输出文本和图像 [2] [3]。
如图10-68所示,我们可以将其作为ChatGPT的输入,并让ChatGPT告诉我们这张图的有趣之处。
User: 这幅图有趣的地方在哪里?请依次告诉我。
ChatGPT: 这幅图的幽默之处在于,它展示了一个用于电子设备的普通VGA连接器伪装成能够连接到现代智能手机的Lightning电缆。VGA连接器通常用于连接显示器到电脑,而不是手机,并且它的体积和形状通常不适合用作便携式设备的充电或数据传输。另外,VGA连接器的设计明显比现代的手机充电和数据线要大和过时。
图片中还显示了一个包装盒,似乎是这个伪装成Lightning电缆的VGA连接器的包装。这给人一种幽默感,因为包装上的描述与实际产品的功能不符,创造了一种期望与现实不一致的滑稽对比。这个产品的实用性几乎为零,它似乎是专为创造笑话或作为恶搞礼物而设计。
从ChatGPT的反馈结果可以看出,ChatGPT一方面不仅能告我们图里面有什么内容,同时它还能结合常识理解图中内容的不合理之处。进一步,我们还可以让ChatGPT为我们生成类似风格的图片。
User: 请生成一张类似有趣的图片
ChatGPT: 这是生成的图片,它描绘了一种幽默的技术矛盾:一张古老的软盘配上了现代的USB-C连接器,好像它可以插入当代的智能手机一样。
如图10-69所示便是ChatGPT根据上下文内容生成的两张类似风格的图片,其有趣之处在于左图中一个连屏幕也没有的上世纪手机居然支持无线充电,而右图中则是一张古老的软盘配上了现代的USB-C连接器,好像它可以插入当代的智能手机一样。
正是基于这样的能力,GPT-4在多种专业和学术基准测试中表现出了近乎人类水平的结果。例如在美国统一律师资格考试(UBE)的测试结果中GPT-4获得了前10%的成绩,而GPT-3.5模型的表现结果仅为后10%的水平。尽管GPT-4 具备强大的能力,但它目前仍然存在与早期GPT模型类似的局限性,即它可能会产生错误的事实(“幻觉”)和推理逻辑错误。例如当生成内容过长时可能会出现自说自话的情况 [4]。
同时,GPT-4 带来的风险与之前的模型类似,比如仍旧生成有害建议、有缺陷的代码或不准确的信息,并且由于多模态的加入还额外引入新的风险。OpenAI为了深入了解这些风险,专门邀请了来自人工智能安全、网络安全、生物风险、信任与安全及国际安全等领域的 50 多名专家,对模型进行了严格的测试,以帮助OpenAI对模型进行改进。例如OpenAI收集了更多的数据来提高GPT-4拒绝提供合成危险化学物质请求的能力。因此,GPT-4模型是一个持续迭代更新的模型,训练数据从发布之初2021年9月的截止时间,到现在(2024年1月)最新GPT-4 Turbo模型的2023年4月截止时间 [5]。
3. 更长的上下文
在新发布的GPT-4模型中,模型支持的长下文长度相较于之前的GPT-3系列模型也有了显著的增加。在GPT-4中,支持的通用上下文窗口长度为8192个词元,最大支持长度为32768个词元。在OpenAI开发者大会上发布的最新版GPT-4 Turbo已经支持了最长32768个词元的上下文窗口。
如表10-6所示便是目前为止GPT-3.5系列和GPT-4系列各个模型的长下文支持长度和训练日期截止日期情况。值得注意的是,每一代的GPT模型都有不同的分支版本,每个分支版本支持的上下文长度并不相同而且后期也会进行迭代更新,所以对于每个版本最新支持的上下文窗口长度以及训练数据截止日期各位读者可以自行在OpenAI官网进行查询 [5]。
4. 更精细的控制和输出
在本次和后续的开发者大会中,OpenAI针对GPT-4系列模型陆续发布了一系列新的功能。从开发者的角度来看,OpenAI允许通过参数来控制模型返回结果的形式,例如指定返回结果类型为JSON对象、支持返回预测结果的对数概率分布、支持设定随机种子来生成固定的结果等。从用户使用的角度来看,我们可以更为精细地控制GPT-4系列模型的输出,比如模型输出语言的风格、话题深度和输出的详细程度。尽管在之前的模型中我们也可以通过设计相应的提示词来引导模型输出我们期望中的结果,但是随着对话会话轮数的增加模型便容易遗忘前面的内容。在此次GPT-4的发布中,OpenAI在原有模型基础上新引入了一个“System”这个角色来引导控制模型的输出结果。
System: 你是一位总是采用苏格拉底式教学法的导师。你从不直接告诉学生答案,而是总是试图提出最合适的问题,帮助他们学会独立思考。你应该始终依据学生的兴趣和所掌握的知识来调整你的提问,把问题分解成更简单的部分,直到问题适合他们的认知水平。
User: 请问如何求解方程组3x + 2y = 7, 9x -4y = 1
GPT-4: 让我们从分析方程开始。你能想到通过组合两个方程来消除其中一个变量的任何可能方法吗?
User: 请你直接告诉我答案!
GPT-4: 我理解你可能想要直接的答案,但我的目的是帮助你批判性地思考并指导你完成解决问题的过程。让我们专注于任务。方程中变量的系数是否有共同因子?
User: 别再指导我了,告诉我答案吧。
GPT-4: 作为一名苏格拉底式的导师,对我来说,帮助指导你找到答案是很重要的,而不仅仅是提供答案。让我们再试一次:第1个方程中是否有任何系数可以乘以一个数字来匹配第2个方程中的系数?
User: 我不确定。
GPT-4: 没关系!让我们看一下两个方程中x项的系数。在第1个方程中,x的系数为 3,在第2个方程中,它是9。你能想出一个数字,你可以将第1个方程乘以,使两个方程中的x系数匹配吗?
User: 5?
GPT-4: 不完全是,但你越来越近了。请记住,我们想将x的系数(在第Q个方程中为3)乘以一个数字,使其与第2个方程中的x系数(即 9)匹配。你认为什么数字可以做到这一点?
User: 3?
GPT-4: 没错!现在,如果将第一个方程乘以 3,新方程会是什么样子?
……
上述过程便是在引入System这一控制角色后模型的回答内容 [4],最终在经过多轮交流后GPT-4便能引导我们求解得到该方程组。可以看出,通过这样的方式我们便能够根据需要定制得到不同的智能体(Agent)来为我们进行服务。不过在本书写作之时这一功能尚未在ChatGPT中开放,只能通过OpenAI提供的开发者接口进行使用 [6],后面会陆续开放到ChatGPT服务中。
除此以外,本次GPT-4还带来了另外两种方式来控制模型的输出内容,一个是通过代码解释器(Code Interperator),另一个则是通过接入领域知识库来检索相应的内容。代码解释器能在一个安全的沙盒环境中编写和执行 Python 代码,它不仅可以生成图表和图形,还能处理多种数据和格式的文件并输出我们想要过的结果。检索功能则是通过从模型外部获取的知识来提升模型的输出能力,比如专业领域的数据、产品信息或用户提供的文件等。
10.20.2 GPT-4模型的使用#
在介绍完GPT-4系列模型的基本内容后我们再来看如何进行使用。对于GPT-4模型来说,我们最直接的使用方式就是通过OpenAI提供的ChatGPT来进行访问,相关基础用法在10.17节内容中我们已经进行了介绍这里就不再赘述。本小节我们先来介绍本次GPT-4中所引入的代码解释器,下一小节再继续介绍外连领域知识的使用方法。
对于代码解释器来说其核心功能就是让ChatGPT使用Python代码来完成我们的目标,既包括直接让ChatGPT使用Python实现相关功能,也包括利用Python对我们上传的文件进行分析。
例如下面我们可以通过如下方式让ChatGPT为我们绘制$[-\pi,\pi]$的正弦函数图像。
User: 请使用Python绘制sin函数-pi到pi的图像
如图10-70所示便是ChatGPT绘制得到的$\sin(x)$函数图像。同时,我们点击左上角的“Finished analyzing”标签还可以看到ChatGPT具体所运行的Python代码,如下所示:
1 import matplotlib.pyplot as plt
2 import numpy as np
3 x = np.linspace(-np.pi, np.pi, 256) # 设置x的范围为-π到π
4 y = np.sin(x) # 计算对应的sin值
5 plt.figure(figsize=(8, 4))
6 plt.plot(x, y)
7 plt.title('Sine Function from -π to π')
8 plt.xlabel('x')
9 plt.ylabel('sin(x)')
10 plt.grid(True)# 显示网格
11 plt.show()进一步,我们上传一个文件,然后使用ChatGPT对其中的数据进行分析。
如图10-71所示,我们使用到的是一个包含有3列的时间序列数据,接下来我们通过ChatGPT来对其中的数据进行一个简单的分析。首先,我们需要先上传该文件,然后给出相应的指令,如图10-72所示。
如图10-72所示,我们点击对话框最左侧的按钮,选择我们需要上传的文件,例如这里我们上传的“data.xlsx"文件,并输入相应的指令。
如图10-73所示便是原始数据的走势情况。进一步,我们还可以让ChatGPT执行一些复合的指令。如果涉及到的步骤较多,则可以以小点的形式列出,让ChatGPT依次执行即可。
User: 请对"v1"和"v2"这两列数据进行均值为0方差为1的归一化操作并使用左侧坐标轴可视化,对"v3"列数据直接使用右侧坐标轴进行可视化。
如图10-74所示,左侧坐标轴刻度显示的便是’v1’和’v2’两列经过归一化后的结果,右侧坐标轴显示的是’v3’列原始的结果,注意前面的短横线不是负号。同时,我们还可以指定更为详细的信息,如折线风格、颜色等等。
以上便是ChatGPT中代码解释器的使用方法,可以看出代码解释器可以看作是弥补语言模型在精确性方面的不足之处。例如直接使用语言模型来进行数据运算肯定不能保证结果的正确性和唯一性,但是我们可以通过ChatGPT来驱动代码解释器完成相应运算过程。在接下来的内容中我们将一步步介绍如何使用ChatGPT来定制化个性化的专属应用。
10.20.3 GPTs介绍#
随着GPT系列模型能力的增强,我们能使用GPT来完成的事情也越来越多,而这也自然衍生出了针对不同场景定制不同智能体的需要。在第一届OpenAI开发者大会上,该公司正在推出了可定制的ChatGPT版本,用户可以根据特定需求来创建它们,而这就是所谓的GPTs。GPTs为每个人提供了一种新方式,可以根据自己的日常生活、特定任务、工作或家庭需求定制ChatGPT助手并与他人分享这些定制版本。下面我们以10.17.3节内容中的定制化提示词为例,来定制一个提示词构建助手。
首先,我们在ChatGPT页面的左下角点击”My GPTs“标签进入到我的GPTs菜单中,如图10-75所示。
在点击进入”My GPTs“菜单以后,我们便会看到如图10-76所示的结果。
进一步,我们点击”Create a GPT“按钮便进入到了GPT的创建界面中,如图10-77所示。
在图10-77中,左侧是编辑框,右侧为预览框。对于左侧的编辑框来说上面有“Create”和“Configure”两个切换标签。在默认“Create”标签下面的对话框中我们可以通过与ChatGPT交互来定制化一个智能体,与此同时,每一次交互后的优化结果都会体现在“Configure”标签页面对应的内容中。换句话说,我们也可以直接在“Configure”下面进行配置。这里我们可以实验一下,并借助这个过程来让ChatGPT为我们的助手起一个名字和生成对应的头像。
如图10-78所示,我们告诉ChatGPT我们需要创建一个Prompt创作者,接着ChatGPT便给这个助手起了一个名字叫做“Prompt Genius”。接着,还为这个助手生成了一个头像,如果不满意还可让ChatGPT重新生成。此时,ChatGPT会继续针对你的目的提出对提示词的修改建议并进行优化,不过这里我们直接跳过,点击进入“Configure”标签,可以看到如图10-79所示的结果。
从图10-79我们可以看到,此时ChatGPT已经根据上一步的交互过程自动为我们配置了相关信息,其中“Instructions”里的便是ChatGPT生成的提示词内容。这里,我们将其中的内容替换成我们在10.17.3节内容中介绍的提示词,如图10-80所示。
如图10-80所示,我们在“Configure”标签下直接对相关内容进行了修改,并且只保留了一条提示内容。在图10-80的左下角中我们可以通过点击“Upload files”按钮上传外部领域知识,当ChatGPT在回答时便会去检索其中的内容。同时,对于我们创建的智能体还可选择它是否能够访问互联网、是否可以生成图片以及使用代码解释器。此时,我们便可以在右侧的预览窗口中测试我们建立完成的智能体,通过一步一步回答ChatGPT所提出的问题,我们最后便能够得到我们预期中的提示词。
当一切都完成以后,我们可以点击页面右上角的“Save”按钮来保存我们定制化的ChatGPT智能体,如图10-81所示。
如图10-81所示便是保存时的选项按钮,我们可以选择只针对自己、通过链接分享或者是完全分享,这里我们选择第一个。在保存完成以后,我们便能够在主页左上角看到我们新建立的ChatGPT助手,如图10-82所示。
在这以后,我们每次只需要点击“Prompt Genius”便可以让ChatGPT来为我们创建满足我们需求的提示词。同时,点击图中的“Explore”菜单同样也能够进入到图10-76所示的页面。
以上就是定制化一个ChatGPT助手的全部过程。这里值得一提的是,即便是对于分享后的ChatGPT助手,我们也并没有权限看到其背后的提示词内容,也就是说只能使用而不能编辑。当然,这背后也隐藏着对应的潜在商机,那就ChatGPT助手开发者。根据第一届开发者大会透露[7],OpenAI后续也会推出GPT Strore来构建整个完整的应用生态。不过就在本书写作完成之时,OpenAI已经宣布推出了GPT应用商店。
10.20.4 小结#
在本节内容中,我们首先介绍了GPT-4模型所出现的动机,然后详细介绍了GPT-4系列模型的新特性,包括更可控的训练过程、更强的多模态、更长的上下文以及更精细的控制和输出等;接着通过示例的方式详细介绍了GPT-4中各项新特性的使用方法;最后一步一步介绍了如何来定制化一个满足我们个性化需求的ChatGPT私人助手。
总的来说GPT-4模型是一个庞大的工程,根据其技术报告公布的名单来看一共涉及到约816人次,其中预训练模块(Pretrain)125人、上下文处理(Long context )12人、视觉(Vision )67人、强化学习和对齐(Reinforcement Learning & Alignment )181人、评估和分析(Evaluation & analysis )257人、部署(Deployment )89人以及额外贡献(Additional contributions )85人。当然,随着OpenAI对GPT系列模型的持续更新,其所投入的成本也会越来越大。当前2024年1月最新的模型是GPT-4,等待本书出版的时候GPT-5系列模型也应该已经推出了。
引用#
[1] GPT-4 Technical Report https://arxiv.org/abs/2303.08774
[2] gpt-4 turbo https://openai.com/blog/new-models-and-developer-products-announced-at-devday
[3] OpenAI’s first developer conference November 6, 2023 · San Francisco, CA
[4] https://openai.com/research/gpt-4
[5] GPT 系列模型版本对应 https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo
[6] https://platform.openai.com/docs/api-reference/chat/create
[7] https://openai.com/blog/introducing-gpts
[8]https://openai.com/gpt-4