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

news2024/10/1 9:45:59

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
在这里插入图片描述

三、服务器部署

任务是部署一个公司内网的员工都可以访问的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/585267.html

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

相关文章

【Python入门篇】——Python中循环语句(循环中断break和continue)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!

前言 在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码…

【系统工具】Rundll32:Windows系统中的神奇工具,你知道吗?

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ Rundll32的使用使用方法 - cmd使用方法 - 运行窗口/任务管理器/资源管理器 2️⃣ 常见应用场景运行js或vbs的脚本代码执行命令绕过杀毒软件的作法?修改注册表增加一个服务修复Internet Explorer其它常见命令 3️⃣ 原理…

使用LoRA对大语言模型LLaMA做Fine-tune

使用LoRA对大语言模型LLaMA做Fine-tune 前言下载配置环境模型的训练 Fine-tune模型的使用 Inference参考 前言 目前有大量对LLM(大语言模型)做Fine-tune的方式,不过需要消耗的资源非常高,例如 Stanford Alpaca: 对LLaMA-7B做Fine-…

springboot + vue3实现视频播放Demo(video.js Vue3-video-play)

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

物联网GPRS模块流量计算

物联网GPRS模块流量计算 MQTT(消息队列遥测传输) 是ISO 标准下一个基于TCP/IP的消息发布/订阅传输协议。 一、TCP消耗流量计算 以太网数据包结构: 以太网首部 IP首部 TCP首部 APPL首部 用户数据 以太网尾部 以太网首部为14个字节 IP首部为20个字节 TCP首部…

阿里云对象oss

1\RAM 首页 https://ram.console.aliyun.com/overview 点击用户进去 点击里面的一个用户,然后新建 id 和secret 上面灰色按钮,因为我已经绑定了两个。 "yourAccessKeyId", "yourAccessKeySecret" 这两个参数就对应上了 // 阿里云账…

【详解Collection接口、迭代器和Colletions工具类】

🌠作者:TheMythWS. 🎆专栏:《集合与数据结构》 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 👀Collection接口的常用方法 💨…

java循环结构

文章目录 一、Java 循环结构 - for, while 及 do...while1、while 循环2、do…while 循环3、for循环4、break 关键字5、continue 关键字 总结 一、Java 循环结构 - for, while 及 do…while 顺序结构的程序语句只能被执行一次。 如果您想要同样的操作执行多次,就需…

企业bpm业务流程管理系统网站如何在外网访问?

企业在已有ERP系统的基础上去实施BPM业务流程管理系统,是非常有必要的。什么是BPM业务流程管理系统呢? BPM是英文BPM-Business Process Management的缩写,指的是通过对企业内部及外部业务流程的整个生命周期进行建模、自动化、管理监控和优化…

2023年6月18日DAMA-CDGA/CDGP认证北京/上海/深圳报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

[NOIP2004 普及组] FBI 树 递归解法

[NOIP2004 普及组] FBI 树 题目描述: 我们可以把由 0 和 1 组成的字符串分为三类:全 0 串称为 B 串,全 1 串称为 I 串,既含 0 又含 1 的串则称为 F 串。 FBI 树是一种二叉树,它的结点类型也包括 F 结点,B 结点和 I …

SpringMVC 学习笔记

SpringMVC 学习笔记 1、回顾MVC1.1、什么是MVC1.2、Model1时代1.3、Model2时代1.4、回顾Servlet 2、什么是SpringMVC2.1、概述2.2、中心控制器2.3、SpringMVC执行原理 【重要】 3、HelloSpring3.1、配置版3.2、注解版3.3、小结 4、Controller 及 RestFul4.1、Controller 控制器…

2.算法与数据结构

算法与数据结构 文章目录 算法与数据结构一、算法相关1、十大排序算法总结冒泡排序插入排序选择排序快速排序基数排序桶排序希尔排序归并排序堆排序 2、经典算法介绍递归算法回溯算法贪心算法深度优先遍历广度优先遍历动态规划算法 3、常见算法1、迪杰斯特拉(Dijkstra)算法介绍…

C++中的函数组合:用std::function实现编程艺术

C中的函数组合:用std::function实现编程艺术 1. 引言1.1 C中的函数式编程 (Functional Programming in C)1.2 函数组合的概念和价值 (Concept and Value of Function Composition)1.3 std::function概述 (Overview of std::function) 2. 如何在C中实现函数组合 (Imp…

【网络协议详解】——万维网WWW系统协议(学习笔记)

目录 🕒 1. 概述🕒 2. 文本传输协议HTTP🕒 3. HTTP的报文格式🕒 4. Cookie🕒 5. 万维网缓冲与代理服务器 🕒 1. 概述 万维网www(World Wide Web)并非某种特殊的计算机网络。它是一个…

两个iframe同时滚动实现界面内容对比功能

背景:因为要实现一个版本对比功能,所以要保证两个界面能同时滚动。(本文只讲同时滚动,对比功能文本只讲思路,具体代码实现如有需要 可以联系我),因为过程中有部分收获特此记录。 本文参考&…

Jetson硬件 升级jetpack系统 版本流程

前言: 准备一个linux系统电脑,一个跳线帽,以及一条usb线 以及英伟达开发者账号,点击https://developer.nvidia.com/zh-cn/embedded/jetpack进行注册 注意:烧录的目标硬件是以前装过低版本的jetpack,以下步…

工业自动化新引擎:工业机器人引领制造业转型升级

自2010年开始,我国15-64岁人口比例下滑,截至2022年我国总人数出现负增长,同比下滑0.1%,因人口老龄化加剧和出生率的持续走低,致使进入生产体系的劳动力越来越少。 随着我国经济进入新常态,制造业面临着产能…

通过训练NLP制作一个自己的简易输入法

最近开始研究NLP,然后根据手写CV UP主的视频,写了一个N Gram的NLP模型,算是该领域里的hello world吧。然后我又添加了几行代码实现了一个非常简易的输入法。 项目说明: 数据集可以自创,导入txt文件即可; …