OpenAI Code Interpreter 的开源实现:GPT Code UI
本篇文章聊聊 OpenAI Code Interpreter 的一众开源实现方案中,获得较多支持者,但暂时还比较早期的项目:GPT Code UI。
写在前面
这篇文章本该更早的时候发布,但是 LLaMA2 发布后实在心痒难忍,于是就拖了一阵。结合 LLaMA2 的本地私有化部署和运行的能力,接下来这类应用或许都有会一些不同于以往的有趣的玩法,还是非常期待的。
Code Interpreter是一个潜力巨大的功能,或者说方向,不过目前的体验一言难尽,不论是 OpenAI 还是开源软件。
本文中介绍的项目,目前依旧还在早期,不论是实现细节还是架构上都有比较多的这样或那样的问题,但开源世界里,软件的进化,可能会比想象中的要快的多,可以适当保持期待。
演示所使用的容器方案,代码和镜像已经上传至 GitHub 和 DockerHub,有需要的同学可以自取,别忘记“一键三连”:
soulteary/docker-code-interpreter

后续,我会将看到的类似的 Code Interpreter 类型的开源项目都收集到这个项目中,并附加干净 & 稳定的容器镜像。
本篇文章中,我们先来使用社区原版的软件,配合 OpenAI API 或 Azure OpenAI Service,来完成基础的本地 Code Interpreter 的搭建和运行。
GPT Code UI 的镜像使用
想要使用 GPT Code UI,只需要两步:下载镜像,写配置文件后用 Docker 把服务“拉起来”。
下载 GPT Code UI 容器镜像
使用 Docker 下载我们所需要的镜像文件,由于软件处于早期,变动概率较高,这里我推荐使用带有版本号的下载方式,进行 Docker 镜像的下载:
docker pull soulteary/gpt-code-ui:0.42.35
镜像不大,200MB 左右,包含了基础软件和 GPT API 输出代码中常见的 Python PyPI 依赖库。
编写使用 OpenAI API 容器配置
如果你使用的是 OpenAI API 的话,我们可以这样写一个配置文件:
version: "3.8"
services:gpt-code-ui:image: soulteary/gpt-code-ui:0.42.35environment:OPENAI_API_KEY: "YOUR_TOKEN"API_PORT: 5010WEB_PORT: 8080SNAKEMQ_PORT: 8765APP_HOST: "0.0.0.0"# optional: if you want to use proxy# HTTPS_PROXY: "http://host.docker.internal:1234"ports:- "8080:8080"
将上面的内容保存为 docker-compose.yml,然后使用 docker compose up 启动服务。
接着,在浏览器中访问 http://localhost:8080 或者 http://你的IP:8080 就能够看到默认的服务页面了。

界面中的 Kernel is ready. 代表着服务运行就绪,我们可以开始玩了。
额外注意的是,如果你的服务部署在国内,应该需要配置 HTTPS_PROXY 来确保访问 OpenAI API 正常。
编写使用 Azure OpenAI API 容器配置
如果你使用的是 Azure 的 OpenAI API 服务,那么配置需要稍稍调整下:
version: "3.8"
services:gpt-code-ui:image: soulteary/gpt-code-ui:0.42.35environment:OPENAI_API_KEY: "YOUR_TOKEN"OPENAI_API_TYPE: "azure"OPENAI_BASE_URL: "https://YOUR_DOMAIN.openai.azure.com/"OPENAI_API_VERSION: 2023-03-15-previewAZURE_OPENAI_DEPLOYMENT: "gpt-35-turbo"API_PORT: 5010WEB_PORT: 8080SNAKEMQ_PORT: 8765APP_HOST: "0.0.0.0"# optional: if you want to use proxy# HTTPS_PROXY: "http://host.docker.internal:1234"ports:- "8080:8080"
还是将配置保存为 docker-compose.yml,然后使用 docker compose up 启动起来,就可以通过浏览器访问你的服务了。
GPT Code UI 的使用
我估计没有使用过 ChatGPT Code Interpreter 功能的同学,在启动起来服务之后,会有一些懵圈。接下来,我们来一起试试这个服务的基础使用。
想要比较舒服的使用这类软件,我们首先需要一个合适的“数据集”,我从网上随手搜了一个“电视主机游戏销售数据”,你可以在浏览器里打开这个数据集文件,并将数据集保存为 vgsales.csv。
我们在 GPT Code UI 中上传这个数据集后。能够看的程序会自动解析 CSV 数据集中的表头,告诉我们可以用哪些字段来玩。

