GPT4微软 GPT-4 测试报告GPT4 的编程能力

Posted youcans_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPT4微软 GPT-4 测试报告GPT4 的编程能力相关的知识,希望对你有一定的参考价值。

欢迎关注【youcans的GPT学习笔记】原创作品,火热更新中
微软 GPT-4 测试报告(1)总体介绍
微软 GPT-4 测试报告(2)多模态与跨学科能力
微软 GPT-4 测试报告(3)GPT4 的编程能力

【GPT4】微软 GPT-4 测试报告(3)GPT4 的编程能力


微软研究院最新发布的论文 「 人工智能的火花:GPT-4 的早期实验 」 ,公布了对 GPT-4 进行的全面测试,结论是:GPT-4 可以被视为 通用人工智能(AGI)的早期版本。

本文介绍第三部分:GPT4 的编程能力。前两部分参见:

微软 GPT-4 测试报告(1)总体介绍
微软 GPT-4 测试报告(2)多模态与跨学科

3. 代码生成(Coding)

在本节中,我们展示了 GPT-4 能够以非常高的水平编程,无论是根据指令编写代码还是理解现有代码。

  • GPT-4 可以处理广泛的编程任务,从编程挑战到现实世界的应用,从低级汇编到高级框架,从简单的数据结构到复杂的程序,如游戏。

  • GPT-4 还可以对代码执行进行推理,模拟指令的效果,并用自然语言解释结果。

  • GPT-4 甚至可以执行伪代码,这需要解释在任何编程语言中都无效的非正式和模糊的表达。

根据目前的情况,我们认为 GPT-4 在编写只依赖于现有公共库的特定程序方面具有很高的熟练度,这与普通软件工程师的能力相仿。

更重要的是,它可以同时为工程师和非熟练用户赋能,因为它使编写、编辑和理解程序变得容易。

我们也承认,GPT-4 在编码方面还不完美,因为它有时会产生语法无效或语义不正确的代码,特别是对于更长或更复杂的程序。GPT-4 有时也无法理解或遵循指令,或产生与预期功能或风格不匹配的代码。在认识到这一点后,我们还指出,GPT-4 能够通过与人类的提示或编译/运行程序时的错误提示来改进其代码 (例如,3.2节中迭代地细化绘图,和 5.1节中的例子)。

重要声明:如引言中所述,我们的实验是在 GPT-4 的早期版本上运行的。在 GPT-4 的最终版本上,总体趋势保持不变,但所有定量结果都会有所不同。我们在这里提供的数字仅供参考,详细结果参见 OpenAI 的技术报告。


3.1 从指令到代码(From instructions to code)


3.1.1 编程的挑战(Coding challenges)

衡量编码能力的一种常见方法是提出需要实现特定功能或算法的编码挑战。

我们首先在HumanEval 上对 GPT-4 进行基准测试,该数据集由 164 个编码问题组成,测试了编程逻辑和熟练程度的各个方面。如表1 所示,GPT-4 的表现优于其他 LLMs,包括 text-davincit-003 (ChatGPT的基础模型) 和其他专门在code、code-davinci-002 和 CODEGEN-16B [NPH+22]上训练的模型。

ModelGPT-4text-davinci-003Codex(code-davinci-002)CODEGEN-16B
Accuracy82%65%39%30%

虽然与之前的模型相比,GPT-4 的准确性有了很大的提高,但这可能是因为 GPT-4 在预训练期间看到并记忆了部分(或全部)人类评估。

为了考虑到这种可能性,我们还在LeetCode上对其进行了评估,这是一个很受欢迎的软件工程面试平台,在这个平台上不断发布和更新新的问题。我们在介绍中使用了图1.5 中的 LeetCode,GPT-4 通过了各大科技公司模拟面试的所有阶段。

我们构建了一个测试基准,包含 2022年10月8日之后发布的 100个 LeetCode 问题,这是在 GPT-4 的预训练期之后新出的问题。如图3.1中的示例所示,我们将问题说明粘贴到提示符中,让 GPT-4 编写一个 python 函数,并使用官方的 LeetCode online judge 来检查正确性。在表2中展示了结果,我们根据 LeetCode 竞赛结果将 GPT-4 与其他模型以及人类的表现进行了比较(所有问题都失败的用户不包括在内)。我们报告了pass@1和pass@5准确率,分别衡量了模型在第一次或前五次尝试中是否产生了正确的解决方案。GPT-4 的表现明显优于其他模型,并与人类的表现相媲美(我们在附录C.1中测量)。

