Ex-ChatGPT本地部署+Azure OpenAI接口配置+docker部署服务

news2024/11/26 23:38:06

Ex-ChatGPT项目分为 Ex-ChatGPT 和 WebChatGPTEnhance 两部分,Ex-ChatGPT启动后是个web服务,通过访问ip+端口体验; WebChatGPTEnhance可编译生成一个浏览器插件,Chrome或者Microsoft edge浏览器可以安装该插件,点击该插件可以直接跳转到chatGPT的聊天页面,相比于官方chatGPT页面,底部多了个web access,即实现网络资料搜索,不仅限于ChatGPT的回答,类似于新必应。
截止2023年5月29日, Ex-ChatGPT实现的第三方api请求比WebChatGPTEnhance 更多,功能更强,侧重研究Ex-ChatGPT即可。

本地试验环境:
windows 10
服务器环境:
Ubuntu
Ex-ChatGPT项目源代码
https://github.com/circlestarzero/EX-chatGPT

一、本地部署

首先将代码clone到本地设备:

git clone https://github.com/circlestarzero/EX-chatGPT.git

以下步骤参考了博客:
https://www.luoxiao123.cn/enhanced-ex-chat-gpt-local-build-tutorial.html
有不明白的可以试着看以上博客查找答案。

1.1 Ex-chatGPT 安装

本人使用python3.11.3, 安装该项目的python模块依赖:

pip install -r requirements.txt -i -i https://pypi.tuna.tsinghua.edu.cn/simple

1.1.1 ID和KEY申请

谷歌api key申请

要翻墙
Google api key and search engine id 申请
得到如下SEARCH_ENGINE_ID:
在这里插入图片描述
以及GOOGLE_API_KEY:
在这里插入图片描述
在这里插入图片描述

wolframAlpha key申请

wolframAlpha app id key 申请

openAI key 申请

