Back
Featured image of post 只要一个接口访遍所有AI模型

只要一个接口访遍所有AI模型

随着国内国外各种模型层出不穷,爱折腾的人儿会今天试一下文心,明天试一下通义,后天看到Mistral又想体验下,甚至自己部署的本地模型能不能出拿出来跑跑对比着看能否一战? 本文给一个我的实践方案。

前言

我曾经在私有化部署chatgpt-web中介绍过几种WebUI方案,也使用了较长一段时间,但其背后有两个问题一直没解决好: 其一便是如何方便的对接这层出不穷的模型?像azure-openai-proxyamazing-openai-api等作为Proxy,其支持的模型太有限啦。 其二是如何更加清楚的了解各个模型的调用情况?我期待有更完整的统计数据查看。似乎这一点,这些开源方案都未考虑。

直到我无意中翻到oneapi(https://github.com/songquanpeng/one-api),它大概满足了我的幻想。

OneAPI简介

现在的各种可私有化部署的chatgpt-web都是瞄着OpenAI API这个事实标准来的,而OneAPI就很好的继承了这一点,它们号称:“通过标准的 OpenAI API 格式访问所有的大模型,开箱即用”。

支持的模型比较多,当前(2024-3)已经有这么多了:

  • OpenAI ChatGPT 系列模型(支持 Azure OpenAI API)
  • Anthropic Claude 系列模型
  • Google PaLM2/Gemini 系列模型
  • Mistral 系列模型
  • 百度文心一言系列模型
  • 阿里通义千问系列模型
  • 讯飞星火认知大模型
  • 智谱 ChatGLM 系列模型
  • 360 智脑
  • 腾讯混元大模型
  • Moonshot AI
  • 百川大模型
  • 字节云雀大模型 (WIP)
  • MINIMAX
  • Groq
  • Ollama
  • 零一万物

我迫切所要的第一个期待就这样无情被满足:) 至于它提供的用户管理、充值等各种用于包装模型商业化的功能,咱自己搞着玩就不必关注了。但或许正因为要做用户管理和一些费用计费,所以各个接口的调用情况和日志也就齐全了,顺便满足了我的第二点期待。

OneAPI实操

部署OneAPI

在有容器就选择容器的时代,这个部署不要太简单,可以一句话搞定:

1
2
3
4
5
6
docker run --name one-api -d \
-p 3000:3000 \
-e TZ=Asia/Shanghai \
-v /home/kevin/one-api:/data \
--restart always \
justsong/one-api

如果你不想丢失你后面辛苦设置的配置,就需要像上面挂载一个卷给它。当然如果你有一个MySQL,将数据持久化给它是更棒的想法。你想试玩一下,上面就够啦~

配置渠道和模型

部署完毕后,访问所在机器的3000端口即可打开其Web页面。使用管理员用户root密码123456(看docker启动日志可得)登录后,就可以配置渠道了,这里的渠道可以理解为提供模型的平台。你可以根据手上的资源来创建相应的渠道。如下图是我创建的一个列表: oneapi-channel

同时,我们可以给每个渠道设置它所提供的模型列表,如下图: oneapi-channel-edit 需要注意清理一些你并不需要的模型,也可能需要手动录入一些模型名。当模型调用和实际不一致时,可能稍麻烦点配置个重定向(在azure openai时或能用上)。多数时候密钥填写一个即可,像百度文心一言的密钥需要如它提供所言,使用APIKey|SecretKey的方式,不要错填。而部分模型如果需要访问代理,也可以针对性的配置。

看起来这些配置还是挺合情合理的,每个都是有实打实用途。配置后想知道是否能正常,可以回到上面渠道页点击测试即可,顺便还可以看一下访问速度如何:)

当然,我相信每个模型的人手里都握了好多个key,如果你没有的话,国内随便申请几个玩一下,给你张机票随便求三连:

其中零一万物注册送60元,还是可以随便玩一下的,智能程度还不错:)遗憾的是腾讯混云大模型我还不能申请,要企业身份,希望早日开放吧~

