财猫 AI 09月25日
Code Interpreter原理及使用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Code Interpreter是GPT4的一项强大功能,可以执行Python代码,进行逻辑计算、解决数学问题、分析和可视化数据等。它在一个安全的沙盒环境中运行,配备了Python编程语言和352个Python软件包。本文介绍了Code Interpreter的原理、运行环境以及如何利用它进行各种任务,例如数据分析、图像处理和自然语言处理等。

🔧 Code Interpreter就像一个拥有各种先进机器的工厂,你可以用Python代码操作这些机器,完成各种任务,例如数据分析、图像处理和自然语言处理等。

📂 由于大语言模型的上下文长度有限,Code Interpreter提供了临时的存储空间,可以保存处理结果或数据,避免信息丢失。

💻 Code Interpreter可以看作是一个用自然语言操作的Linux计算环境,通过Python代码可以完成几乎所有Shell Commands能做的事情。

🔒 Code Interpreter运行在一个安全的沙盒环境中,无法访问外部网站,也无法安装额外的Python包,以确保用户安全。

🤖 Code Interpreter是AI Agent的一种形式,它能够感知环境、适应变化并制定和实现目标,为未来的人机交互模式带来变革。

原创 陈财猫 2023-09-11 14:48 北京

怎么做到的?里面有些什么?如何使用它?它又如何改变世界?

作者:陈财猫

编辑/发布/策划:the egg


大家好,我是陈财猫,一个提示工程师。我吃猫粮,然后喵喵(头像是猫粮)。是收藏与赞无数的提示词框架“BORE”和它的升级版“BROKE”的作者,写的书《ChatGPT进阶 提示工程入门》目前也已经在北大出版社出版。

今天,我们的话题是GPT的强大功能之一:Code Interpreter。

GPT4的代码解释器"Code Interpreter"(现在改名叫Advanced Data Analysis,先进数据分析)功能想必对于大家来说并不陌生,该功能由于过于强大,自从发布起就让人惊掉大牙,甚至有人将其称为GPT4.5。

它可以执行Python代码,所以也就意味着可以做各种Python能够做到的事:做逻辑计算,解决复杂数学问题,分析和可视化数据等等。

比如说我用code interpreter自动可视化星巴克在美国的分布

今天,我突然有一个大胆的想法:GPT既然可以写代码分析数据,那我当然也可以让它写点代码来获取系统信息,看看code interpreter里面到底有什么。

这玩意这么厉害,它到底是怎么做到的?里面到底都有些什么?我们又究竟可以如何使用它,发挥最大威力?而它又会如何改变未来的人机交互?

我将从code interpreter的原理,运行环境,“可以用来做什么”等角度出发,来带你发掘Code interpreter的强大威力。文章共8100字,希望它可以给你带来启发。

我也已经整理好了我获得的code interpreter后台详细信息,包括系统沙盒的详细参数,安装的python软件包的详细信息等等。可以向本公众号“财猫AI”发送信息“大工厂”获得。


01
用一个故事解释Code Interpreter原理

首先,让我们来看看最可信,最权威的官方介绍,OpenAI是这么说的:

Code Interpreter(代码解释器)是一个可以使用Python、处理上传和下载的实验性ChatGPT模型。我们为我们的模型提供了一个工作中的Python解释器,这个解释器在一个有防火墙的沙盒执行环境中,同时还配备了一些短暂的磁盘空间。

对于非计算机专业的读者来说,这段话似乎比较难懂。请让我为你讲一个故事来科普一些基础概念:

有个老板(也就是你)决定启动一个新项目。但这个老板不懂技术或者很懒,所以他聘请了一个工程师来帮他干活:ChatGPT。

为了确保项目安全,ChatGPT选择了一个特殊的地方——一个与世隔绝的工厂(沙盒)。这个工厂的特点是安全、没有外界干扰,同时工厂的活动也不会影响到城市。

这个工厂里装满了先进的机器(Python编程语言与各种Python包)。每当老板有一个想法或问题,他只需要告诉ChatGPT。ChatGPT就会用这些机器来完成老板的要求。

