手把手教你开发自己的 ChatGPT 代码解释器

让没有 ChatGPT Plus 会员的小伙伴也能用上低配版代码解释器(Code Interpreter)功能,秘诀就是自己造轮子,话不多少,先看效果,然后我会讲解具体实现,最后送上源码。
硬核教程!手把手教你开发自己的 ChatGPT 代码解释器插件

效果演示

执行代码

按照需求写代码并自动进行代码功能测试验证,比如写一个限流算法

数据分析

获取国家统计局下载各省年度 GDP 数据,直接上传文件比较四个直辖市 GDP 数据

实现原理

代码解释器(Code Interpreter)实际上就是一个 REPL(读取-评估-打印循环),例如给它一个文件(例如 CSV 文件),然后可以要求它转换文件或从文件中提取一些信息,甚至使用该文件作为计算的输入。既然已经有 API(GPT-4 和 GPT-3.5) 可用于访问代码解释器的底层模型,再叠加 Prompt 工程,是存在构建自己本地版本的可能的,即 REPL + LLM ,一个通过执行代码来完成日常任务的个性化工具,下面就是应用架构

手把手教你开发自己的 ChatGPT 代码解释器_第1张图片

Jupyter kernel process 解释
  1. Jupyter 内核与具体语言无关

  2. 它提供了一个计算内核,相当于一个可以执行代码的环境

  3. 这个内核通过一种协议与外界交互,这种协议将用户的标准输入(stdin)连接到内核的 REPL(Read Evaluate Print Loop,读取评估打印循环)

  4. 内核执行代码后,将执行结果、标准输出(stdout)和标准错误(stderr)反馈回来,显示给用户

  5. 通过这种协议,Jupyter 内核可以执行任何语言的代码,并将执行结果返回给用户

Jupyter 内核协议主要定义了

  • 消息类型:stdin、stdout 等不同类型的消息格式
  • 消息封装:使用 JSON 格式封装消息
  • 通信模式:请求-回复、推送等模式
  • 接口方法:内核需要实现的接口方法,如执行代码、代码完成等

在这一协议基础上,可以用任意通信机制来实现内核和客户端之间的交互,这里采用了 snakeMQ(Python 实现的消息队列库),理论上也可以用 HTTP 请求、用 WebSocket 等实现。

整体执行流程
  1. 用户在页面输入指令,发送到 Flask 应用后端
  2. 后台结合设计好的 Prompt 将用户的指令转换后发送到 LLM
  3. 获得 LLM 的响应(代码内容)后,Flask 通过 SmakeMQ 将代码内容发送到 Jupyter 内核
  4. Jupyter 执行后,将结果通过 Flask 接口返回到(Stream 流的方式)前端
  5. 页面展示结果
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

如果觉得内容不错,欢迎关注,点赞和收藏

参考链接

硬核教程!手把手教你开发自己的 ChatGPT 代码解释器插件

你可能感兴趣的:(LLM应用构建实践笔记,大语言模型开发者教程,chatgpt,python,人工智能,AI编程,flask,github,百川大模型)