当我想用ChatGPT-Next-Web来套壳Azure OpenAI Service时

使用Cloudflare worker来代理Azure OpenAI API, 并将其转换为兼容OpenAI的API

一直没能搞定OpenAI的订阅, 就因为没有搞定国外的信用卡, 所以就一直使用GPT-3.5来处理日常的文字生成工作, 例如写文档, 生成一些简单的脚本和程序代码以及帮助review代码。 偶尔会通过Azure 的 AI Studio来调用gpt-4的模型, 总觉得对话内容和3.5差不多, 最近公司有想做职能文档助理或者职能技术支持的功能, 为了能灌入一些知识库的内容, 不得不去Azure上弄一下Customized Model, 由于Azure的Portal有些慢, 所以想到了目前比较流行的ChatGPT Web UI, 也就是本文要说的ChatGPT-Next-Web.

搞定ChatGPT-Next-Web

这个比较简单, 使用Docker的话, 真的就是一行命令, 不过, 问题是, 我发现它对Azure OpenAI API支持等于零, 所以, 在搞定这个之前, 还得想个曲线救国的办法, 于是, 我想到, 要不我自己用Python来做一个API Wrap, 于是, 我开始准备卷。。。

但是, 懒虫如我, 怎么可能就这么轻易得开始自己写代码? 或者, 我还会写代码吗? 自从用了这些AI工具后, 我的大脑就一直处于躺平状态, 于是, 找到了这个

GitHub - hbsgithub/deno-azure-openai-proxy: One-click deploy! Free to use, no server required. A…

One-click deploy! Free to use, no server required. A Deno Deploy script to proxy OpenAI's request to Azure OpenAI…

github.com

和这个

GitHub - haibbo/cf-openai-azure-proxy: A Cloudflare worker script to proxy OpenAI's request to…

A Cloudflare worker script to proxy OpenAI's request to Azure OpenAI Service - haibbo/cf-openai-azure-proxy

github.com

因为我有在使用cloudflare, 所以我决定试一试Cloudflare worker来代理Azure OpenAI API, 并将其转换为兼容OpenAI API格式。

Cloudflare Work 运行 cf-openai-azure-proxy

这个proxy代码真的很简单, 就一个js文件, copy到Cloudflare的worker里就好, 这是具体的步骤

新建一个worker application

登录到Cloudflare dashboard, 在左边的菜单上进入Workers & Pages, 并从右上角点击 Create application, 并且进入Worker界面后, Create Worder。

创建一个新的Worker Application

创建一个worker

部署我们的Worker

接下来我们就可以部署一个新的worker, 为我们的worker取一个名字, 这里我称之为 “my-azure-openai-wrapper-01”

部署一个新的worker

这里, 我们不需要修改代码, 而是直接点 Deploy. 因为部署后, 我们就可以编辑代码了。

编辑Worker代码

编辑代码

到这步就可以选择 Edit code来编辑代码,我们将

https://raw.githubusercontent.com/haibbo/cf-openai-azure-proxy/main/cf-openai-azure-proxy.js

这里的代码Copy到代码框里。

红色框里的是需要修改的代码, 这里的信息, 我们可以在Azure Portal里找到。

修改 Worker 代码

进入到Azure Portal, 并搜索OpenAI, 这时候会跳出产品, 我们直接选择进入到Azure OpenAI

// The name of your Azure OpenAI Resource.
const resourceName="xx-openai-inst-1"

将代码中的 resourceName的值修改为你的Azure OpenAI的实例名称

然后进入到实例, 并部署我们要使用的模型

说实话, Azure Portal里的OpenAI Studio网页加载太慢了, 这也是为什么会有这篇文章的原因, 哈哈。

已经部署好的模型

这里就可以看到我们可以使用的模型了, 这里我们把代码中的mapper部分也改成我们的模型部署名称

// The deployment name you chose when you deployed the model.
const mapper = {'gpt-3.5-turbo': "general-gpt35-turbo-deployment-1",'gpt-3.5-turbo-0613': "general-gpt35-turbo-deployment-1",
//   'gpt-3.5-turbo-1106': DEPLOY_NAME_GPT35,// 'gpt-3.5-turbo-16k': DEPLOY_NAME_GPT35,'gpt-4': "general-gpt4-deployment-1",'gpt-4-0613': "general-gpt4-deployment-1",// 'gpt-4-1106-preview': DEPLOY_NAME_GPT4,// 'gpt-4-32k': DEPLOY_NAME_GPT4,// 'dall-e-3': typeof DEPLOY_NAME_DALLE3 !== 'undefined' ? DEPLOY_NAME_DALLE3 : "dalle3",
};

有些模型没有部署, 自然就不需要填写了, 我们这里先就使用这两个模型,