要翻墙
openAI api key( 新功能 ) 或 chatGPT access_token ( 旧版本 ) [申请](https://platform.openai.com/)

1.1.2 API key配置

将.\EX-chatGPT\chatGPTEx\apikey.ini.example复制一份,重命名成apikey.ini,修改其中的配置:
在这里插入图片描述

1.1.3 运行访问

首先谷歌和openAI的接口都需要翻墙才能访问,所以要确保你的梯子在本地开了全局模式,保证执行下面的代码时能通过代理访问到外网。

执行 .\EX-chatGPT\chatGPTEx\main.py :

python main.py

在本地浏览器打开 http://127.0.0.1:1234/,即打开Ex-ChatGPT的窗口,:
在这里插入图片描述
上图下方文字输入框左侧有个模式选择上拉框,鼠标移到选项中文字就会显示出来(显示有bug),这里讲一下其中主要的两个模式:
web模式:
当你输入一个问题,比如数学问题:请计算1+5等于多少?,该工具首先会调用chatGPT进行问题理解,然后生成谷歌接口、wolframAlpha接口、wiki接口、chatGPT分别进行查询,4个接口得到的结果会返回到窗口进行一一展示。
chat模式:
和上面同样的问题,只会查询chatGPT接口,返回结果的速度较快,但是由于chatGPT的信息较为落后,比如基于gpt3.5的chatGPT,其信息是2021年9月之前的,结果不如web模式全面和时效。

1.2 WebChatGPTEnhance安装

注意:
https://github.com/circlestarzero/EX-chatGPT.git下.\EX-chatGPT\chatGPTChromeEnhance的代码是fork别人的代码,而且不完整(少了build目录),无法使用,本人找到了其fork的源代码库:

git clone https://github.com/qunash/chatgpt-advanced.git

1.2.1 VC++编译环境配置

在进行下一步之前,首先得安装VC++,否则会报错,visualstudio下载链接,选择
https://visualstudio.microsoft.com/zh-hans/downloads/
在这里插入图片描述
选择如上版本即可,在安装界面,选择.NET桌面开发、Node.js开发、C++桌面开发即可,其他勾都取消掉:
在这里插入图片描述
安装重启后应该就可以用npm和node命令了,如果不行,则可能没有自动添加命令路径到系统环境变量,那么你得找到node.exe所在路径,添加到系统环境变量,npm同理。

1.2.2 插件生成和使用

接下来编译生成插件包:

cd .\chatgpt-advanced\
npm install
npm run build-prod 

之后在目录\chatgpt-advanced\bulid内会有个插件包,将包安装到chrome或edge浏览器即可:
在这里插入图片描述

二、Azure OpenAI服务配置

本公司购买了微软的Azure OpenAI接口服务,可以不用翻墙,通过Azure OpenAI接口访问到chatGPT;Ex-chatGPT默认是使用原生的openAI接口调用。下面从用openai模块访问chatgpt的方式来说明一下原openAI接口和Azure OpenAI接口的不同,如下图所示:
在这里插入图片描述
在Ex-chatGPT中并没有用到openai模块访问chatgpt,而是用requests模块访问chatgpt,当访问chatGPT的请求到了后,会执行到.\EX-chatGPT\chatGPTEx\optimizeOpenAI.py代码中的ask_stream函数,发起chatgpt接口请求,其中请求部分的代码为:

...
        response = self.session.post(
            "https://api.openai.com/v1/chat/completions",
            headers={
                "Authorization": f"Bearer {kwargs.get('api_key', apiKey)}"
            },
            json={
                "model": self.engine,
                "messages": self.conversation[convo_id],
                "stream": True,
                # kwargs
                "temperature": kwargs.get("temperature", self.temperature),
                "top_p": kwargs.get("top_p", self.top_p),
                "n": kwargs.get("n", self.reply_count),
                "user": role,
            },
            stream=True
        )
...

由以上代码可见,默认用了"https://api.openai.com/v1/chat/completions"这个原生的openai接口,这里本人修改这部分代码,使其默认访问Azure openai的接口去请求chatgpt,修改代码如下:
在这里插入图片描述
修改后的代码中url和api-key都是写死的,没有用到apikey.ini文件内有关opneAI的key,这样所有chatgpt的请求都会走Azure openai的接口了,不再需要翻墙。上图修改后代码的url规则参考官网进行更改:
https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/reference
在这里插入图片描述

三、Docker部署服务

任务是部署一个公司内网的员工都可以访问的Ex-chatGPT,由于很多员工都没有翻墙梯子,所以要如第二节一样,配置Ex-chatGPT通过Azure Openai的服务接口访问chatgpt。

3.1 启动一个原生的容器

登录目标服务器进行如下操作:
创建配置文件目录并拉取配置文件

cd /data/ml/crl/
mkdir config && wget https://raw.githubusercontent.com/circlestarzero/EX-chatGPT/main/chatGPTEx/apikey.ini.example -O ./config/apikey.ini

编辑配置文件或者把编辑好的配置文件传到config文件夹下。

vim ./config/apikey.ini

拉取docker镜像

docker pull 0nlylty/exchatgpt:latest

创建容器

docker run -dit \
  -v /data/ml/crl/config:/config \
  -p 5100:5000 \
  --name exchatgpt \
  --restart unless-stopped \
 0nlylty/exchatgpt:latest

注意以上5100接口是宿主机服务器的接口,要自行找个未被占用的接口。容器启动后,找到这个容器的id, 然后进入容器中:

docker exec -it 57de2cbe08bb /bin/bash

切换到目录中/app/chatGPTEx,删除代码文件optimizeOpenAI.py:

root@57de2cbe08bb:/app/chatGPTEx# pwd
/app/chatGPTEx
root@57de2cbe08bb:/app/chatGPTEx# rm optimizeOpenAI.py

3.2 本地修改optimizeOpenAI.py

在本地电脑,按照第二节方法修改optimizeOpenAI.py,然后将本地修改后的optimizeOpenAI.py传到服务器上面,如传到服务器目录:/data/ml/crl/chatGPTEx/optimizeOpenAI.py。
最后在服务器上,将已修改的/data/ml/crl/chatGPTEx/optimizeOpenAI.py传到上小节已启动的容器中:

docker cp /data/ml/crl/chatGPTEx/optimizeOpenAI.py 57de2cbe08bb:/app/chatGPTEx

3.3 用修改后的容器生成新版镜像

经过上小节,容器中/app/chatGPTEx/optimizeOpenAI.py已经是修改过后的,访问chatGPT时,走的是Azure OpenAI接口,不再需要翻墙。将此修改后的容器生成一版新的镜像:

docker commit  57de2cbe08bb 0nlylty/exchatgpt:v1.0.0

之后就不再需要57de2cbe08bb这个容器了,将其杀死和删除:

docker kill 57de2cbe08bb
docker rm 57de2cbe08bb

3.4 用新镜像启动新容器

用上小节生成的新版镜像0nlylty/exchatgpt:v1.0.0,启动服务:

docker run -dit  -v /data/ml/crl/config:/config  -p 5100:5000  --name exchatgpt  --restart unless-stopped  0nlylty/exchatgpt:v1.0.0

启动服务后,就可在本地访问Ex-ChatGPT了,能够访问服务器的其他员工也可以访问到该Ex-ChatGPT服务:
在这里插入图片描述

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

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

相关文章

Golang中文件目录操作的实现

目录 文件 文件目录 文件目录操作 读取文件 一、方法一 (file.Read()) 二、方法二 (bufio读取文件) 三、方法三 (ioutil 读取方法) 写入文件 一、方法一 二、方法二 三、方法三 (ioutil写入文件) 复制文件 一、方法一 二、方法二 文件 Golang中,文件是…

python异常处理速通

一.异常处理认识 1.基础认识 开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。总的来说…

什么是肖特基二极管

普通二极管是由N型半导体和P型半导体接触制成,交界面形成PN结。 肖特基二极管是由N型半导体和金属接触制成,交界面形成肖特基结。 肖特基结的形成主要是因为N型半导体中的电子更容易逸出进入到金属,从而在接触面N型半导体失去电子形成正离子区…

python:绘制GAM非线性回归散点图和拟合曲线

作者:CSDN _养乐多_ 本文将介绍使用python语言绘制广义线性模型(Generalized Additive Model,GAM)非线性回归散点图和拟合曲线。并记录了计算RMSE、ubRMSE、R2、Bias的代码。 文章目录 一、GAM非线性回归详解二、代码三、计算RM…

docker 镜像/容器的打包、导出、导入

目录 一、将变动过的容器打包生成新的镜像 二、对镜像进行导出导入 1、将镜像导出为一个镜像img文件 2、将img镜像文件导入,复制出一个完全一样镜像 三、对容器进行导入导出 1、将容器导出为一个镜像tar文件 2、将镜像tar文件导入,生成一个新镜像…

Linux本地搭建GitLab服务器 - 内网穿透远程访问

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自cpolar极点云文章:Linux搭建GitLab私有仓库,并内网穿透实…

vite构建的项目如何修改element Plus的主题样式

安装element plus 安装icon pnpm install element-plus pnpm install element-plus/icons-vue main.ts配置 icon的使用https://element-plus.gitee.io/zh-CN/component/icon.html#%E7%BB%93%E5%90%88-el-icon-%E4%BD%BF%E7%94%A8 import { createApp } from vue import ./sty…

【工具】vscode的常用插件之git插件

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:善假于物&#…

计算机视觉cv模型最新进展速看:

华为诺亚实验室等研究者提出动态分辨率网络 DRNet 深度卷积神经网络通畅采用精细的设计,有着大量的可学习参数,在视觉任务上实现很高精 确度要求。为了降低将网络部署在移动端成本较高的问题,近来发掘在预定义架构上的冗余 已经取得了巨大的…

Midjourney AI绘画中文教程详解(完整版)模型、命令、参数与各种高级用法

我有一种预感,您一下子看不完这篇内容,您得【收藏】一下,以便下次接着看~~ Midjourney AI绘画中文教程,Midjourney是一款2022年3月面世的AI绘画工具,创始人是David Holz。 只要输入想到的文字,就能通过人…

数据库sqlserver-----触发器的插入,更新和删除

在学习触发器之前,先弄清DDL,DML,DQL,DCL的区别: http://t.csdn.cn/Le3wA 触发器就是当执行某个事件的时候触发另一个事件的执行,根据事件的触发时间可分为 before和after Before与After区别:before:(insert、update)可以对new…

数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)