下面是 GPT-4 使用动态规划解决 LeetCode 问题的例子。由于全面的注释,GPT-4 的解决方案也具有更好的可读性。

class Solution(object):
	def numberOfPaths(self, grid, k):
	"""
	:type grid: List[List[int]]
	:type k: int
	:rtype: int
	"""
    
	# Define MOD as 10**9 + 7
	MOD = 10**9 + 7
	# Get the dimensions of the grid
	m = len(grid)
	n = len(grid[0])
	# Initialize a 3D dp array with all zeros
	# dp[i][j][value] represents the number of paths where the sum of the elements on the path has a remainder of value when divided by k
	dp = [[[0] * k for _ in range(n)] for _ in range(m)]
	# Base case: the first cell has only one path and its value is grid[0][0] % k
	dp[0][0][grid[0][0] % k] = 1
	# Loop through the grid
	for i in range(m):
		for j in range(n):
			# Skip the first cell
			if i == 0 and j == 0:
				continue
		# Loop through all possible remainders
		for value in range(k):
			# The number of paths to the current cell with the current remainder is equal to the sum of:
			# - The number of paths to the top cell with the previous remainder
			# - The number of paths to the left cell with the previous remainder
			# The previous remainder is equal to the current remainder minus the current value, plus k if it is negative
			prev = (value - grid[i][j]) % k
			if i > 0:
				dp[i][j][value] += dp[i - 1][j][prev]
			if j > 0:
				dp[i][j][value] += dp[i][j - 1][prev]
			# Take the modulo to avoid overflow
			dp[i][j][value] %= MOD
	# Return the number of paths to the bottom right cell with a remainder of 0
	return dp[m - 1][n - 1][0]

