而除了第三方插件,OpenAI也介绍了一款自家的插件「代码解释器」,并给出了几个特别的用例:解决定量和定性的数学问题;进行数据分析和可视化;快速转换文件格式。
此外,Greg Brockman演示了ChatGPT还可以对上传视频文件进行处理。
而一位叫Andrew Mayne的畅销作家、OpenAI的创意应用程序和科学传播者,立马就试了一把——把代码解释器(Code Inerpreter)接入ChatGPT。
感受就是,太丝滑了!
以前用ChatGPT写代码时,总是需要把代码拿出来,再放到另一个环境里去测试。
而现在,根本不需要离开当前的界面,直接就可以在ChatGPT中开发了。
只要我们把这个代码解释器添加到数据分析、绘图功能中,就诞生了一个强到发指的编码和研究工具。
OpenAI全新插件系统:代码解释器
目前,代码解释器只能在少量的库上运行Python,而即使用最基础的库,它能做的东西也非常多,非常有趣。
另外,除了生成代码,代码解释器(CI) 还可以分析输出,并将其用于另一个函数。
因此,我们可以将不同的代码串在一起,获取其中一个的输出,再提供给另一个。
这个吃豆人gif就是这么生成的:CI用算法生成迷宫,把迷宫变成方块,用算法找到出口,做成吃豆人的样子,然后生成gif。
以下是Mayne使用ChatGPT的代码解释器插件,进行随机实验的一些示例。
创建机器学习模型 (某种程度上)
虽然目前ChatGPT无法将任何机器学习库加载到代码解释器中,但我们可以使用n-gram进行一些基本的统计文本生成。
如下例子中,通过给它提供一本书,要求它创建一个预测算法,然后预测文本序列中的下一个单词。
GPT用n-gram模型生成了算法:
下一个单词预测是一项自然语言处理任务,可以使用语言模型来解决。建立语言模型的一种简单方法是使用n-gram模型。
n-gram模型是一种基于统计的语言模型,它根据前n-1个单词来预测下一个单词。例如,如果我们选择n=3(即三元模型),则模型将基于前两个单词来预测下一个单词。
以下是一些代码,可以帮助您从头开始构建三元模型。
声音
因为ChatGPT可以理解很多数学数据,并且CI能够生成可下载的文件,因此Mayne尝试了下用ChatGPT生成Shepard音调。这是一种独特的音调,能够个人造成一种音调在不断变高的错觉。
ChatGPT不仅顺利地完成了任务,还直接用CI生成了一个wav文件。
打开听一下这个Sheperd音,感受就是,两个字——完美!
既然ChatGPT生成的Sheperd音这么完美,Mayne就更进一步,让ChatGPT来生成一个康威生命游戏的会话,然后转换为音乐。
(康威生命游戏是剑桥大学康威设计的计算机程序。这是一款图灵完备的零玩家游戏,意味着它的演化取决于它的初始状态,不需要进一步的输入。)
第一遍的时候,ChatGPT生成的音乐有点太随意,Mayne要求它生成更愉悦的音乐,于是ChatGPT应用了五声音阶,听起来果然不错。
game_of_life_pentatonic_slow音频:00:0000:14
ChatGPT的表现太过优异,Mayne大为兴奋,他已经开始设想一整张数学音乐专辑了,比如(斐波那契数列、Mandelbrot 集、元胞自动机)。
随后,他要求ChatGPT为《康威生命游戏》这首歌生成一个专辑封面。由于它没有连接到DALL-E,Mayne要求它从模拟帧生成图像。
专辑封面如下。
二维码
而看着这张专辑封面,Mayne马上意识到或许可以用ChatGPT生成一个有效的二维码。
Mayne让它为OpenAI的网站生成一个二维码,结果如下:
那么,ChatGPT可以创建一个以二维码结尾的康威生命游戏吗?
是的,它可以。
图片
另外,Mayen发现,使用OpenCV和一个简单的面部识别算法(Haar Cascade 分类器),CI就能够创建一个函数,来进行人脸识别。
使用OpenCV进行人脸识别
现在,ChatGPT可以自己打开和读取文件了,也就意味着理论上它可以使用这些数据生成新的东西。比如,把一张图转换为ASCII的形式。
上传图片:
转为ASCII:
生成动画
通过代码解释器,可以生成数据,并将其输出包括gif在内的不同格式。
首先,让它做一个弹跳块:
然后是暴风雪:
接下来是「生命游戏」,正是这款游戏启发了二维码模拟实验。
试图让代码解释器使用矢量化的立方体来生成「旋转的立方体」。在尝试了其他方法之前,这是能够得到最接近的结果:
OCR
研究称,光学字符识别(OCR)是代码解释器中的一个库。通过用网站截图进行测试,果然可以识别。
将OCR与一个功能强大的语言模型GPT-4结合起来,可以为修复旧文档提供了一些有趣的可能性。
上图可以看出,OCR能从整张图片中提取部分文本,但结果仍不完整,且带有噪声。
由此看来,在处理低质量或扭曲的图片时,OCR可能会有限制。如果你需要从图片中获取具体信息,同时也需要手动转录部分内容。
日历邀请
尽管代码解释器没有访问ics库的权限,但它可以生成一个纯文本的日历邀请,然后让ChatGPT将其保存为.ics文件。
画画
尽管已经有一些GPT-4生成可缩放矢量图像(SVG)的有趣例子。但我还是很好奇 ChatGPT 和代码解释器能对简单的图像块做些什么。
我让它画了一只猫,它创作了类似猫的东西。为了确保它不是凭记忆做出的,我要求它画一个蓝色的高顶帽和烟斗。虽然不完全是我想象中的高顶帽,但仍然是一个帽子,是蓝色的。
一只戴着帽子、抽着烟斗的猫:
一只戴着「帽子里的猫」式样帽子,还有抽着烟斗的猫:
模拟器
通过使用Matplotlib库,我成功地让ChatGPT生成了内部行星轨道的模拟,并将其保存为gif。
我接着思考能否让ChatGPT模拟一局跳棋,并设法移动了棋子,但是出于礼貌没有拿走对手的棋子。
能否模拟一局象棋?首先我让ChatGPT创建自己的棋盘库(一个非常简单的棋盘库,有一些限制和不太合法的移动……),然后使用Unicode表示棋子,之后,它可以模拟一场游戏的开始,并将其保存为.gif文件。
下面是我和ChatGPT进行象棋模拟时的对话。可以看到,我只是给了一些指示,ChatGPT和代码解释器做了剩下的工作。
如上是Andrew Mayne对ChatGPT和代码解释器插件的一些探索。
网友看后点评,LLMs越来越像一位真正的程序员,不仅可以建议代码片段,还可以编写整块代码、运行代码,并给你输出进一步的指导和反馈。
还有人表示,即使停下手下的事,也要看看这篇关于GPT-4代码解释器插件用例的文章。这完全是疯狂的,并将改变一切。
参考资料:
https://andrewmayneblog.wordpress.com/2023/03/23/chatgpt-code-interpreter-magic/