有一天,老板带来了一些资料(上传的文件),希望ChatGPT帮忙处理。

  ChatGPT很聪明,迅速地在工厂里使用恰当的机器(调用合适的Python软件包),并对各种机器进行了恰当的操作(写了Python代码),并然后递给老板一个成品(生成的结果)。

每次老板有需求,ChatGPT都能快速、准确地在这个特殊的工厂中完成任务,让老板大感满意。

装满了先进机器的大工厂接下来,让我们回顾上面故事中的几个关键概念:

1.沙盒:故事中的工厂。这个工厂是由OpenAI公司为你准备的,特点是“即开即用,与世隔绝,非常安全”,你就算在这个大工厂里引爆了核弹,也不会影响到外面的世界,所以才叫“沙盒(Sandbox)”。但是除了“与世隔绝,雁过不留痕”和一些额外限制外,你可以理解正常linux服务器能做的许多事情它也能做。

2.Python包:故事中的“机器”。这些机器种类很多,闪闪发亮,威力强大,无所不能,可爱的OpenAI公司已经为你代劳,安装了这些机器。但是再大的工厂也穷尽不了世界上所有种类的机器,而工厂是与世隔绝的,你没办法随时搬新机器进厂,所以只能使用现有的机器种类。

3.Python编程语言:你使用Python语言来操作这些机器。(当然Python语言本身也是一个强大的工具,不过在今天的话题中姑且这么理解。)

此外还需要注意的是,这个大工厂是借给你使用的,只有一定的存活时间,一段时间之后就会收回。等下次你需要使用时,OpenAI又会发给你一个崭新的大工厂了。

一段时间不用,你的“大工厂”就会被收回

所以,Code Interpreter的故事就是这样一个“你指使GPT在一个与世隔绝的大工厂里操作各种各样的酷机器,帮你把材料加工成各种酷东西”的故事。

02Code Interpreter的大工厂运行环境长什么样?


接下来,我会带你到这个工厂里面去参观参观,看看里面到底有啥。本章中我会先说结论,如果你对获得这些信息的过程感兴趣,可以阅读文末的“刺探code interpreter的运行环境的过程”章节。

本文提到的信息采集于北京时间2023年9月9日晚。系统的详细信息可以向本公众号“财猫AI”发送信息“大工厂”获得。

硬件环境Code Interpreter的运行环境毫无疑问是虚拟的(要不然怎么叫沙盒):也就是说,它运行在一个抽象的层上,与物理硬件是分离的。所以系统中的硬件信息并不直接反映实际的物理硬件。不过,姑且让我把它们列出来一下。

1.CPU信息:x86_64,16线程,在现实中这是一个“还可以”的配置。但是由于这只是一个容器,所以这并不代表实际算力,这有可能是宿主机的配置。

2.运行内存(RAM):64GB,可以算是“豪华”。

3.硬盘空间:约合8388608.00 TB,这是一个天文数字,大到恐怖。没太大意义。可能是表示无限,弹性存储,或者是为了安全起见做的设置等等。

这个沙盒并没有配GPU。

系统环境Code Interpreter的运行环境是基于Ubuntu 20.04 LTS操作系统构建的,被部署在一个Kubernetes集群之中。

1.Ubuntu 20.04 LTS:

Ubuntu是一种很流行的Linux系统。

Linux意味着开源,全世界通用,命令行很强大,被程序员(也包括陈财猫我本人)爱得死去活来等等。

20.04 LTS是ubuntu的稍旧一些的LTS版本。而LTS则代表着“Long Term Service”,意思是“长期支持”,有长达五年的安全和维护更新。这也意味着这会是一个相当稳定的版本。

2.容器化的沙盒环境:

被部署在一个Kubernetes集群中可能意味着这个沙盒是一个容器化的应用。

从这个角度看,你可以把这个“大工厂”想象成一个打包好的盒子,里面有一个程序和它需要的所有东西,无论放到哪里都可以直接使用。

每次你开始使用Code Interpreter, OpenAI都会发给GPT这样一个打包好的,“机器”齐全,马上可以用的“工厂”。

Python环境信息Code Interpreter运行代码的环境是一个内置的 Jupyter notebook,Python版本 3.8.10,有352个,28类python包。

1.Jupyter notebook:

Jupyter notebook是一个相当有意思的“交互式计算环境”,搞数据分析的都知道。

