OpenAI Code Interpreter 的开源实现:GPT Code UI

news2024/10/9 10:37:30

本篇文章聊聊 OpenAI Code Interpreter 的一众开源实现方案中,获得较多支持者,但暂时还比较早期的项目:GPT Code UI。

写在前面

这篇文章本该更早的时候发布,但是 LLaMA2 发布后实在心痒难忍,于是就拖了一阵。结合 LLaMA2 的本地私有化部署和运行的能力,接下来这类应用或许都有会一些不同于以往的有趣的玩法,还是非常期待的。

Code Interpreter是一个潜力巨大的功能,或者说方向,不过目前的体验一言难尽,不论是 OpenAI 还是开源软件。

本文中介绍的项目,目前依旧还在早期,不论是实现细节还是架构上都有比较多的这样或那样的问题,但开源世界里,软件的进化,可能会比想象中的要快的多,可以适当保持期待。

演示所使用的容器方案,代码和镜像已经上传至 GitHub 和 DockerHub,有需要的同学可以自取,别忘记“一键三连”:

soulteary/docker-code-interpreter

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.35
    environment:
      OPENAI_API_KEY: "YOUR_TOKEN"
      API_PORT: 5010
      WEB_PORT: 8080
      SNAKEMQ_PORT: 8765
      APP_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 就能够看到默认的服务页面了。

开源 Code Interpreter 服务就绪

界面中的 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.35
    environment:
      OPENAI_API_KEY: "YOUR_TOKEN"
      OPENAI_API_TYPE: "azure"
      OPENAI_BASE_URL: "https://YOUR_DOMAIN.openai.azure.com/"
      OPENAI_API_VERSION: 2023-03-15-preview
      AZURE_OPENAI_DEPLOYMENT: "gpt-35-turbo"
      API_PORT: 5010
      WEB_PORT: 8080
      SNAKEMQ_PORT: 8765
      APP_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>")

为了节约我们的时间,程序会尝试自动执行生成的代码。

程序获取到的 TOP 10 列表

只要上一步生成的代码可以被正确执行,我们就都能够看的代码执行后的结果,得到我们想要的数据列表:

                           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>')

尝试执行之后,我们就能够得到更直观的结果啦。

程序生成到的 TOP 10 图表

上面的例子,都太过简单了,只是针对单一条件的分析。接下来,我们来试着用组合条件来进行数据分析和图表绘制。

比如我们想要获取销量最高的 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>")

只要“动动嘴”,说出你想要的,结果“秒秒钟”就出现在你的眼前了,是不是很方便?

程序生成到的 TOP 10 PSP 动作游戏图表

其他

目前这个项目还处于比较早期的阶段,从架构设计上、安全性、性能指标和可扩展性等等方面都有比较多的可完善之处。

你在运行的过程中,可能会出现类似这样或者那样的各种问题,比如:

ModuleNotFoundError                       Traceback (most recent call last)
Cell In[2], line 4
      2 import pandas as pd
      3 import numpy as np
----> 4 import dateparser
      5 import matplotlib.pyplot as plt
      6 import geopandas as gpd

ModuleNotFoundError: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/790398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

插件使用权限管理软件(一)框架选择和Furion框架搭建

项目背景 软件主要服务于传统设计院&#xff0c;用于管理和监控设计院内部插件的使用权限和使用情况。可根据使用的频率来对插件使用情况的分析。后续可以加上错误报告等提测报告&#xff0c;使整个监控插件使用情况更加流程化。由于博主主要做CAD和Revit的二次开发工作&#x…

【力扣每日一题】2023.7.25 将数组和减半的最少操作次数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个数组&#xff0c;我们每次可以将任意一个元素减半&#xff0c;问我们操作几次之后才可以将整个数组的和减半&…

实例025 带分隔栏的窗体

实例说明 在软件开发中&#xff0c;经常需要将界面分成几个部分&#xff0c;而且这几个部分又可以自由调整大小。运行本例&#xff0c;实例效果如图1.25所示。 技术要点 在.NET 2.0框架中可以非常轻松的实现这一功能&#xff0c;只要在窗体中加入SplitContainer控件即可。Sp…

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现&#xff1a; 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…

Cesium态势标绘专题-自由多边形(标绘)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

红外雨量计(光学雨量传感器)调试

红外雨量计&#xff08;光学雨量传感器&#xff09;调试 红外雨量计是一种用来测量雨量的传感器&#xff0c;它通过红外线的反射来检测雨滴的落下。为了调试红外雨量计&#xff0c;你需要参考以下步骤&#xff1a; 1. 确认传感器的电源接线正确。检查传感器的接线是否正确&…

软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作&#xff0c;如ER图、数据流图、状态转换图、数据字典的书写等&#xff0c;对初学者来说比较生僻&#xff0c;本贴只介绍基础的轮廓&#xff0c;后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法&#xff1a;结构化的分析、设计、…

GBASE南大通用出席CCF第38届中国计算机应用大会