GPT-3.5和GPT-4,修改好就回到Cloudflare的网页上, 点Save and deploy.

完成Cloudflare Worker的部署

在截图的这两处都可以获取到我们刚刚设置的worker的URL

把这个URL记录下来, 我们接下来要在 ChatGPT-Next-Web里要用。

使用Docker部署和配置ChatGPT-Next-Web

为了简化部署的过程, 我们这里直接使用Docker compose来完成Web UI的部署和配置, 如果你的电脑上已经安装了Docker和Docker compose, 那么恭喜你, 不需要再做其他的工作, 我们直接创建一个文件夹, chatgpt-next-web, 然后新建一个文件名叫 docker-compose.yml

version: "3.9"
services:chatgpt-next-web:container_name: chatgpt-next-webimage: yidadaa/chatgpt-next-webports:- 18303:3000environment:- OPENAI_API_KEY=这里有个key哦- GOOGLE_API_KEY=$GOOGLE_API_KEY- CODE=这里可以存个admin密码哦- BASE_URL=https://my-azure-openai-wrapper-01.xxxxxxxx.workers.dev/- OPENAI_ORG_ID=这里是Azure OpenAI的订阅ID- HIDE_USER_API_KEY=$HIDE_USER_API_KEY- DISABLE_GPT4=$DISABLE_GPT4- ENABLE_BALANCE_QUERY=$ENABLE_BALANCE_QUERY- DISABLE_FAST_LINK=$DISABLE_FAST_LINK- OPENAI_SB=$OPENAI_SB

需要你修改的部分:

OPENAI_API_KEY
CODE
BASE_URL
OPENAI_ORG_ID

这些信息哪里找呢?

还记得之前要记录的URL么?

这个就是BASE_URL了。

首先 CODE 可以随便填, 这里是你登录到ChatGPT-Next-Web的密码, 我们就设置为 CHATGPT2024 好了, OPENAI_API_KEY, OPENAI_ORG_ID这两个可以在这里找, 首先 ORG_ID就是下图中的Subscription ID

然后在 Keys and Endpoint 里就可以看到 API_KEY了

一切就绪, 运行ChatGPT-Next-Web

docker compose up -d

然后打开浏览器, 进入 http://docker-host-ip:18303

这里docker-host-ip 就是你刚刚运行docker compose的那个电脑的ip, 通常我们做实验都是在本机做, 那么就使用 http://localhost:18303, 应该就可以看到

输入我们先前设置的CODE, CHATGPT2024 ,然后在OpenAI API Key输入我们之前在Azure 里copy来的API_KEY, 为什么这里还要输入, 我也不是很清楚, 明明我们在环境变量里已经配置了, 还望知道的朋友告诉我。

进去后, 我们可以在输入框上方选择一个模型, 这里我选择GPT-4

大功告成。 希望大家喜欢这个教程, 如果有问题, 也欢迎在下方留言探讨。

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

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

相关文章

AI助力生产制造质检,基于轻量级YOLOv8n模型开发构建工业生产制造场景下的瓷砖瑕疵检测识别分析系统

瓷砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光,最后进行质量检测和包装。得益于产业自动化的发展,目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说,一条产线需要配数名质检工&…

论文阅读-MIPD:一种用于分布式深度神经网络训练的自适应梯度稀疏化框架

摘要—基于参数服务器架构的异步训练广泛应用于大规模数据集和深度神经网络模型的扩展训练。在大规模分布式深度学习系统中,通信一直被认为是主要瓶颈。最近的研究尝试通过梯度稀疏化和量化方法来减少通信流量。我们发现前期研究存在三个限制。首先,他们…

YOLOv5-Y5周:yolo.py文件解读

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊|接辅导、项目定制 我的环境: 1.语言:python3.7 2.编译器:pycharm 3.深度学习框架Tensorflow/Pytorch 1.8.0cu111 一、代码解读 import argparse i…

【洛谷 P8715】[蓝桥杯 2020 省 AB2] 子串分值 题解(组合数学+乘法原理)

[蓝桥杯 2020 省 AB2] 子串分值 题目描述 对于一个字符串 S S S, 我们定义 S S S 的分值 f ( S ) f(S) f(S) 为 S S S 中恰好出现一次的字符个数。例如 f ( ′ ′ a b a ′ ′ ) 1 f\left({ }^{\prime \prime} \mathrm{aba}{ }^{\prime \prime}\right)1 f(′′aba′′)…

Vscode与Cmake搭配配置opencv使用

vscode与Cmake基本使用 下载插件 CtrlShiftp打开VSCode的指令面板,然后输入cmake:q,VSCode会根据输入自动提示,然后选择CMake: Quick Start选择编译器根据提示输入项目名称选择可执行文件编译项目 方式一:执行命令cd build cmake…