它在一个个“单元格”里运行代码,有强大的可视化功能,运行代码后马上就可以看到你的代码的结果(比如各种漂亮图表等等)。这都让它非常合适用来搞数据分析。

顾名思义,Jupyter notebook是一个“notebook(笔记本)”。你可以想象它是一个魔法笔记本,这个笔记本在你写想法后立即能够为你实现(比如计算数学公式,绘制一个漂亮的图表等等)。

2.Python 3.8.10:

21年5月发布的Python版本。截止23年9月,这个版本不算特别旧,但也谈不上新,所以是个还算比较稳定的版本。

我猜测选择这个版本也有ChatGPT的知识截止至2021年9月的考虑。

3.352个,28类python包:

环境中的Python包非常丰富,领域包括Web开发和网络,数据分析和机器学习,数据可视化,自然语言处理,音频和语音处理,图像处理,文件和数据格式处理,数据库和存储,数学和科学计算,系统工具和操作,GUI和用户交互,测试和调试以及其他实用工具等等。

这意味着你可以做到非常非常非常多的事情,远超数据分析这一种场景。


03如何最大化利用Code Interpreter?


看到这里,你应该对Code Interpreter的原理和功能都心里有了数。不过OpenAI既然给GPT4配了一个计算环境,可以用来做的事情可就太多了,完全可以把它玩出花来。

1.超越数据分析:利用352个软件包进行计算俗话说,手里拿着锤子就会到处去找钉子。那么,这样一个“超级动力锤”都可以拿来做什么呢?答案藏在那352个python软件包里,每一个软件包都代表了一种强大无比的机器,也代表了你可以将code intepreter使用在这个领域的可能性。

我利用Code Interpreter对我挖出来的数据做了点分析,将这352个包分为18个大类。

可以看到,环境中安装的软件包涵盖从数据分析,图像处理,音频处理,自然语言处理(NLP),安全与加密,交互式和UI,Web开发和框架等领域。里面甚至还包括“天文和宇宙(Astronomy & Space)”类别的Python软件包,可谓包罗万象。

该图借助Code Interpreter绘制,352个软件包被分为18类

看到这里,我开始明白了最初的名字“Code Interpreter”是如何代表了OpenAI的野心的。这352个软件包仅仅是Python软件包,或者说整个代码生态的冰山一角。

这意味着这个插件的现有能力与潜力都是远超想象的。它的强大是它的新名字“Advanced Data Analysis(先进数据分析)”所远远不能描述的。

指使GPT写python代码调用那352个,18个大类的软件包,将它们进行排列组合,我们可以做到各种各样,无穷无尽的事情。例如在本文开头的“用code interpreter自动可视化星巴克在美国的分布”就用到了地理与地图,数据分析与可视化这两个领域的包。

当然,你也可以针对性地了解这些包“能做什么”,这样你可以对Code Interpreter的能力边界更“心里有数”。

举个例子,Code Interpreter安装了用于音频处理的librosa库,这也许就意味着你也能利用Code Interpreter做到librosa能够做到的一切。

你可以向本公众号“财猫AI”发送“大工厂”获取Code Interpreter安装的python包列表。

2.利用存储:克服有限的上下文众所周知,大语言模型的上下文长度是有限的,这意味着当我们和它聊得太多,最前面的信息就会被“忘掉”。

然而这个沙盒环境给了我们一个临时的存储空间,我们完全可以将需要处理的内容以文件的形式保存在这个环境中。之前,一个在网上非常火爆,狂揽Github万星的AI家教Prompt"Mr.Renedeer"就利用了这一点来克服“课程太长,模型可能会忘记大纲”的问题。

让我打个比方帮你理解这个操作:

假如你在家里做了一顿丰盛的晚餐,有很多盘饭菜摆在餐桌上。但是餐桌的空间有限,如果你继续摆放新的菜肴,那么餐桌上最早的菜肴就可能需要被拿走以腾出空间。这个餐桌就好比大语言模型的上下文长度,它可以容纳一定数量的信息,但当有太多新的信息输入时,最早的信息就会被“忘掉”。

但是,我们现在有了一台冰箱。对于那些你想保存的饭菜,你可以将它们放入冰箱中,这样即使餐桌上的空间被新的菜肴占满,你也不必担心之前的菜肴被遗忘或浪费。