在数据要素市场化分论坛上&#xff0c;GBASE南大通用高级副总裁赵伟发表“以自主可控的国产基础软件新兴技术保障数据要素安全高效流通”的主题演讲&#xff0c;向参会嘉宾分享基于GBASE数据库的自主可控国产软件&#xff0c;保障数据要素安全流通、高效流转的创新实践。 赵伟讲…

基于STM32设计的智能奶瓶

一、项目背景 随着我国计划生育政策的放开,婴幼儿数量持续上涨,国民收入逐年提高,家庭在婴幼儿产品方面的消费日益扩大。奶瓶是母婴市场的刚需。目前婴儿哺育的问题引起新爸新妈的高度重视。一方面,人们使用的传统奶瓶已经不能很好地满足现代人对于智能化生活的需求。另一…

C语言非常道 6.4习题解答

关于 #include “stdarg.h” 相关知识小结&#xff1a; 函数&#xff1a;tppedef va_list char * ; va_list al; va_start(al, fmt) 使 al 指向变参函数中最后一个已知参数&#xff08;从右往左数的第一个已知参数&#xff09; va_arg(两个参数&#xff09;&#xff0c;第一个…

事件循环和生命周期

事件循环和生命周期 js是单线程主要说的是 js引擎线程只有一个主线程这个线程跟GUI线程是互斥的 GUI线程是绘制html css js也可修改这部分所以互斥 https://segmentfault.com/a/1190000023315304 https://www.jianshu.com/p/71544067d3a3 https://zhuanlan.zhihu.com/p/359…

【Unity组件扩展】减少Image的渲染

需要实现透明遮罩功能&#xff0c;如点击任意关闭界面、透明遮挡不让点击等&#xff0c;一般可以添加Image组件&#xff0c;然后将alpha值设置为0。不过&#xff0c;在Unity2018.4.3.6f1及之前的老版本中&#xff0c;这样的做法会增加DC和增加overdraw。 可以继承Graphic重写O…

基于Javaweb+Vue3实现淘宝卖鞋前后端分离项目

前端技术栈&#xff1a;HTMLCSSJavaScriptVue3 后端技术栈&#xff1a;JavaSEMySQLJDBCJavaWeb 文章目录 前言1️⃣登录功能登录后端登录前端 2️⃣商家管理查询商家查询商家后端查询商家前端 增加商家增加商家后端增加商家前端 删除商家删除商家后端删除商家前端 修改商家修改…

【Python从入门到人工智能】14个必会的Python内置函数(7)——数据格式化处理 综合应用场景

总觉得忍一忍就会好起来。真笨&#xff0c;人家不就是觉得你会忍一忍&#xff0c;所以才这样对你吗&#xff1f;当我们凶狠地对待这个世界的时候&#xff0c;才会发现这个世界&#xff0c;突然变得温文尔雅了。——余华《在细雨中呼喊》 &#x1f3af;作者主页&#xff1a; 追光…

ElementUI 实现动态表单数据校验(已解决)

文章目录 &#x1f34b;前言&#xff1a;&#x1f34d;正文1、探讨需求2、查阅相关文档&#xff08;[element官网](https://element.eleme.cn/#/zh-CN/component/form)&#xff09;官方动态增减表单项示例3、需求完美解决4、注意事项 &#x1f383;专栏分享&#xff1a; &#…

Hello,Vector DB|可能是最易上手的 Faiss 教程

大家会不会有这样的疑问&#xff1a; 网易云音乐是如何根据我的音乐口味推荐相似歌曲的&#xff1f;淘宝是如何判断我的购买喜好的&#xff1f;手机相册又是如何识别照片中的人脸&#xff0c;并将同一个人的照片归为同一组的&#xff1f; 其实&#xff0c;实现这一切的背后技术…

【nginx】nginx之location规则详解:

文章目录 一、语法规则&#xff1a;二、优先级&#xff1a;三、验证&#xff1a;1、精确匹配&#xff1a;2、通过^~方式实现匹配&#xff1a;3、通过”~”方式实现匹配&#xff1a;4、通过"~*"方式实现匹配:5、”!~*” 和”!~” 不常用&#xff0c;再次不做介绍6、通…

JWT token

一、为什么使用JWT&#xff1f; 随着分布式web应用的普及&#xff0c;通过session管理用户登录状态成本越来越高&#xff0c;因此慢慢发展成token的方式做登录身份验证&#xff0c;然后通过token去取redis中的缓存的用户信息&#xff0c;随着之后jwt的出现&#xff0c;校验方式…

vue/cli 自定义配置

vue/cli 自定义配置 1、更改默认的端口号8080 只需要更改vue.config.js文件 1、更改默认的端口号8080 只需要更改vue.config.js文件

2023年基准Kubernetes报告:6个K8s可靠性失误

云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面&#xff0c;但大多数组织预计今年的云使用和支出将与计划的相同&#xff08;45%&#xff09;&#xff0c;或高于计划的&#xff08;45%&#xff09;…