添加专属令牌

经过上面配置,我们渠道和模型已经准备好了,接下来就是获得一个Key供使用。OneAPI有个好处便是,你访问各大模型的敏感信息如密钥和账户都是在它上面配置。然后它可创建令牌给你用于在其它Web端填写,甚至你可以放心的给朋友发送一个令牌,它有一个有效期和可设置费用情况。我们可以使用刚才的root账户创建,也可以另建一个账户创建令牌。 oneapi-token 然后点复制会获得你的API Key。 注意新的账户创建后是没有钱的,你可以使用root用户在兑换->添加新的兑换码后生成一个兑换码给刚才这个用户,然后这个用户去兑换即可。这虽然多了一两步,但是很简单的操作。

在ChatGPT-Next-Web使用

现在,你可以选择一个自己喜欢的chatgpt-Web端来部署了,这里我推荐使用ChatGPT-Next-Web,主要原因是它支持随便切换模型,并且通知启动参数自定义模型列表。

1
2
3
4
5
docker run -d -p 3003:3000 \
   -e OPENAI_API_KEY=<上面获得的OneAPI sk-开头的密钥> \
   -e BASE_URL=http://<你的OneAPI部署的地址>:3000 \
   -e CUSTOM_MODELS=ERNIE-3.5-8K,Llama-2-70B-Chat,ERNIE-4.0-8K,Yi-34B-Chat,yi-34b-chat-0205,mistral,gemma,gemma-7b,gemma:7b \
   yidadaa/chatgpt-next-web

我们可以从如下地方选择切换模型,可以方便的和各处模型对话啦! chatgpt-next-web

如果你有多个渠道提供了同一个模型,OneAPI后端会自动作负载均衡,当然你也可以指定使用某个渠道。当我看到OneAPI的渠道还支持Ollama时,便知道本地模型也有机会统一进来啦~

加入免费本地模型

本地模型意味着量大管饱,看到OneAPI支持Ollama后,我便打开了台式机的电源,我们一起试试看~

使用Ollama部署本地模型

如果你没有使用过Ollama,那么容我简单介绍两句,不对,只需要一句:

Get up and running with large language models locally.

它支持蛮多的主流开源模型的,你可以在这里查到,我就不搬运啦! 为了获得较好的推理速度,你可能需要使用到GPU加速,我试过Macbook M系列芯片速度也是不错的。然后给几个命令(以下是在Windows中执行的,Linux也类似):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看当前已经下载的模型列表
ollama list

# 下载模型(去选择你喜欢的模型吧)
ollama pull Mistral

# 修改监听端口(默认监听在127.0.0.1,为了能被外部访问到,需要修改)
$env:ollama_host = "0.0.0.0:8899"

# 开启服务
ollama serve

启动后,我们可验证是否可用:

1
2
3
4
5
6
curl http://<你的ollama部署的机器IP>:8899/api/chat -d '{
  "model": "mistral:latest",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'

有返回即准备工作完成啦!恭喜!!如果网络不通,请检查防火墙或端口等是否正常哈~

在OneAPI中使用本地模型

我们在创建渠道时选择Ollama,然后手工填上自己要使用的模型,最重要的是后面在代理中写上自己ollama服务的地址即可,如下图所示: oneapi-ollama 之后我们修改一下ChatGPT-Next-Web的启动参数,将这些Ollama的模型暴露出去即可在页面中选择和使用啦~

后记

到这里,本文接近尾声了。OneAPI的功能不止于此,还有Embeding,绘画等API也适配了,未来还有进一步折腾的空间。不过虽说看起来完美了,但我还有点不爽。主要原因是模型的使用观测上依然不太够,我希望对各个模型使用的token数量和时间有详细统计,或许在OneAPI中集成Prometheus是个不错的主意,看了下Issue还没有涉及相关讨论,未来有空给集成一版看看效果,如果你也想要此功能,欢迎持续关注!

我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:

微信公众号