File vgsales.csv uploaded successfully.
The file contains the following columns: Rank, Name, Platform, Year, Genre, Publisher, NA_Sales, EU_Sales, JP_Sales, Other_Sales, Global_Sales
接着,我们可以随便输入点啥,比如问问它销量前十的游戏是啥:“show top 10 games”。
然后,我们就能够看到它去结合这个数据集,生成的获取销量前十的游戏的代码了:
import pandas as pd
import os# get the most recently uploaded file
files = os.listdir()
files.sort(key=os.path.getmtime)
latest_file = files[-1]# read in the csv file as a pandas dataframe
df = pd.read_csv(latest_file)# show top 10 games by global sales
top_10 = df[['Name', 'Global_Sales']].sort_values(by='Global_Sales', ascending=False).head(10)
print(top_10)# if code modifies or produces a file, print link to download it
print("<a href='/download?file=" + latest_file + "'>Download file</a>")
为了节约我们的时间,程序会尝试自动执行生成的代码。

只要上一步生成的代码可以被正确执行,我们就都能够看的代码执行后的结果,得到我们想要的数据列表:
Name Global_Sales
6112 Wii Sports 82.74
122 Super Mario Bros. 40.24
8322 Mario Kart Wii 35.82
9750 Wii Sports Resort 33.00
705 Pokemon Red/Pokemon Blue 31.37
188 Tetris 30.26
6113 New Super Mario Bros. 30.01
6114 Wii Play 29.02
9751 New Super Mario Bros. Wii 28.62
108 Duck Hunt 28.31
Download file
假设我们不需要复制粘贴文本,想要更直观的看到数据之间的差异,可以试试将结果转换为图表。
方法很简单,给他提一个“draw top 10 games”的需求就好,它会自动分析需求,然后生成一个可以绘图的代码片段:
import pandas as pd
import matplotlib.pyplot as plt# Read the CSV file into a pandas dataframe
df = pd.read_csv("vgsales.csv")# Sort the dataframe by global sales in descending order
df = df.sort_values("Global_Sales", ascending=False)# Get the top 10 games by global sales
top_10 = df.head(10)# Create a bar chart of the top 10 games
plt.bar(top_10["Name"], top_10["Global_Sales"])
plt.xticks(rotation=90)
plt.xlabel("Game Name")
plt.ylabel("Global Sales (millions)")
plt.title("Top 10 Video Games by Global Sales")
plt.show()# Print link to file if generated
print('<a href="/download?file=top_10_games.png">Download file</a>')
尝试执行之后,我们就能够得到更直观的结果啦。

上面的例子,都太过简单了,只是针对单一条件的分析。接下来,我们来试着用组合条件来进行数据分析和图表绘制。
比如我们想要获取销量最高的 PSP 动作类游戏,以往如果写代码的话,我们需要告诉他游戏平台是 PSP,游戏类型是动作游戏,排序方法是按照销量数据量,数据条数选择 10 条。
但是,有了 Code Interpreter 和语言模型之后,我们可以提个简单(含糊)的要求 “draw top 10 PSP action games”,模型就会自己分析数据然后生成可以玩的代码了:
import pandas as pd
import matplotlib.pyplot as plt# read the csv file
df = pd.read_csv('vgsales.csv')# filter for PSP games and action genre
psp_action = df[(df['Platform'] == 'PSP') & (df['Genre'] == 'Action')]# sort by global sales and get top 10
top_10 = psp_action.sort_values(by='Global_Sales', ascending=False).head(10)# create bar chart of top 10 games
plt.bar(top_10['Name'], top_10['Global_Sales'])
plt.xticks(rotation=90)
plt.xlabel('Game Title')
plt.ylabel('Global Sales (in millions)')
plt.title('Top 10 PSP Action Games by Global Sales')
plt.show()print("<a href='/download?file=top_10_psp_action_games.png'>Download file</a>")
只要“动动嘴”,说出你想要的,结果“秒秒钟”就出现在你的眼前了,是不是很方便?

