Amazing OpenAI API:把非 OpenAI 模型都按 OpenAI API 调用

分享一个有趣的小工具,10MB 身材的小工具,能够将各种不同的模型 API 转换为开箱即用的 OpenAI API 格式。

让许多依赖 OpenAI API 的软件能够借助开发者能够接触到的,非 OpenAI 的 API 私有部署和使用起来。

写在前面

这个小工具软件写于两周之前的 2023 年年底,开源在了 GitHub:soulteary/amazing-openai-api,有需要可以自取,欢迎一键三连。

开源小项目:AOA

目前项目只适配了三种我在使用的模型的 API,如果你觉得有其他的合适的 API 或者你认为很靠谱的模型,欢迎提交 PR。

这个小工具的思路借鉴于 stulzq/azure-openai-proxy,一个将 Azure OpenAI API 转换为 OpenAI API 格式的项目。在本地使用这个项目一段时间之后,我 fork 出了一个新的版本 soulteary/azure-openai-proxy,并将修改以 PR 形式反馈给了原始项目。随后,因为想在本地应用中测试 Yi-34B API,我制作了一个新的工具:soulteary/yi-openai-proxy,在随后 Gemini Pro API 出现了,想着不能每处一个模型就折腾一个这样的项目,后面太难维护了。

于是,我彻底重构了项目,并起一个略搞怪的名字:Amazing OpenAI API,和一个有意思的像是表情包的别名:AOA

下载工具

这个工具有两种使用方法,一种是从 GitHub Release 发布页面 下载二进制文件。

发布页面的二进制文件

另外一种方法,则是使用 Docker ,从社区下载 GitHub 自动构建好的指定版本的容器镜像:

docker pull soulteary/amazing-openai-api:v0.6.1

快速上手

AOA 的使用是不需要编写任何程序配置文件,我们通过指定环境变量就能够完成应用行为的调整。

我们可以通过这个方式调整的程序行为包括:“选择工作模型”、“设置模型运行需要的参数”、“设置模型兼容别名”。

直接运行可执行文件

程序默认支持三种模型的 API 转换,如果我们不进行任何参数指定,那么程序将默认将工作模型设置为 azure 模型。如果你希望使用 yi-34b-chatgemini-pro,需要设置环境变量 AOA_TYPE=yi 或者 AOA_TYPE=gemini,来让程序切换工作模式。

当我们不使用任何参数,直接执行程序(azure 模式)。这个时候,我们只需要额外设置环境变量 AZURE_ENDPOINT,就可以正常使用服务啦:

AZURE_ENDPOINT=https://你的部署名称.openai.azure.com/

完整的执行命令如下:

AZURE_ENDPOINT=https://你的部署名称.openai.azure.com/ ./aoa

当服务启动之后,我们的程序就可以通过访问 http://localhost:8080/v1/* 的地址,实现和访问 OpenAI 一样的 API 的效果啦。

使用 Docker 运行 AOA

如果你更喜欢使用 Docker,可以用下面的命令来实现和上面一样的效果:

docker run --rm -it -e AZURE_ENDPOINT=https://suyang231210.openai.azure.com/ -p 8080:8080 soulteary/amazing-openai-api:v0.6.1

同样的,我们就可以访问 http://localhost:8080/v1/* 的地址,使用 OpenAI 格式的请求来访问 Azure OpenAI、Yi 34B-Chat、Gemini Pro 啦。

每个模型的详细使用示例,可以参考下文中的 Docker Compose 使用示例。

工具特色

这个小工具有两个有趣的特色功能。

保护我们的 API Key

在日常测试各种 AI 应用的时候,许多应用都需要我们设置 API Key 给它。

你如果你希望不要将 API Key 暴露给应用,或者不放心各种复杂的开源软件是否有 API Key 泄漏风险。

我们可以将 API Key 配置在工具中,比如在 Azure 模式的时候,可以添加 AZURE_API_KEY=你的 API Key 这个环境变量。以上文中 Azure 的命令为例,我们可以将命令改写为:

AZURE_ENDPOINT=https://<你的 Endpoint 地址>.openai.azure.com/ AZURE_API_KEY=<你的 API KEY> AZURE_MODEL_ALIAS=gpt-3.5-turbo:gpt-35 ./aoa

然后,各种软件在请求的模型 API 的时候,就不需要再填写 API Key 啦,或者你随便填一个也行。

这样就起到了严格的 API Key 隔离,提升了 API Key 的安全性。

方便的模型映射功能

如果你使用 Azure,你一定知道 Azure 中的 Deployment Name 需要在请求参数中体现。同样的,Yi 模型、Gemini Pro 也需要在请求的时候,设置这些模型的名称在请求参数中。