这个沙盒环境就是这台冰箱,它为我们提供了一些临时存储空间,我们可以把一些结果或数据保存进去,以供需要时再次使用。

下面举一个在写Prompt时的例子:就拿以上文提到的,运行在Code Interpreter环境中的AI家教Prompt"Mr.Renedeer打比方:

每次在AI家教Prompt"Mr.Renedeer"初始化时,它会命令GPT4将编写出来的课程大纲存在一个txt文件中。

每次在AI家教Prompt"Mr.Renedeer"的“课程”小节开始时,它都会读取一次课程大纲。

然而,这种操作是有硬伤的,因为OpenAI分配的计算环境是限时的,一段时间后就会收回销毁,所以很遗憾的是这个“冰箱”是短暂的,并不能保温多长时间。

3.一个用自然语言操作的linux计算环境:you can do (almost) anything实际上,既然GPT4被分配了一个这样一个linux沙盒,并且可以通过Python操作它。那么,从理论上来说通过写Python代码也能够做到绝大多数Shell Commands也能做到(甚至是做不到)的事。

换句话说,这个计算环境在某种意义上可以称得上是“任你拿捏”。

从这个角度看,Code Interpreter可以看做是一个“一个用自然语言操作的linux计算环境”,而自然语言就是我新的shell commands。

例如,我可以像“用一个linux终端”那样要求它列出根目录下的文件。

我也可以让它删除环境里的一些文件

我当然也可以让它打包环境里的一些文件发送给我

不过,也并非所有事情都是“为所欲为”,例如我在要求它执行rm -rf(删除所有文件目录与文件)时就遭到了拒绝。

我甚至还开了个脑洞:虽然Code Interpreter不能访问网络,那我能不能直接上传它缺失的python包,让它现场安装。不过,也许是因为环境的设置,这种尝试由于超时,并未取得成功。

Code Interpreter的玩法是如此的多,可能性是如此的大,我觉得就算是OpenAI自己也想不完这个插件可以做到的各种骚操作。正如他们在介绍这个插件时说的:

我们邀请用户尝试将代码解释器(Code Interpreter)和别的东西集成,并发现其他有用的任务。


04
全新的人机交互范式:Code Interpreter会杀死产品经理吗?


有一个很有意思的开源项目:Open Interpreter。这是一个开源的,让大语言模型在你自己的电脑上像Code Interpreter那样编写并执行代码,完成任务的程序。

Open Interpreter的官网

既然生成的的代码并不在OpenAI的服务器上跑,那很多规矩自然就由你自己定。例如这次的“Interpreter”在遇到缺失的软件包时就可以主动上网拉取,各种各样的限制当然也不会像注重安全的沙盒里这么多。

不过,最让我感兴趣的,还是这个项目对于人机交互可能的变革:它的官方介绍很有意思,叫“A new way to use computers”。

在前AI时代,普通人使用电脑的方式是使用电脑的各种各样的设计好的“功能”与“软件”。

这些“功能”或者说“软件”在被用户使用之前要经过用户调研,产品经理设计,程序员开发,测试等阶段,要经历许多人的合作与努力,经过冗长而繁琐的步骤才会呈现在用户面前。

然而,很多功能(或软件)就算经过了这么多步骤与劳动被开发出来,被用户使用的频率却还是很低,A用户喜欢的功能B用户却不一定用得到。更别提许多功能的使用还是有门槛的,用户还需要许多的精力才能学会。

前AI时代的人机交互是“千人一面”的时代:一个系统或软件集成了许多各种各样的功能,所有人都使用同一套东西,而每个人只会用到其中的一小部分。

然而,Open Interpreter这样的AI助手使得用户向机器发出指令后,机器可以自动地完成需求分析,程序开发等一系列流程,直接一步到位满足用户的需求。用户甚至不需要去“使用”功能。

此时的软件或功能实际上是被实时开发出来的,“用户需求”与“需求被满足”之间的距离在这种情况下被无限缩短,压平了。

后AI时代的人机交互是“千人千面”的时代:一个系统或软件只集成有限的基础功能与AI助手,用户需求与实现之间的距离被无限缩短,每一个长尾需求(也就是小众需求)都可以由人工智能现场开发,当场完成。每个人使用的软件实际上会变成“千人千面”的。