一键将自己网增加一个抖音小程序-源代码

把自己的网址链接,也就是你想要的一个页面转变为抖音小程序,让你轻松拥有一个自己的抖音小程序。 几分钟搞定。 跟着视频来操作就可以了,很简单。视频一定要完整看完啊,对于小白。 如果你的网址可能有不好过审核的页面&#xff0c…

基于python+vue的stone音乐播放器的设计与实现flask-django-php-nodejs

随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,stone音乐播放器展现了其蓬勃生命力和广阔的前景。与此同时,为解决用…

华为配置WLAN 802.1X认证实验

配置WLAN 802.1X认证示例 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤 业务需求 用户接入WLAN网络,使用802.1X客户端进行认证,输入正确的用户名和密码后可以无线上网。且在覆盖区域内移动发生漫游时&…

MySQL面试题--MySQL内部技术架构

目录 1.Mysql内部支持缓存查询吗? 2.MySQL8为何废弃掉查询缓存? 3.替代方案是什么? 4.Mysql内部有哪些核心模块组成,作用是什么? 5.一条sql发送给mysql后,内部是如何执行的?(说…

MYSQL 同步到ES 如何设计架构保持一致性

简单使用某个组件很容易,但是一旦要搬到生产上就要考虑各种各样的异常,保证你方案的可靠性,可恢复性就是我们需要思考的问题。今天来聊聊我们部门在 MYSQL 同步到ES的方案设计。 在面对复杂条件查询时,MYSQL往往显得力不从心&…

Gitlab介绍

1.什么是Gitlab GitLab是一个流行的版本控制系统平台,主要用于代码托管、测试和部署。 GitLab是基于Git的一个开源项目,它提供了一个用于仓库管理的Web服务。GitLab使用Ruby on Rails构建,并提供了诸如wiki和issue跟踪等功能。它允许用户通…

从0到1实现RPC | 02 RpcConsumer的远程调用

一、RPC的简化版原理如下图(核心是代理机制)。 1.本地代理存根: Stub 2.本地序列化反序列化 3.网络通信 4.远程序列化反序列化 5.远程服务存根: Skeleton 6.调用实际业务服务 7.原路返回服务结果 8.返回给本地调用方 二、新建一个模块rpc-demo-c…

后端程序员入门react笔记(九)- react 插件使用

setState setState引起的react的状态是异步的。操作完毕setState之后如果直接取值,可能取不到最新的值,我们举个例子console.log(this.state.num)打印的值,总是上一次的值而不是最新的。 import React, {Component} from react; class Ap…

基于ArcGIS的2015-2020辽宁省土地利用变化分析

数据准备 栅格转面 运行ArcToolbox,打开【转换工具】,选择【从栅格转出】里面的【栅格转面工具】,调出面板进行参数设置。输入栅格选择裁剪的2015年中国土地利用遥感监测数据(…

数据挖掘与分析学习笔记

一、Numpy NumPy(Numerical Python)是一种开源的Python库,专注于数值计算和处理多维数组。它是Python数据科学和机器学习生态系统的基础工具包之一,因为它高效地实现了向量化计算,并提供了对大型多维数组和矩阵的支持…

【ReactJS】使用GoJS实现自己的图表App

目录 1:用于绘制自定义图表的JavaScript库:用于绘制UML(或BPMN或ERD …)图表的JavaScript库:2:为什么选择GoJS?3:让我们使用现有的React应用程序:步骤1:步骤2:步骤3:步骤4:推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战1:…

git创建仓库、克隆、拉取、上传、历史等常见操作集锦

本地工作目录、暂存区、本地仓库和远程仓库 workspace工作区:本地项目地址index/stage暂存区:git add .将工作区内容加入到了暂存区repository本地仓库:在本地存储多个版本的文件,也称为版本库。其中有一个head指针指向最新放入仓库的文件版本,git commit -m "描述你…

[医学分割大模型系列] (1) SAM 分割大模型解析

[医学大模型系列] [1] SAM 分割大模型解析 1. 特点2. 网络结构2.1 Image encoder2.2 Prompt encoder2.3 Mask decoder 3. 数据引擎4. 讨论 论文地址:Segment Anything 开源地址:https://github.com/facebookresearch/segment-anything demo地址&#x…

C#,图片分层(Layer Bitmap)绘制,反色、高斯模糊及凹凸贴图等处理的高速算法与源程序

1 图像反色Invert 对图像处理的过程中会遇到一些场景需要将图片反色,反色就是取像素的互补色,比如当前像素是0X00FFFF,对其取反色就是0XFFFFFF – 0X00FFFF = 0XFF0000,依次对图像中的每个像素这样做,最后得到的就是原始2 图像的反色。 2 高斯模糊(Gauss Blur)算法 …