让没有 ChatGPT Plus 会员的小伙伴也能用上低配版代码解释器(Code Interpreter)功能,秘诀就是自己造轮子,话不多少,先看效果,然后我会讲解具体实现,最后送上源码。
硬核教程!手把手教你开发自己的 ChatGPT 代码解释器插件
我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
效果演示
执行代码
按照需求写代码并自动进行代码功能测试验证,比如写一个限流算法
数据分析
获取国家统计局下载各省年度 GDP 数据,直接上传文件比较四个直辖市 GDP 数据
实现原理
代码解释器(Code Interpreter)实际上就是一个 REPL(读取-评估-打印循环),例如给它一个文件(例如 CSV 文件),然后可以要求它转换文件或从文件中提取一些信息,甚至使用该文件作为计算的输入。既然已经有 API(GPT-4 和 GPT-3.5) 可用于访问代码解释器的底层模型,再叠加 Prompt 工程,是存在构建自己本地版本的可能的,即 REPL + LLM ,一个通过执行代码来完成日常任务的个性化工具,下面就是应用架构 👇
Jupyter kernel process 解释
-
Jupyter 内核与具体语言无关
-
它提供了一个计算内核,相当于一个可以执行代码的环境
-
这个内核通过一种协议与外界交互,这种协议将用户的标准输入(stdin)连接到内核的 REPL(Read Evaluate Print Loop,读取评估打印循环)
-
内核执行代码后,将执行结果、标准输出(stdout)和标准错误(stderr)反馈回来,显示给用户
-
通过这种协议,Jupyter 内核可以执行任何语言的代码,并将执行结果返回给用户
Jupyter 内核协议主要定义了
- 消息类型:stdin、stdout 等不同类型的消息格式
- 消息封装:使用 JSON 格式封装消息
- 通信模式:请求-回复、推送等模式
- 接口方法:内核需要实现的接口方法,如执行代码、代码完成等
在这一协议基础上,可以用任意通信机制来实现内核和客户端之间的交互,这里采用了 snakeMQ(Python 实现的消息队列库),理论上也可以用 HTTP 请求、用 WebSocket 等实现。
整体执行流程
- 用户在页面输入指令,发送到 Flask 应用后端
- 后台结合设计好的 Prompt 将用户的指令转换后发送到 LLM
- 获得 LLM 的响应(代码内容)后,Flask 通过 SmakeMQ 将代码内容发送到 Jupyter 内核
- Jupyter 执行后,将结果通过 Flask 接口返回到(Stream 流的方式)前端
- 页面展示结果
Python 包制作
最后将使用 React 构建的 SPA 打包到 Python 包中,再把这个 Python 包发布到 PyPI。这个思路借鉴了 Streamlit,但是技术细节上不同,Streamlit 原先用的是 CRACO 来配置 React 应用,这里使用更先进的 Vite 来打包 SPA。简单来说,就是将前端代码打包到后端 Python 包中,以实现前后端集成部署。
名词解释
- SPA:Single Page Application 网页单页应用
- CRACO:Create React App Configuration Override,一种工具,可以修改 Create React App 生成的默认配置,让开发者可以自定义配置
- Vite:一种新型前端构建工具,能够显著提升前端开发体验
- Streamlit:一个开源应用程序框架,旨在简化为机器学习和数据科学构建 Web 应用程序的过程
支持的功能列表
- 文件上传
- 文件下载
- 多轮对话(上下文感知意图)
- 生成代码
- 运行代码(Jupyter 内核)
- 模型切换(GPT-3.5 和 GPT-4)
源码获取
源版本的实现是不支持中文的,传送地址 👉 https://github.com/ricklamers/gpt-code-ui
如果觉得内容不错,欢迎关注,点赞和收藏~