其他
目前这个项目还处于比较早期的阶段,从架构设计上、安全性、性能指标和可扩展性等等方面都有比较多的可完善之处。
你在运行的过程中,可能会出现类似这样或者那样的各种问题,比如:
ModuleNotFoundError Traceback (most recent call last)
Cell In[2], line 42 import pandas as pd3 import numpy as np
----> 4 import dateparser5 import matplotlib.pyplot as plt6 import geopandas as gpdModuleNotFoundError: No module named 'dateparser'
或者一些变量、目录相关的报错,遇到这类问题可以考虑重试下问题,让它再次生成代码,避开之前的坑。
最后
好了,这篇关于开源社区的 Code Interpreter 的介绍就写到这里了。目前,我在同时在积极的为社区的这类项目提供 PR 和建议,希望这类项目能够走的更远。
说起来,自 Code Interpreter 上线后,身边的一众工程师狂喜。然而普通用户似乎并不那么感冒,一如当今已经炙手可热的 ChatGPT,在去年十一月时也只是少数人的狂欢。
个人观点,目前为止它是一个目前依旧被低估的产品,而非一个简单的 Chat 内的工具。多数使用场景,目前还停留在数据分析师和“代码生成和微操优化”上,然而它能带来的远不止如此。
如果你只关注代码,那么你可以当它是一个既能生成代码,又能执行验证,甚至从结果中继续展开的,具备智能的高级程序运行环境。
如果你不在乎代码是如何被生成和执行的,那么你可以当它是官方出品的,一个比 AutoGPT 完成度更高,未来生态和能力更强的高级自动化工具。
如果你不局限于当前的能力,帮助它联上网,让它能够从具体的数据库、知识库中获取信息,以及给予它更强力的代码容器环境,以及更多的 API 访问权限,它会是一个真正的懒人工具:更少的幻觉、更多的准确性和严格的逻辑性,具备执行能力和打通多种软件系统的能力。
–EOF
我们有一个小小的折腾群,里面聚集了一些喜欢折腾、彼此坦诚相待的小伙伴。
我们在里面会一起聊聊软硬件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术资料。
喜欢折腾的小伙伴,欢迎阅读下面的内容,扫码添加好友。
关于“交友”的一些建议和看法
添加好友时,请备注实名和公司或学校、注明来源和目的,珍惜彼此的时间 😄
苏洋:关于折腾群入群的那些事
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
本文作者: 苏洋
创建时间: 2023年07月25日
统计字数: 6415字
阅读时间: 13分钟阅读
本文链接: https://soulteary.com/2023/07/25/open-source-implementation-of-openai-code-interpreter-gpt-code-ui.html
相关文章:
OpenAI Code Interpreter 的开源实现:GPT Code UI
本篇文章聊聊 OpenAI Code Interpreter 的一众开源实现方案中,获得较多支持者,但暂时还比较早期的项目:GPT Code UI。 写在前面 这篇文章本该更早的时候发布,但是 LLaMA2 发布后实在心痒难忍,于是就拖了一阵。结合 L…...
macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载
macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载 本站下载的 macOS Ventura 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也…...
Electron 主进程和渲染进程传值及窗口间传值
1 渲染进程调用主进程得方法 下面是渲染进程得代码: let { ipcRenderer} require( electron ); ipcRenderer.send( xxx ); //渲染进程中调用 下面是主进程得代码: var { ipcMain } require( electron ); ipcMain.on("xxx",function () { } )...
C#设计模式之---建造者模式
建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道…...
output delay 约束
output delay 约束 一、output delay约束概述二、output delay约束系统同步三、output delay约束源同步 一、output delay约束概述 特别注意:在源同步接口中,定义接口约束之前,需要用create_generated_clock 先定义送出的随路时钟。 二、out…...
html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示
一、问题原因 对象存储的域名和你网址的域名不一样,此时用Canvas相关插件 将DOM元素转化为PDF,就会出现跨域错误。 二、解决办法 两步 1. 图片元素上设置属性 crossorigin"anonymous" 支持原生img和eleme组件 2. 存储桶设置资源跨域访问…...
【C#】并行编程实战:异步流
本来这章该讲的是 ASP .NET Core 中的 IIS 和 Kestrel ,但是我看了下这个是给服务器用的。而我只是个 Unity 客户端程序,对于服务器的了解趋近于零。 鉴于我对服务器知识和需求的匮乏,这里就不讲原书(大部分)内容了。本…...
在家下载论文使用哪些论文下载工具比较好
在家下载论文如果不借助论文下载工具是非常艰难的事情,因为很多查找下载论文的数据库都是需要账号权限才可使用的。 例如,我们查找中文论文常用的知网、万方等数据库以及众多国外论文数据库。 在家下载知网、万方数据库论文可用下面的方法:…...
【LeetCode 算法】Handling Sum Queries After Update 更新数组后处理求和查询-Segment Tree
文章目录 Handling Sum Queries After Update 更新数组后处理求和查询问题描述:分析代码线段树 Tag Handling Sum Queries After Update 更新数组后处理求和查询 问题描述: 给你两个下标从 0 开始的数组 n u m s 1 和 n u m s 2 nums1 和 nums2 nums1…...
基于Linux操作系统中的MySQL数据库SQL语句(三十一)
MySQL数据库SQL语句 目录 一、SQL语句类型 1、DDL 2、DML 3、DCL 4、DQL 二、数据库操作 1、查看 2、创建 2.1、默认字符集 2.2、指定字符集 3、进入 4、删除 5、更改 6、练习 三、数据表操作 (一)数据类型 1、数值类型 1.1、TINYINT …...
【Matlab】基于BP神经网络的数据回归预测新数据(Excel可直接替换数据)
【Matlab】基于BP神经网络的数据回归预测新数据(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码5.1 main.m5.2 NewData.m6.完整代码6.1 main.m6.2 NewData.m7.运行结果1.模型原理 基于BP神经网络的数据回归预测是一种常见的机器学习方法,用于处…...
HTTPS连接过程中的中间人攻击
HTTPS连接过程中的中间人攻击 HTTPS连接过程中间人劫持攻击 HTTPS连接过程 https协议就是httpssl/tls协议,如下图所示为其连接过程: HTTPS连接的整个工程如下: https请求:客户端向服务端发送https请求;生成公钥和私…...
redis启动失败,oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
在redis文件夹下,启动redis正常。 但是加入到system后启动redis失败。 一直处于starting状态。 对比正常redis服务的配置之后,把redis.conf里的守护进程关掉就可以了(但是没用system管理之前,直接./redis.server启动是可以的&…...
milvus: 专为向量查询与检索设计的向量数据库
1. 什么是milvus? milvus docs milvus release Milvus的目标是:store, index, and manage massive embedding vectors generated by deep neural networks and other machine learning (ML) models. Milvus 向量数据库专为向量查询与检索设计…...
【C# 数据结构】Heap 堆
【C# 数据结构】Heap 堆 先看看C#中有那些常用的结构堆的介绍完全二叉树最大堆 Heap对类进行排序实现 IComparable<T> 接口 对CompareTo的一点解释 参考资料 先看看C#中有那些常用的结构 作为 数据结构系类文章 的开篇文章,我们先了解一下C# 有哪些常用的数据…...
智慧园区楼宇合集:数字孪生管控系统
智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施,以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网,实现数据的传输、共享和响应,提高园区的管理效率和运营效益,为居…...
Ajax 黑马学习
Ajax 资源 数据是服务器对外提供的资源,通过 请求 - 处理 - 响应方式获取 请求服务器数据, 用到 XMLHttpRequest 对象 XMLHttpRequest 是浏览器提供的js成员, 通过它可以请求服务器上的数据资源 let xmlHttpRequest new XMLHttpRequest(); 请求方式 : get向服务器获取数据…...
软件应用开发的常见环境
一般来说,在小型项目中可能只有开发环境和生产环境;在中型项目中会有开发环境、staging environment、生产环境;在大型项目中会有开发环境、测试环境、staging environment、生产环境。 一、Dev Env / Development Environment 开发环境 开…...
Rust中的iter(), into_iter(), iter_mut()
在Rust中,iter(), into_iter(), iter_mut()都是用于在集合类型上创建迭代器的方法。这三个方法各有不同,下面一一进行介绍。 iter(): iter() 方法创建一个不可变的引用迭代器。当你只想读取集合中的元素,而不想改变它们或消耗集合时ÿ…...
[SQL挖掘机] - 日期函数 - current_date
current_date函数时,它通常被用来获取当前的日期。它返回一个表示当前日期的日期值。 current_date函数没有任何参数,因此只需简单地调用它即可获得系统当前日期。 以下是一个示例: select current_date;这将返回当前日期,例如…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