目录 题目描述 输入示例 输出示例 解题思路 解题方法(C语言) 解析 题目描述 有序的二叉树遍历可以用堆栈以非递归的方式实现。 例如: 假设遍历一个节点数为6的二叉树(节点数据分别为1到6)时, 堆…

immersive-translate 安装,个人觉得一款超级好用的浏览器翻译插件

immersive-translate 安装,个人觉得一款超级好用的浏览器翻译插件 immersive-translate 是什么Github 地址主要特性立即安装使用 immersive-translate immersive-translate 是什么 Immersive Dual Web Page Translation Extension - 沉浸式双语网页翻译扩展。 Git…

MSP432学习笔记5——外部中断

所用单片机型号:MSP432P401r 今日继续我的MSP432电赛速通之路。 外部中断是个很有用的配置 STM32几乎每个I/O口都能配置复用为外部中断 但MSP432并不是这样。 我经过查阅数据手册发现支持中断的引脚为: P1^0~ P1^7 P3^0~ P3^7 P5^0~ P5^…

【Python习题】Python课程设计的作业分小组完成得分计算(实现代码)

目录 题目思路分析代码实现效果总结 主要内容是校设课程的习题和课外学习的一些习题。 欢迎关注 『Python习题』 系列,持续更新中 欢迎关注 『Python习题』 系列,持续更新中 题目 【题目描述】Python课程设计的作业分小组完成,规定小组成员1…

