有人没有耐心看到最后,我先把我自己测试到的结论放在最前面。(但强烈建议大家阅读全文,不亏)
OpenAI 官方提供了的一个能够自己编写 Python 代码并执行 Python 代码的沙箱。支持用户上传本地的文件。ChatGPT 会基于指令或者文件内容,分析、编写 Python 代码,并反复修改、执行自己的代码,同时,也可以把结果保存成相应的文件供用户下载。
注意!!!其所有的操作都是通过编写并执行 Python 代码实现的,不能直接执行你上传的代码!即便是访问你的上传的代码,它也是通过执行 Python 的 open() 方法实现的,以保证其沙箱的安全性。
优势和长处:
1、第一印象非常惊艳,非常强。我第一次用的时候,给了它一个 CSV 文件,没有给出任何指令的情况下,它自己 balabala 自己搁那一顿分析,然后给出了我非常好的数据分析和可视化结果。从头到尾,我除了「上传文件」这一个操作,其它任何指令都没给…
2、通过执行 Python 库,即使没有 Wolfman 插件的情况下,也可以正确计算数学题目。
3、会给出你思考的过程以及具体的代码文件,是一个非常非常优秀的「数据分析导师」,几乎跑通了自然语言到数据分析+可视化+给出分析结论的流程,而且如果你的数据模板格式相对比较统一,甚至可以把代码保存下来运行(甚至以此解决数据安全问题?)。
4、顾名思义,它是「代码解释器」,有没有可能,它真的会写/改代码…甚至写的比我好…
5、你可以尝试上传任何文件(<100MB,虽然它不一定为你执行)。我测试了常规的文本(txt,csv,docx,xlsx…),图片,音频,视频…都没有问题。甚至是压缩包和 sqlite .db 文件。只要你自己能用 Python 处理的文件格式,它一律可以处理!
缺陷或者不足:
1、不能联网!不能联网!不能联网!
2、仅限于官方内置提供的一些库,不能自己安装其他库,或调用其他库的功能。(不是 Python 内置库,除了 Python 内置库,相对来说还是有很丰富的第三方库的)
3、续2,尽管能接收图片、音频、视频等类型的文件,但其处理能力也仅限于其提供的一些库的功能,比如不能音频转文字,不能图生图修图等等,能做的,是截取音频、截取视频、转格式、视频转 GIF、GIF 转视频这些用相对常规的库就能实现的操作。
4、官方目前给出的沙盒环境中,缺少中文字体支持。如果上传的文档中有中文内容,虽然能够正确读取并处理,但在 PIL 可视化的过程中,会因缺失字体而显示不正常。后面会详细说。
5、老生常谈的数据安全话题,甚至与 ChatGPT 不同,如果如果你想体验自动化的数据分析或者代码编写,就必须把本地文件进行上传。
在官方的博客 中,是这样介绍 Code interpreter 的:
官方也给出了三个基于此能力的推荐用法:
Solving mathematical problems, both quantitative and qualitative 解决数学问题,包括定量和定性问题。
Doing data analysis and visualization 进行数据分析和可视化
Converting files between formats 在不同格式之间转换文件
我按照官方给出的用法,进行一些尝试,并自己测试了一些其他用法。
数学问题
这个只做个简单的测试。因为常规的数学问题,GPT-4 已经有很大的能力提升了。但是,就好比人有了计算器就懒得手算一样,这家伙有了 Python,算个鸡兔同笼竟然也要用 Python 了。
现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,球鸡和兔子各有多少只?
我一时想不出要测什么别的题目…先过,大家可以在评论区出题,我再补充进来。
代码能力
代码能力…还有必要测吗…只不过相比于 ChatGPT 只能写代码,它还可以执行代码得到结果。如:
给定一个 1 到 100 之间的随机整数数组,找出其中所有奇数,并将它们替换为 -1。
同样的,我们也可以上传一段自己的代码,看它是否能执行或者修改。比如一段最简单的爬虫代码:
显然,它不能够执行带有网络请求函数的代码。然后,我让它为代码添加 headers 和 cookies,它分两步完成了我的任务:
第一步,读取代码,它很谨慎地使用了 with open() 方法:
第二步,修改代码:
当然,我可以再多加一个步骤:
总之,沙箱的安全限制还是比较严格的…并不是提供一个直接的终端执行环境。
再比如,我尝试获取沙箱环境上级目录的内容(显然,这样低级的测试 OpenAI 不可能没有考虑到):
数据分析和可视化
这一部分是重中之重,希望你没有提前退出…不过,由于暂时没找到合适的测试数据(我对数据安全还是心存顾虑),所以我干脆从 Apple Watch 中导出了自己的一些健康数据。
比如我上传了一份自己的 ECG 心率检测数据,这份数据大概长这个样子:
ChatGPT 会怎么做?注意:在这里我直接上传了文件,并未给出其任何具体的指令!它自己直接开始尝试操作,反复读取了前 N 行数据并推断其是什么内容、含义,直到最终准确定位到,从第 14 行开始是具体数据,并尝试将之后的所有数据进行了可视化。(这孩子看来比较轴,不做出个结论来誓不罢休…)
截图里面的每一个 Work,都是一段具体的 Python 代码。具体来讲:
第一次执行,尝试读入了前几行并分析其含义:
然后对这些数据进行了格式化:
然后,它推测这些数据中并不包含真实的 ECG 数值,并继续尝试读取之后的内容:
然后继续清理这些非数值的属性数据直到找到正确的起始数值。
然后主动将其可视化:
这一顿操作…说真的,我已经看麻了。它能够充分发挥「主观能动性」,去尝试摘取属性元数据,去定位具体的数值数据,甚至不需要指令的情况下,根据 ECG 的采样率,画出了正确的图像…
我们来看一眼可视化图像这部分的代码:
注意,源数据中只有一列采样值,并没有具体的时间。它完全是推断出采样频率以后,自行补充计算的时间。
这个源文件的数据格式已经堪称 ugly 了,它都能给出这样的表现…
格式转换
这个格式转换,其实还是比较有想象力的。但是开篇就说了,这些能力仅限于 Python 代码能处理的范围,但是有没有可能,Python 代码本身能做到的事情,就已经很强了…
出于好奇,我还是先测试了一下 GPT-4 发布时的那张梗图 。
但是它告诉我它看不到图片内容:
但是在官方演示中,它明明可以介绍图片内容:
我上传相同的图片,丫就不理我(汉字是我用插件加的翻译):
算了,看来图像能力没有向我开放,我们还是测试别的内容。
图片处理(缩放、裁切、黑白化等)
音频处理(剪切前几秒)
我先是尝试要求它实现语音转文字(幻想其拥有 Whisper 的能力),显然不能…然后就是常规的音频操作了。
视频处理(剪切几秒并转化为 GIF/或者反过来,GIF 转视频)
它在转化过程中甚至失败并重试了两次…WTF…
其他奇怪的尝试
刚才都是只上传一个文件,突发奇想,如果上传一个压缩包会怎么样…
它会使用 Python 进行解压。虽然中文的文件名乱码了…但是不重要,这意味着我们可以后续处理多文件的任务了。
and…我刚刚意识到,上传文件并不是一次性的…你在上传第一个文件之后,对话框其实是可以支持继续上传其他文件的…
下载文件看的确是成功了的:
脑子好痒,感觉又打开了什么新的想象力大门…
安全性
官方已经解释了该插件的安全限制:
总体的安全限制是通过沙箱(sandbox)来实现隔离执行,并禁止代码访问外部互联网。可以看出,虽然类似 AutoGPT 的项目给予了 ChatGPT 更多「访问权限」,但 OpenAI 官方在给予其「执行权限」上还是很谨慎的。
局限性
至于其局限性,我在开篇和刚才的演示中也或多或少提到了。
然后,我又又又突发奇想了!既然它的能力是受限于环境中已经存在的 Python 库,那我们直接问问它自己都有哪些库不就好了吗…
同时…我连代码都没必要写,让丫自己写!
显然…它真的写了,也真的执行了…
然后,我就拿到了 OpenAI 为我们提供的所有 Python 库…WTF…
总之,我人已经麻了…它的限制就是,它只能在以上这些库的能力范围内为你工作…但是…ChatGPT 的大脑+这些库的能力,已经足以做很多很多很多事情了吧…
Whatever,改天我再抽空把这些库具体是用作什么的,逐个分析一遍,然后尝试给出更详细的插件能力用法。
数据安全
还记得我在开篇说的关于数据安全的问题吗。现在的顾虑在于,你需要将文件上传到 OpenAI 的服务器进行分析并执行。有没有解决办法呢?
我又又又又又一次突发奇想:你可以上传一份脱敏的 demo 数据,在 ChatGPT 中完成相应的处理,然后要求它把涉及到的代码保存下来。然后你就可以在自己本地处理真实数据了啊!!!
(小插曲:我让它保存文件时,它又写错代码了,并在重试的时候,纠正了自己的错误。)
这是下载到本地的 Notebook 文件:
麻了,想象力过于丰富,脑子 CPU 要烧了。我不敢往下想了。
总之,这应该当前是整个中文互联网下最全的一份 ChatGPT code interpreter 插件测评吧…希望对大家有所帮助。
后续我会继续为大家更新 ChatGPT 插件的用法(甚至开发,不过我还没拿到开发者权限)