但是,我们的使用的软件,通常只支持调用:GPT 3.5、GPT 3.5 Turbo、GPT-4 等等“事实标准”。 总不能每用一个软件就要改下人家代码,来适配这个模型名称吧,并且很多软件也不一定是开源的,折腾起来未免太麻烦了。

好在我们可以通过下面的方式,来将软件调用模型的名称进行一键“替换”,替换为我们实际在使用的模型。

比如,我们可以通过下面的方式,来将原始请求中的模型,映射为我们真实的模型名称。比如,想要将 GPT 3.5/4 都替换为 yi-34b-chat,我们可以这样写一条映射规则:

gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat

我们还是先拿上文中的 Azure 来举例,如果我们的 Azure 部署名称是 gpt-35,我们希望将软件请求中的 gpt-3.5gpt-4 都替换为这个部署名称:

AZURE_ENDPOINT=https://<你的 Endpoint 地址>.openai.azure.com/ AZURE_API_KEY=<你的 API KEY> AZURE_MODEL_ALIAS=gpt-3.5-turbo:gpt-35,gpt-4:gpt-35./aoa

是不是很简单。

使用 Yi 34B Chat 模型

如果我们想将 Yi 官方的 API 转换为标准的 OpenAI API 调用,可以使用下面的命令:

AOA_TYPE=yi YI_ENDPOINT=<你的 API 地址> YI_API_KEY=<你的 API KEY> ./aoa

和使用 Azure 服务类似,我们可以使用一个技巧将各种开源、闭源软件使用的模型自动映射为我们希望的模型:

# 比如不论是 3.5 还是 4 都映射为 `gpt-35`
YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat

完整命令如下:

AOA_TYPE=yi YI_ENDPOINT=<你的 API 地址> YI_API_KEY=<你的 API KEY> YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat ./aoa

如果我们在启动服务的时候配置了 YI_API_KEY 的话,不论是开源软件也好,使用 curl 调用也罢,我们都不需要添加 Authorization: Bearer <你的 API Key>(也可以随便写),这样就起到了严格的 API Key 隔离,提升了 API Key 的安全性。

如果你还是习惯在请求头参数中添加认证内容,可以使用下面的不包含 YI_API_KEY 的命令,程序将透传验证到 Yi API 服务:

AOA_TYPE=yi YI_ENDPOINT=<你的 API 地址> YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chat ./aoa

使用 Gemini Pro 模型

如果我们想将 Google 官方的 Gemini API 转换为标准的 OpenAI 调用,可以用下面的命令:

AOA_TYPE=gemini GEMINI_API_KEY=<你的 API KEY> ./aoa

和使用 Azure 服务类似,我们可以使用一个技巧将各种开源、闭源软件使用的模型自动映射为我们希望的模型:

# 比如不论是 3.5 还是 4 都映射为 `gpt-35`
GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro

完整命令如下:

AOA_TYPE=gemini GEMINI_API_KEY=<你的 API KEY> GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro ./aoa

和上面类似,如果你还是希望每次请求的时候,都携带 API Key,可以不传递 GEMINI_API_KEY 参数:

AOA_TYPE=gemini GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro ./aoa

Docker Compose 使用示例

下面,我们分别以 Azure、Yi、Gemini 为例,演示下如何编写 docker-compose.yml 配置,先来看看 Azure:

version: "3"services:amazing-openai-api:image: soulteary/amazing-openai-api:v0.6.1restart: alwaysports:- 8080:8080environment:- AZURE_ENDPOINT=https://<修改为你的部署名称>.openai.azure.com/- AZURE_API_KEY=<修改为你的API KEY>- AZURE_MODEL=gpt-4# 模型名称映射,比如将请求中的 GPT 3.5 Turbo 映射为 GPT 4- AZURE_MODEL_ALIAS=gpt-3.5-turbo:gpt-4logging:options:max-size: 1m

然后是 Yi:

version: "3"services:amazing-openai-api:image: soulteary/amazing-openai-api:v0.6.1restart: alwaysports:- 8080:8080environment:# 设置工作模型为 YI- AOA_TYPE=yi# 设置 YI API 服务器地址- YI_ENDPOINT=<修改为你申请或搭建的服务地址># 设置 YI API Key- YI_API_KEY=<修改为你的API KEY># 模型名称映射,比如将请求中的 GPT 3.5 Turbo,GPT-4 都映射为 yi-34b-chat- YI_MODEL_ALIAS=gpt-3.5-turbo:yi-34b-chat,gpt-4:yi-34b-chatlogging:options:max-size: 1m

最后是 Gemini:

version: "3"services:amazing-openai-api:image: soulteary/amazing-openai-api:v0.6.1restart: alwaysports:- 8080:8080environment:# 设置工作模型为 Gemini- AOA_TYPE=gemini# 设置 Gemini API Key- GEMINI_API_KEY=<修改为你的API KEY># 模型名称映射,比如将请求中的 GPT 3.5 Turbo,GPT-4 都映射为 gemini-pro- GEMINI_MODEL_ALIAS=gpt-3.5-turbo:gemini-pro,gpt-4:gemini-pro# 限制国内请求,需要使用服务器进行代理中转,或者跑在国外服务器上- https_proxy=http://10.11.12.90:7890logging:options:max-size: 1m

根据你的实际需求和想使用的模型情况,将上面的内容进行完善,并保存为 docker-compose.yml,然后执行 docker compose up -d,稍等片刻,服务就运行起来啦。

接着,我们可以使用自己顺手的软件来进行接口测试,比如用 curl 测试一把模型的流式输出:

curl http://0.0.0.0:8080/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer soulteary" \-d '{"model": "gpt-4","messages": [{"role": "user", "content": "Hello."}],"temperature": 0.2,"stream": true}'

命令执行完毕,我们将得到类似下面的输出:

data: {"id":"79fb180d21694513","created":0,"model":"yi-34b-chat","choices":[{"delta":{"role":"assistant"},"index":0}],"content":"","lastOne":false}data: {"id":"79fb180d21694513","object":"chat.completion.chunk","created":3705525,"model":"yi-34b-chat","choices":[{"delta":{"role":"assistant","content":"Hello"},"index":0}],"content":"Hello","lastOne":false}...data: {"id":"79fb180d21694513","object":"chat.completion.chunk","created":3705525,"model":"yi-34b-chat","choices":[{"delta":{"role":"assistant","content":""},"index":0,"finish_reason":"stop"}],"content":"Hello! How can I assist you today? If you have any questions or need information on a specific topic, feel free to ask.","usage":{"completion_tokens":27,"prompt_tokens":14,"total_tokens":41},"lastOne":true}data: [DONE]

或者用客户端软件,来一个最普通的模型 API 调用:

一个最简单的模型 AI 调用 GPT-4 (实际请求的是 Yi)

最后

这篇文章就先写到这里吧。

接下来,我们来聊聊用这个方式来折腾一些有趣的东西。

—EOF


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2024年01月09日
统计字数: 6809字
阅读时间: 14分钟阅读
本文链接: https://soulteary.com/2024/01/09/amazing-openai-api-call-all-non-openai-models-according-to-the-openai-api.html

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

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

相关文章

ChatGPT知名开源项目有哪些

ChatGPT-Next-Web&#xff1a;基于ChatGPT API的私有化部署网页聊天系统 主要功能&#xff1a; 只需在 1 分钟内即可在 Vercel 上一键免费部署&#xff0c;支持私有服务器快速部署&#xff0c;支持使用私有域名支持ChatGPT3.5、4等常见模型Linux/Windows/MacOS 上的紧凑型客户…

Ribbon学习思维导图

参考资料 1、OpenFeign与Ribbon源码分析总结与面试题 2、万字剖析OpenFeign整合Ribbon实现负载均衡的原理 3、扒一扒Nacos、OpenFeign、Ribbon、loadbalancer组件协调工作的原理 4、OpenFeign原来是这么基于Ribbon来实现负载均衡的

第18集《佛法修学概要》

戊五、结示法要 请大家打开讲义第四十四页。我们讲因果同时&#xff0c;借缘显现。 从因果转变的角度&#xff0c;佛教是说“罪从心起将心忏&#xff0c;心若灭时罪亦亡。”那么我们要知道&#xff0c;业是怎么来的&#xff1f;怎么会有业&#xff1f;为什么苹果掉下来&#x…

DEATHNOTE: 1

首先通过kali使用nmap进行主机发现 发现IP地址为192.168.75.129的主机 发现其22端口和80端口开放 对其进行详细扫描发现其操作系统是Linux 4.15 - 5.6 访问192.168.75.129&#xff1a;80会重定向到另一个页面 修改一下kali的/ect/hosts的添加一句192.168.75.129 deathnote.v…

【Vue3】2-8 : 条件渲染与列表渲染及注意点

本书目录&#xff1a;点击进入 一、条件渲染 - v-if 表达式 1.1 真值与假值 1.2 v-if &#xff0c;v-else-if &#xff0c;v-else 1.3 实战&#xff1a;isShow1 为真值时 显示 bbbbb &#xff1e; 代码 &#xff1e; 效果 二、列表渲染 - v-for 2.1 渲染 - 数组 &…

Spring基于注解的AOP控制事务

首先在.xml中开启sprong对注解事务的支持 applicationContext.xml <tx:annotation-driven transaction-manager"transactionManager"/> 然后再Service中加上注解 service Service Transactional(readOnlytrue,propagation Propagation.SUPPORTS) public cl…

Vue-11、Vue计算属性