​Shodan新手入坑指南​

什么是 Shodan? 首先,Shodan 是一个搜索引擎,但它与 Google 这种搜索网址的搜索引擎不同,Shodan 是用来搜索网络空间中在线设备的,你可以通过 Shodan 搜索指定的设备,或者搜索特定类型的设备,其…

【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体const

文章目录 1. 定义和使用2. 结构体数组3. 结构体指针4. 结构体嵌套结构体5. 结构体做函数参数6. 结构体const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。 struct 结构体 {结构体成员列表}; 通过结构体创建变量的方法有三种&…

读数据压缩入门笔记02_二进制和熵

1. 十进制 1.1. 现代数学建立在十进制计数系统之上 2. 二进制 2.1. 二进制计数系统的工作原理与十进制计数系统一样,唯一的区别是前者的基数为2,而后者的基数为10 2.2. 数据压缩所做的就是尽可能减少表示特定数据集时所需的二进制位数量 2.3. 给定任…

WASender - Whatsapp server and bulk sender

WASender 是一个 whatsapp 营销平台,它使用 Laravel 和 Node Js 构建。WhatsApp 是世界上最受欢迎的消息应用程序之一,拥有超过 20 亿活跃用户。这使其成为企业接触潜在客户并与现有客户群互动的有吸引力的平台。WASender 客户可以创建多个设备来向他的目…

NLP基础知识(语法语义、LDA、N-gram、词嵌入)

文章目录 本节课大纲Hyper-simplified linguisticsTerm spotting handling negation, uncertaintyML to expand termspre-NN ML to identify entities and relationsLatent Dirichlet Allocation (LDA)Statistical Models of Language: Zipfs lawvector space embeddings base…