3.1.2 真实的编程场景(Real world scenarios

编程挑战可以评估算法和数据结构的技能。然而,它们往往无法捕捉到现实世界编程任务的全部复杂性和多样性,这需要专业的领域知识、创造力,以及对多个组件和库的集成,以及更改现有代码的能力。

为了评估 GPT-4 在真实环境下的编程能力,我们设计了端到端的真实的编程挑战,这些挑战与数据可视化、LATEX编程、前端开发和深度学习相关,每一项都需要不同的专业技能。

对于每一个任务,我们都要求 GPT-4 用合适的语言和框架编写代码编写。在少数情况下,我们还会在代码编写完后更改涉及规范,并要求 GPT-4 进行更新。

数据可视化

在图3.2中,我们要求 GPT-4 和 ChatGPT 从表2的 LATEX 代码中提取数据,并根据与用户的对话在 Python 中生成一个图。之后,我们要求这两个模型对生成的图执行各种操作。虽然两个模型都正确地提取了数据(这不是一个容易的任务,因为必须从多列中推断出),但ChatGPT始终没能产生符合要求的绘图。相比之下,GPT-4 会恰当地响应所有用户请求,将数据处理为正确的格式,并调整可视化。在附录C.2中,我们包含了另一个GPT-4可视化 IMDb数据集的例子。

如图所示,GPT-4 将LATEX表(即表2)中的数据可视化。GPT-4还生成了这个图的格式。我们询问了模型如何在LATEX中绘制箭头连接图形,GPT-4用我们在这里采用的布局和箭头生成了一个工作的 Tikz 片段。


前端/游戏开发

在图3.3中,我们要求 GPT-4 用javascripthtml中写一个3D游戏,使用非常高级的规范。

GPT-4以零样本的方式生成一个符合所有要求的工作游戏。在3D游戏中,GPT-4甚至能够解读“防御者化身正在试图阻挡敌人”的含义:防御者代码具有逻辑,因此它将自己定位在玩家和敌人之间。相比之下,ChatGPT的回应则是“我是一个AI语言模型,我可以为你提供如何用JavaScript在HTML中创建3D游戏的指导,但我自己不会写代码或创建游戏。用JavaScript在HTML中创建3D游戏,需要大量的编程知识和经验。这不是一项可以快速或轻松完成的任务。它需要大量的时间和精力来开发所有必要的功能,如3D图形、物理、用户输入和AI……”。我们在附录C中给出了更多关于前端(图形用户界面)和游戏开发的例子。

如图3.3 所示, GPT-4 用 JavaScript开发了一个复杂的3D HTML游戏。


深度学习

编写深度学习的代码需要数学、统计学的知识,并且熟悉PyTorch、TensorFlow、Keras 等框架和库。

在图3.4中,我们要求 GPT-4 和 ChatGPT 编写一个自定义优化器模块,这是一项即使对人类的深度学习专家来说也可能具有挑战性的而且容易出错的任务。我们给这些模型一个自然语言描述,其中包括一系列特殊操作,例如应用 SVD,在 top-k 和 top-2k 特征值处对矩阵进行频谱截断,使用top-2k截断矩阵的 F-norm 范数对top-k截断矩阵进行归一化,应用动量和权重衰减。这些指令并没有完整的详细说明,例如,“在Gk上应用动量”需要“深度学习常识”。需要注意的是,这个特定的优化器在文献或互联网上并不存在,因此模型无法记住它,必须正确地组合概念才能产生代码。

虽然两种模型都能生成语法上有效的代码,但只有GPT-4 的代码在语义上是正确的,并且与指令匹配。相比之下,ChatGPT在应用动量(用红色突出显示)时犯了一个错误,这是一个非常复杂的任务,需要将移动平均值存储到一个单独的状态缓冲区中并从中读取。

GPT-4 生成的深度学习代码:

def step(self):
    for group in self.param_groups:
        for p in group['params']:
            if p.grad is None:
                continue
            grad = p.grad.data
            # reshape grad to 2D
            grad_2d = grad.reshape(-1, group['d_dim'])
            # SVD decomposition
            U, S, V = torch.svd(grad_2d)
            # keep top k singular vectors
            G_k = U[:, :group['k']] @ torch.diag(S[:group['k']]) @
            V[:, :group['k']].T
            # keep top 2k singular vectors
            G_2k = U[:, :2*group['k']] @ torch.diag(S[:2*group['k']]) @ V[:, :2*group['k']].T
            # normalize G_k
            G_k /= torch.norm(G_2k, p=2)
            # truncate G_k
            threshold = torch.quantile(torch.abs(G_k),
            group['alpha'])
            G_k[torch.abs(G_k) < threshold] = 0
            # apply momentum
            if 'momentum_buffer' not in group:
                group['momentum_buffer'] = torch.zeros_like(G_k)
            group['momentum_buffer'] = group['momentum'] * group['momentum_buffer'] + G_k
            # update parameters
            p.data.add_(-group['lr'] * group['momentum_buffer'])
            # apply weight decay
            if group['weight_decay'] != 0:
                p.data.add_(-group['weight_decay'] * group['lr'],p.data)

LATEX 接口

用 LATEX 书写对于计算机科学家和数学家来说是一项重要的练习,但它的学习曲线并不平坦。它的语法严格,而且没有一个好的调试器,即使是专家也会犯恼人的错误,要花好几个小时才能解决。

GPT-4 可以利用它的大师级别的 LATEX编码技巧,这大大简化了过程,具有作为新一代LATEX编译器的潜力,可以处理不精确的自然语言描述。在图3.5中,我们要求GPT-4将一段用混合了自然语言的半严格(有bug)的LATEX代码编写的代码片段转换为精确的LATEX命令,可以一次性编译并忠实于要求。相比之下,ChatGPT生成的代码片段会因为使用#\\color等错误而无法编译。

如图3.5所示,GPT-4 将半严格的排版指令翻译成可运行的 LATEX 片段。对于GPT-4,我们呈现了最终的图形,而ChatGPT生成的结果编译时发生错误。


3.2 理解现有的代码(Understanding existing code)

前面的例子已经表明,GPT-4 可以从指令中编写代码,即使指令是模糊的,不完整的,或需要领域知识。它
们还表明,GPT-4可以响应后续请求,根据指令修改自己的代码。

然而,编码的另一个重要方面是理解和推理他人编写的现有代码的能力,这些代码可能是复杂的,晦涩的,或记录不佳的。为了测试这一点,我们提出了各种问题,这些问题需要阅读、解释或执行不同语言和范式编写的代码。


3.2.1 逆向工程汇编代码

逆向工程是软件安全性的一项基本测试,它相当于在以机器可读(即二进制)表示的 CPU 指令的可执行程序中搜索有用信息。这是一项具有挑战性的任务,需要理解汇编语言的语法、语义和约定,以及处理器和操作系统的体系结构和行为。
我们让GPT-4对一个二进制可执行文件(代码是用C编写的)执行渗透测试,该文件需要密码才能运行。我们通过一种聊天格式来做到这一点,GPT-4告诉用户要运行哪些命令,用户用结果来响应。我们还在5.1节中展示了GPT-4能够独立运行shell,但这种聊天模式也提供了它解释每个步骤的好处。

GPT-4检查文件格式和元数据,用“objdump”和“radare2”等工具对代码进行反汇编,用“gdb”和“ltrace”调试代码,用打补丁、挂接、反编译等技术对其进行逆向工程。在这个过程中,GPT-4从汇编代码中计算出密码与从一个简单的数学公式推导出的哈希值进行比较。然后,GPT-4编写一个python程序,尝试不同的数字组合,直到找到与哈希值匹配的数字组合,从而破解密码(附录C.6给出了一个简短的日志)。

ChatGPT拒绝这样做,理由是这样做是非法的和不道德的,即使逆向工程是一种确保软件安全的常见做法。

此外,除了编程之外,GPT-4在利用现有工具方面也表现出了全面的熟练程度,我们将在5.1节中详细讨论。


3.2.2 代码执行的推理

在图3.6的例子中,我们让 GPT-4 和 ChatGPT 预测并解释打印两个 structure的大小的 C程序的输出。GPT-4正确地解释了根据编译器使用的对齐规则,输出可能会有所不同,并给出了一个使用 4字节对齐的可能输出示例。

ChatGPT忽略了对齐问题,给出了错误的输出,还对不影响结构大小的成员顺序做出了错误的陈述。

GPT-4 对这段代码的解释如下:

在内存中实现和对齐结构的方式有所不同,因此确切的输出可能会因编译器、平台和使用的选项而异。然而,可能的一种输出是:
Size of x: 12 bytes
Size of y: 8 bytes
此输出假设编译器对结构使用4字节对齐方式,这意味着每个结构成员从结构的开头开始的偏移量是4字节的倍数。这可能会导致一些填充字节在成员之间或之后插入以保持对齐。例如,在x中,a之后可能会有3个填充字节,c之后也可能会有3个填充字节,而在y中可能根本没有填充。结构的大小是其成员大小和任何填充字节的总和。

ChatGPT 对这段代码的解释如下:

Size of x: 8 bytes Size of y: 8 bytes
这段代码的输出将是两个结构体的大小,以字节为单位。在C语言中,结构体的大小是其所有成员大小的总和。在这种情况下,mystruct A 的大小为一个char 的大小加上一个int 的大小再加上另一个char 的大小,即1 + 4 + 1 = 8 字节。
同样,mystruct B 的大小也是8 字节。这意味着两个结构体将被分配相同数量的内存。请注意,在结构体中声明成员的顺序不会影响其大小。


3.2.3 执行Python代码

理解现有代码的最终测试是要求模型直接执行它。

在图3.7中,我们看到 GPT-4 能够执行并不简单的 Python代码。它必须跟踪几个变量(包括一个嵌套循环和一个字典)并处理递归。它通过编写中间步骤和注释来详细解释执行过程。

需要注意的是,GPT-4并不是在Python解释器上运行代码,而是用自然语言模拟代码。这需要对代码有高度的理解和推理能力,以及清楚地传达结果的能力。
相比之下,ChatGPT 错误地声明 “DP(3,4)的结果没有在给定的代码中指定”,随后又说“从代码中无法明确函数的预期输出是什么,因为没有提供函数正在解决的具体问题。” ChatGPT并没有模拟完整的执行过程,而是说明了哪些函数会被调用。

输入的 Python 代码如下。

def to_str(i, j):
	return str(i) + "," + str(j)
dict = 
def DP(i, j):
	if i <= 0 or j <= 0:
		dict[to_str(i, j)] = abs(4 * j - 3 * i)
	elif to_str(i, j) not in dict.keys():
		arr = []
		for ir in range(i):
			for jr in range(j):
				arr.append(DP(ir, jr))
		dict[to_str(i, j)] = max(arr)
	return dict[to_str(i, j)]


3.2.4 执行伪代码

编译和执行用编程语言编写的代码很容易,但这也要求严格遵守语法和语义。编译器无法处理模糊或非正式的表达,或自然语言对功能的描述。

相比之下,我们要求GPT-4执行图3.8中复杂的伪代码,注意到它能够执行并解释每一步(包括递归)。ChatGPT是不能执行的,尽管它看起来能够解释每一行代码。在下面的例子中,GPT-4正确地解释了合并数组函数(merge array function)的非正式描述,该函数将两个数组合并为一个包含缺失元素的数组。它还理解了以粗略方式定义的递归函数rec。

值得注意的是,GPT-4 直接执行代码,而不需要将其翻译成其他定义良好的编程语言。这证明了AGI模型作为一种用自然语言编程的新工具的潜力,这可能会彻底改变我们未来的编码方式。

为了获得另一个关于GPT-4如何维持代码状态的初步评估,在附录C.7中,我们用数百个多个长度的随机采样输入,在GPT-4上以零样本的方式运行用于大数乘法的图标伪代码。代码要求GPT-4更新并记住大量步骤的数组状态。我们观察到,尽管GPT-4被训练为(非精确)自然语言模型,但在超过50次更新后,它几乎可以正确地保存代码的状态。


【本节完,以下章节内容待续】

  1. 数学能力
  2. 与世界交互
  3. 与人类交互
  4. 判别力
  5. GPT4 的局限性
  6. 社会影响
  7. 结论与对未来展望

版权声明:

youcans@xupt 作品,转载必须标注原文链接:
【微软 GPT-4 测试报告(3)GPT4 的编程能力】:https://blog.csdn.net/youcans/category_12244543.html

本文使用了 GPT 辅助进行翻译,作者进行了全面和认真的修正。
Copyright 2022 youcans, XUPT
Crated:2023-3-25

参考资料:

【GPT-4 微软研究报告】:
Sparks of Artificial General Intelligence: Early experiments with GPT-4, by Sébastien Bubeck, Varun Chandrasekaran, Ronen Eldan, et al.
下载地址:https://arxiv.org/pdf/2303.12712.pdf

GPT4微软 GPT-4 测试报告与外界环境的交互能力

欢迎关注【youcans的AGI学习笔记】原创作品
微软 GPT-4 测试报告(1)总体介绍
微软 GPT-4 测试报告(2)多模态与跨学科能力
微软 GPT-4 测试报告(3)编程能力
微软 GPT-4 测试报告(4)数学能力
微软 GPT-4 测试报告(5)与外界环境的交互能力
微软 GPT-4 测试报告(6)与人类的交互能力
微软 GPT-4 测试报告(7)判别能力
微软 GPT-4 测试报告(8)局限性与社会影响
微软 GPT-4 测试报告(9)结论与展望

【GPT4】微软 GPT-4 测试报告(5)与外界环境的交互能力


微软研究院最新发布的论文 「 人工智能的火花:GPT-4 的早期实验 」 ,公布了对 GPT-4 进行的全面测试。

本文介绍第 5 部分:GPT4 与外界环境的交互能力。基本结论为:

语言是一个强大的接口,允许 GPT-4 执行需要理解环境、任务、动作和反馈的行动,并进行相应的调整。虽然它不能实际看到或执行动作,但它可以通过代理(例如,人类)来实现。


5. 与外界的交互(Interaction with the world)

智能的一个关键方面是交互性,我们将其定义为交流和响应来自其他智能体、工具和环境的反馈的能力。

交互性对智能很重要,因为它使智能体能够获取和应用知识,解决问题,适应不断变化的情况,并实现超出其个人能力的目标。例如,人类与他人以及与环境进行交互,以协作、学习、教学、谈判、创造等。交互性要求智能体理解复杂的思想,快速学习,并从经验中学习,因此它与我们对智能的定义密切相关。

在本节中,我们探讨了互动性的两个维度:工具使用和具身交互。工具使用涉及使用外部资源,如搜索引擎、计算器或其他 API,来执行对于代理而言很难或不可能完成的任务。具身交互涉及使用自然语言作为文本界面与模拟或现实环境进行交互,并从这些环境中接收反馈。


5.1 工具的使用(Tool use)

尽管 GPT-4 在前几节的各种任务中有令人印象深刻的表现,但仍然面临者各种语言模型共同的弱点。这些弱点包括(但不限于)缺乏当前的世界知识,难以实现符号处理(例如,数学),以及无法执行代码。例如,在图5.1中,GPT-4 使用过时的信息来回答第一个问题,未能对第二个和第三个问题执行适当的操作。ChatGPT 拒绝回答第一个问题,其他问题也失败了。

然而,GPT-4 能够使用搜索引擎或 API 等外部工具来克服这些(和其他)限制。例如,在图5.2中,我们给了一个简单的提示符,使 GPT-4 能够访问搜索引擎和其他功能。在执行过程中,当调用这些函数中的一个时,我们暂停生成,调用适当的函数,将结果粘贴回提示符中,然后继续生成。

计算机正在回答问题。如果计算机需要任何当前信息来回答问题,它会说 SEARCH在网上搜索,读取结果中的片段,然后回答问题。如果它需要运行任何计算,它会说CALC,然后回答问题。如果
它需要得到一个特定的字符,它会调用 CHARACTER(string, index)<| endofprompt |>.

提问:美国现任总统是谁?计算机:搜索(“现任美国总统”)
计算机:SEARCH(“current US president”)
输出:Joe Biden

在这些简单的例子,GPT-4 能够在很少的指令和没有演示的情况下使用这些工具,然后适当地使用输出(注意第二个搜索结果如何包含潜在的冲突信息, 而GPT-4仍然能够推断出正确的答案)。相比之下,ChatGPT(图中未显示)在被指示使用工具后,并没有改变答案——它仍然拒绝回答第一个问题;对于另外两个问题,它有时根本不调用工具,有时在给出错误答案后调用工具。

虽然在图5.2中我们指定了哪些工具可用,但 GPT-4 也可以列出为了解决一个任务需要哪些工具(或API函数)(图F.2附录中的例子,GPT-4 列出了完成一个任务所需的四个API函数,然后继续有效地使用它们)。


5.1.1 使用多个工具来解决更复杂的任务

解决更复杂的任务需要 GPT-4 结合使用多种工具。我们现在分享一些例子,GPT-4 能够通过依赖其理解手头任务的能力来做到这一点,识别所需的工具,以正确的顺序使用它们,并对它们的输出做出适当的响应。

黑客测试:

在图F.3(附录)中,我们告诉 GPT-4,它可以在为数字取证和渗透测试而设计的 Linux 发行版上执行命令,并让它入侵本地网络上的一台计算机。

在没有任何信息的情况下,它能够制定并执行一个计划,扫描网络中的设备,识别目标主机,运行一个尝试常用密码的可执行文件,并获得对机器的 root 权限。虽然这台机器很容易被入侵,但我们注意到,GPT-4 精通 Linux命令,能够运行适当的命令,解释它们的输出,并进行适应,以解决其目标。

ChatGPT拒绝执行这项任务,理由是它可能是非法的。


通过命令行指令管理 Zoo:

GPT-4 可能在其训练数据中看到了前一个例子的近似副本。为了检查它在一个它肯定没有见过的任务上的工具使用情况,我们创建了一个新颖的场景,其中涉及自然语言理解与广泛的命令行使用。

在这个场景中,我们让GPT-4 扮演 zoo 管理员的角色,完成一个文件中指定的六个任务序列(参见图5.3, GPT-4 从正确发出 todo.txt 命令类型开始)。为了完成这些任务,GPT-4 必须操作代表不同动物、区域和动物园信息的文件和文件夹,要求它既理解手头的任务(例如,弄清楚哪些动物在“热带雨林”中被放错了位置),也要理解相应的命令。

尽管挑战范围很广(完成所有任务需要100多个命令),但 GPT-4 几乎能够解决所有任务。它唯一的失败是在回复电子邮件时捏造内容,而不是从文件中读取指定的内容(附录F.1.1),这个问题通过对提示符的简单调整得到了修复(附录F.1.2)。

虽然GPT-4经常表现出聪明才智(例如手动运行广度优先搜索来导航目录),但它经常运行不正确的命令,例如删除名称中有空格的文件(例如“Polar Bear.txt”)而不添加引号。然而,考虑到系统的响应(“Could not find…”),它能够在没有人为干预的情况下自行纠正。

有趣的是,GPT-4在后续带有空格的文件中也犯了同样的错误(并且总是应用相同的更正),尽管它可以预测错误命令会给出什么样的错误信息。我们的假设是,一旦建立了错误的模式,它只是在剩下的世代中重复这个模式,就像模拟一个犯同样错误的用户。


管理日历和电子邮件:

在图5 -4中,我们说明了 GPT-4 如何能够组合使用多种工具来管理用户的日历和电子邮件。

用户请求 GPT-4 协调与另外两个人共进晚餐,并在用户有空的晚上预订。GPT-4使用可用的 API 来检索用户的日历信息,通过电子邮件与其他人进行协调,预订晚餐,并将详细信息发送给用户。

在这个例子中,GPT-4 展示了它结合多种工具和 API 的能力,以及对自由形式输出的推理,以解决一个复杂的任务(例如,“周二或周三晚上”与“周一到周四的任何一天”相结合,以及用户在周二很忙的事实,使得周三成为唯一可行的选择)。

ChatGPT(未显示)无法完成相同的任务,而是写了一个函数,其中“joe@microsoft.com”用单个日期发送电子邮件“luke@microsoft.com”,并检查响应是否包含令牌“yes”。当将其函数的输出提供给它时,ChatGPT也无法做出回应。


浏览网页寻找信息:

在图5.5和图5.6中,GPT-4 使用搜索引擎和总结功能(根据手头的问题下载网页并调用自身进行总结)来浏览网页并回答问题。

在这两种情况下,GPT-4都能够识别相关的搜索结果,以更深入的方式进行查看,并对其进行总结,并提供准确的答案,即使问题包含错误的前提。虽然之前版本的llm也可以被教浏览网页,但我们注意,GPT-4不需要任何微调或演示就能做到这一点。


使用不常用的工具,一个失败案例。

在图5-7中,我们让 GPT-4 使用一个十分不常用的 API 来解决一个简单的任务。

GPT-4 未能适应不常用的函数,而是像往常一样调用它们,即它调用 reverse_get_character,就像 get_character 一样,调用 reverse_concat,就像它是一个简单的 concat 一样。ChatGPT 出现了相同的问题,除了它不检查单词的长度是否大于或等于3。

然而,当用户说有错误时,GPT-4 能够发现并修复错误,而 ChatGPT(未显示)在相同的提示下无法发现或修复自己的错误。


5.1.2 讨论

本节中的例子表明,GPT-4能够自己识别和使用外部工具,以提高其性能。它能够推理出它需要哪些工具,有效地解析这些工具的输出并适当地响应(即,与它们适当地交互),所有这些都不需要任何专门的训练或微调。

现在我们注意到一些限制。

首先,GPT-4仍然需要一个提示符,指定允许或期望使用外部工具。在没有这样的提示的情况下,它的性能会受到LLMs固有弱点的限制(例如,弱符号操纵,有限的当前世界知识,图5.1)。

其次,即使可以获得工具,GPT-4也不总是能够推理出什么时候应该使用工具,什么时候应该基于自己的参数化知识简单地做出响应,例如,当我们询问法国首都时,它仍然使用搜索引擎(未显示),尽管它肯定可以在没有搜索结果的情况下正确回答。

第三,动物园的例子暴露了一个重复的错误模式,而图5-7是一个失败的例子,使用不常用的工具。

然而,在这两种情况下,GPT-4在接收到环境(无论是命令行还是用户)的响应后都能够修复问题,这再次证明了GPT-4强大的交互性。正如我们自始至终所注意到的,ChatGPT无法表现出类似水平的交互性,经常忽略工具或它们的响应,而倾向于通用的答案。


5.2 亲身经历互动(Embodied Interaction)

虽然工具的使用是交互的一个重要方面,但现实世界中的大多数交互并不是通过 API发生的。

例如,人类能够使用自然语言与其他主体交流,探索和操纵他们的环境,并从他们的行为的后果中学习。这样的亲身经历的互动需要智能体理解每一轮交互的上下文、目标、行动和结果,并相应地进行适应。

虽然 GPT-4 显然不能亲身经历什么,但我们探索了它是否可以通过使用自然语言作为各种模拟或现实环境的文本界面来进行具体化交互。


5.2.1 热身:地图导航

在图5 - 8中,我们准备了一张房子的“地图”,并让GPT-4通过交互式查询来探索它。

然后,我们要求它用语言和可视化的方式描述它,并将其与真实的地图进行比较。虽然 GPT-4 没有探索整个房子,但它准确地描述了它所探索的内容,即使它所有的互动都是通过这个受限的文本界面进行的。


5.2.2 基于文本的游戏

文本游戏对于语言模型来说是一个自然且具有挑战性的领域,因为它们需要理解自然语言,对游戏状态进行推理,并生成有效的命令。

基于文本的游戏是一种交互式小说,智能体通过自然语言描述和命令与环境进行交互。智能体必须通过探索环境和操纵物体来执行给定的任务,例如寻找宝藏或逃离地下城。

我们首先测试GPT-4是否可以在基于文本的游戏中探索环境来执行给定的任务。在这个和接下来的实验中,我们使用 TextWorld ,一个用于生成和玩文本游戏的框架,来创建两个具有不同给定任务的游戏。

探索环境。
第一款游戏发生在一个有很多房间的房子里,目标是通过在不同房间之间导航找到并解锁某个箱子。这款游戏相对简单,因为它不涉及任何库存管理,锻造或战斗。环境由文字段落描述,玩家可以输入“往北走”、“检查沙发”、“打开箱子”等命令。箱子通常离起点只有几个房间的距离,因此解决游戏需要在不迷路的情况下探索环境。

我们将来自 Textworld 的初始文本作为初始提示,并将 help 作为第一个命令发出。随后,GPT-4 以普通玩家的身份玩游戏。它在没有任何额外帮助的情况下,在30个动作中完成游戏,并在不循环穿越房间的情况下高效地导航环境(图5.9包含了一个摘录和走过的路线,附录F.2.1有完整的日志)。

定性地说,GPT-4以一种非常保守的方式解决了游戏,它检查并捡起每个房间中的每一个物体,而不考虑其与游戏目标的相关性。然而,相比之下,text-davinci-003 则完全不回应环境反馈,而是反复发出相同的命令(附录F.2.2)。

对反馈作出反应。

GPT-4的游戏任务是根据食谱准备一顿两种成分、五个步骤的饭。这个游戏比上一个更具挑战性,因为玩家(GPT-4)必须自己从环境响应中想出关键命令(这些在帮助中没有列出),比如切食物、使用正确的器具、打开电器(见图5.10)。

GPT-4 在玩游戏时使用试错法,但它也会根据环境进行适应,并在动作之间进行归纳。比如图5.10中所示的,它学会了chop命令需要一把刀,之后就不会再犯同样的错误了。它会按照食谱上的说明去做,但也会推断出一些遗漏的动作,比如取所需的食材。虽然游戏没有具体说明关键命令缺失,但GPT-4会做出合理的猜测,例如,当它从厨房拿不到煎锅时,它会进入卧室寻找煎锅(更多细节见附录F.2.3)。GPT-4无法解决这个游戏,但在查看源代码之前,本文的作者(被卡在了同一步骤中)也无法解决。但是,如果我们给GPT-4演示一遍做一道不同的菜,它就能够从中归纳并解决这个游戏(附录F.2.4)。


5.2.3 现实世界的问题

在图5.11和图F.1中,给了GPT-4两个需要解决的现实问题,并给了一个人类作为伙伴(比如一个非常灵活的智能体,约束很少,也可以用自然语言进行响应)来与环境互动。

这两个问题都是本文作者所面临的现实问题,他们对GPT-4的反应方式是跟踪他们所面临的情况。

对于这两个问题,GPT-4能够识别人类需要采取的行动,以解决问题。在第一个例子中,GPT-4引导人类找到并修复漏水,并推荐人类所采取的确切行动(替换封件后,泄漏消失了)。在第二个例子中,作者没有打电话给煤气公司转移上一个用户的服务,因此煤气被关了。在这种情况下,GPT-4能够迅速找到问题的源头(现实的人花了很长时间检查热水器的指示灯),并提出合理的解决方案。然而,它无法诊断出根本原因,直到人类自己有了检查炉顶的想法。


5.2.4 讨论

虽然没有明显体现出来,但上面的例子说明了语言是一个强大的接口,允许GPT-4执行需要理解环境、任务、动作和反馈的行动,并进行相应的调整。虽然它不能实际看到或执行动作,但它可以通过代理(例如,人类)来做到这一点。

即便如此,我们承认我们只在有限的游戏和现实问题上测试了GPT-4的局限性,因此无法对其在不同类型的环境或任务上的表现得出一般结论。

一个更系统的评估将需要更大、更多样化的现实世界问题集,其中GPT-4实际上是实时使用的,而不是回顾性的。


【本节完,以下章节内容待续】

  1. 与人类交互
  2. 判别力
  3. GPT4 的局限性
  4. 社会影响
  5. 结论与对未来展望

版权声明:

youcans@xupt 作品,转载必须标注原文链接:
【微软对 GPT-4 的全面测试报告(5)与外界环境的交互能力】:https://blog.csdn.net/youcans/category_129850117.html

本文使用了 GPT 辅助进行翻译,作者进行了全面和认真的修正。
Copyright 2022 youcans, XUPT
Crated:2023-3-30

参考资料:

【GPT-4 微软研究报告】:
Sparks of Artificial General Intelligence: Early experiments with GPT-4, by Sébastien Bubeck, Varun Chandrasekaran, Ronen Eldan, et al.
下载地址:https://arxiv.org/pdf/2303.12712.pdf

以上是关于GPT4微软 GPT-4 测试报告GPT4 的编程能力的主要内容,如果未能解决你的问题,请参考以下文章

GPT4微软 GPT-4 测试报告与外界环境的交互能力

GPT4微软 GPT-4 测试报告局限性与社会影响

GPT4微软对 GPT-4 的全面测试报告

GPT4GPT4 官方报告解读

GPT4和ChatGPT的区别,太让人震撼

GPT4国内镜像站