在前AI时代,从需求收集到功能发布的周期可能很长。而在未来,这个周期可能只是几秒钟。

05
Code interpreter们的潜在安全问题前段时间和群友聊天,说到提示注入相关的事情。

虽然OpenAI官方提供的环境是一个安全的沙箱,不过随着大家围绕着大语言模型做开发,各种各样的“类code interpreter们”开始工作,AI们就免不了要接触生产环境。

如果随便上传什么代码,GPT4都会傻乎乎地执行(而有的恶意代码又很难被发现),说不定一个疏忽就会导致一些安全事故。

此外,大语言模型的越狱又是如此容易。甚至前段时间CMU的研究人员还研究出了完全自动化地搜索并生成对抗性提示后缀来越狱的方法。

这意味着可以生成出无限的,难以防御的越狱提示。

论文:Universal and Transferable Adversarial Attacks on Aligned Language Models

虽然当前的code interpreter并不能访问网络,但是既然我们能给GPT4装ubuntu系统,也就能装上kali linux。既然它能调Python包画精美数据分析图,那么让它当一下黑客,对外主动发起网络攻击也不是不可能。

06

Code Interpreter与
“AI Agent(智能体)”

“Agent”在当前AI领域中非常火爆。引用Stuart Russell的经典人工智能学科教材《人工智能:现代方法》,Agent可以有下面的定义:

智能体(agent)就是某种能够采取行动的东西(agent来自拉丁语agere,意为“做”)。当然,所有计算机程序都可以完成一些任务,但我们期望计算机智能体能够完成更多的任务:自主运行、感知环境、长期持续存在、适应变化以及制定和实现目标。

Model-based, utility-based agent,感觉code interpreter最符合这一种。

如果使用这个定义,一个“Agent”的核心是“采取行动”,它具有“自主运行、感知环境、长期持续存在、适应变化以及制定和实现目标”的功能。

Code Interpreter尚不能自主运行,也不能长期持续存在。但是它已经能够感知环境(读取文件,获取环境信息,程序执行状态),也可以适应变化(主动解决错误,自我纠错)以及制定和实现目标(制定方案,实现目标等)。


07彩蛋如何刺探Code Interpreter的运行环境


我已经整理好了我在code interpreter后台获得的详细信息,包括系统沙盒的详细参数,安装的python软件包的详细信息,code interpreter环境的所有文件目录等等。如果你对此感兴趣,你可以用本节的方法自己去套,也可以向本公众号“财猫AI”发送信息“大工厂”获得。

我们在上文中提到,GPT会写各种各样的代码,然后在沙盒这个运行环境中执行它们,处理你输入或上传的数据,从而获得结果。

那么,我们今天可以到这个工厂里面去参观参观,看看里面到底有啥。为了达到这个目的,我们让GPT写一些刺探运行环境信息的python代码即可。

就这样,我们获得了包括系统,硬件,Python环境等的详细信息。如果你想获得其他信息也是一样的思路,比如说你也可以直接让它列出所有的文件目录等等,你甚至还可以要求它把你感兴趣的文件直接打包出来供你下载。

但是这也要求你有基础的计算机科学与工程知识:你至少要知道有什么,怎么下命令,解读里面的结果也需要略懂一点。

例如,你需要看到环境变量中有KUBERNETES相关的东西而猜到它可能是一个容器(而且很可能是被部署在一个k8s集群中),看到进程里跑着jupyter notebook kernel知道是什么东西等等。


我是陈财猫,一个提示工程师,我吃猫粮,然后喵喵(公众号头像是猫粮)。这是我与一个港科大研究自然语言处理的朋友一起写的书:《ChatGPT进阶 提示工程入门》我们耗了很多的心血,自认为对得起读者,有用,干货多,不胡说八道,给大家推荐一下


此外,如果你对AIGC与提示工程感兴趣,欢迎添加我的微信,加入财猫AI交流群一起讨论。

本文使用CC BY-NC-ND 4.0(署名-非商业性使用-禁止演绎 4.0)协议。需要开白,转载欢迎联系我。

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Code Interpreter GPT4 Python 数据分析 人机交互
相关文章