Vue计算属性是Vue实例的属性&#xff0c;用来根据已有的数据进行计算得到新的数据。计算属性的值会根据它的依赖缓存起来&#xff0c;在依赖没有发生改变时直接返回缓存的值&#xff0c;提高了性能。 计算属性的定义方式为在Vue实例中使用computed关键字&#xff0c;并将计算属…

(Matlab)基于CNN-GRU的多输入分类(卷积神经网络-门控循环单元网络)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整代码数据分享&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译…

雍禾医疗启动“毛发森林”公益计划 为地球种植“发际线”

不久前&#xff0c;由雍禾植发、新华网及中国绿化基金会三方共同发起的 “毛发森林地球生发计划”在内蒙古自治区阿拉善盟额济纳旗揭牌启动,此计划将陆续在西部严重沙化地区植下十万棵梭梭树改善荒漠化地区环境。 据悉,早在2023年3月,雍禾植发就主动与新华网一起启动“让美好生…

Rabbitmq 消息可靠性保证

1、简介 消息的可靠性投递就是要保证消息投递过程中每一个环节都要成功&#xff0c;本文详细介绍两个环节的消息可靠性传递方式&#xff1a;1&#xff09;、消息传递到交换机的 confirm 模式&#xff1b;2&#xff09;、消息传递到队列的 Return 模式。 消息从 producer 到 ex…

Msa全球最新研究:多系统萎缩特效药全球最新进展?

多系统萎缩&#xff0c;是一种以神经系统为主的遗传性疾病&#xff0c;典型症状表现为运动障碍、自主神经功能障碍和认知障碍等。对于这种疾病&#xff0c;西医目前尚未有明确的根治办法&#xff0c;大多数医生只能通过药物缓解患者的症状&#xff0c;但无法彻底治愈。 然而&a…

第9章 正则表达式

学习目标 熟悉正则表达式,能够说出正则表达式的概念和作用 掌握正则表达式的创建,能够使用两种方式创建正则表达式 掌握正则表达式的使用,能够使用正则表达式进行字符串匹配 掌握正则表达式中元字符的使用,能够根据需求选择合适的元字符 掌握正则表达式中模式修饰符的使用,…

CDN加速之HTTPS配置

记录一下HTTPS配置的免费证书配置 2张图搞定 最后补充说明&#xff1a; 由于CDN采用的Tengine服务基于Nginx&#xff0c;因此开启HTTPS安全加速功能的加速域名&#xff0c;只支持上传Nginx能读取的PEM格式的证书。如果证书不是PEM格式&#xff0c;需转换成PEM格式。转换方法&a…

C#,字符串匹配(模式搜索)KMP算法的源代码与数据可视化

D.E.Knuth J.H.Morris 一、KMP算法 KMP 算法&#xff08;Knuth-Morris-Pratt 算法&#xff09;是其中一个著名的、传统的字符串匹配算法&#xff0c;效率比较高。 KMP算法由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt在 Brute-Force算法的基础上提出的模式匹配的改进算法。…

江山易改本性难移之ZYNQ SDK QSPI固化bug及其解决方法

之前在Vivado2018.3通过QSPI方式固化程序时出现问题&#xff0c;显示flash擦除成功&#xff0c;但最后总是不能写入到flash中。 查资料发现从VIVADO 2017.3版本开始&#xff0c;Xilinx官方为了使Zynq-7000和Zynq UltraScale 实现流程相同&#xff0c;在QSPI FLASH使用上做了变化…

基于JAVA+SpringBoot的高校学术报告系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 智慧高校学术报告系统…

【SpringCloud】之入门级及nacos的集成使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringCloud开发之入门级及nacos》。&#x1f3…

设计模式面试

C 面向对象设计 封装&#xff1a;隐藏内部实现继承&#xff1a;复用现有代码多态&#xff1a;改写对象行为 设计模式关键在于分解和抽象; 设计模式的主要目的是易于变化 面向对象设计原则–比设计模式更加重要 违背了设计原则&#xff0c;设计模式是错误的。 依赖倒置原则…

你们做外贸主要的获客渠道有哪些?

昨天跟一个同行朋友聊天&#xff0c;他原本主打产品是做动力类的&#xff0c;这两年竞争太大&#xff0c;订单也减少了很多。为了求发展&#xff0c;就拓品了&#xff0c;而拓展的新品刚好是我们这一块&#xff0c;而且非常迅速地找到场地把生产线弄了起来&#xff0c;还不断扩…

严格次小生成树(LCA+Kruskal)

一、次小生成树 次小生成树是指在给定的无向图中&#xff0c;如果存在最小生成树和次小生成树&#xff0c;那么对于任何一颗最小生成树来看&#xff0c;都存在一颗次小生成树&#xff0c;使得这两棵树只有一条边不同。次小生成树的边权和大于等于最小生成树的另一颗树&#xf…