
云原生 API 网关 APISIX 入门教程
随着国内国外各种模型层出不穷,爱折腾的人儿会今天试一下文心,明天试一下通义,后天看到 Mistral 又想体验下,甚至自己部署的本地模型能不能出拿出来跑跑对比着看能否一战?本文给一个我的实践方案。
我曾经在私有化部署 chatgpt-web中介绍过几种 WebUI 方案,也使用了较长一段时间,但其背后有两个问题一直没解决好:其一便是如何方便的对接这层出不穷的模型?像azure-openai-proxy和amazing-openai-api等作为 Proxy,其支持的模型太有限啦。其二是如何更加清楚的了解各个模型的调用情况?我期待有更完整的统计数据查看。似乎这一点,这些开源方案都未考虑。
直到我无意中翻到oneapi,它满足了我的幻想。
现在的各种可私有化部署的 chatgpt-web 都是瞄着 OpenAI API 这个事实标准来的,而 OneAPI 就很好的继承了这一点,它们号称:“通过标准的 OpenAI API 格式访问所有的大模型,开箱即用”。
支持的模型比较多,当前(2024-3)已经有这么多了:
我迫切所要的第一个期待就这样无情被满足:) 至于它提供的用户管理、充值等各种用于包装模型商业化的功能,咱自己搞着玩就不必关注了。但或许正因为要做用户管理和一些费用计费,所以各个接口的调用情况和日志也就齐全了,顺便满足了我的第二点期待。
在有容器就选择容器的时代,这个部署不要太简单,可以一句话搞定:
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 启动日志可得)登录后,就可以配置渠道了,这里的渠道可以理解为提供模型的平台。你可以根据手上的资源来创建相应的渠道。如下图是我创建的一个列表:
同时,我们可以给每个渠道设置它所提供的模型列表,如下图:
需要注意清理一些你并不需要的模型,也可能需要手动录入一些模型名。当模型调用和实际不一致时,可能稍麻烦点配置个重定向(在 azure openai 时或能用上)。多数时候密钥填写一个即可,像百度文心一言的密钥需要如它提供所言,使用 APIKey|SecretKey 的方式,不要错填。而部分模型如果需要访问代理,也可以针对性的配置。
看起来这些配置还是挺合情合理的,每个都是有实打实用途。配置后想知道是否能正常,可以回到上面渠道页点击测试即可,顺便还可以看一下访问速度如何:)
当然,我相信每个玩模型的人手里都握了好多个 key,如果你没有的话,国内随便申请几个玩一下,给你张机票顺便求三连:
其中零一万物注册送 60 元,还是可以随便玩一下的,智能程度还不错:)遗憾的是腾讯混云大模型我还不能申请,要企业身份,希望早日开放吧~
经过上面配置,我们渠道和模型已经准备好了,接下来就是获得一个 Key 供使用。OneAPI 有个好处便是,你访问各大模型的敏感信息如密钥和账户都是在它上面配置。然后它可创建令牌给你用于在其它 Web 端填写,甚至你可以放心的给朋友发送一个令牌,它有一个有效期和可设置费用情况。我们可以使用刚才的 root 账户创建,也可以另建一个账户创建令牌。
然后点复制会获得你的 API Key。注意新的账户创建后是没有钱的,你可以使用 root 用户在兑换
->添加新的兑换码
后生成一个兑换码给刚才这个用户,然后这个用户去兑换即可。这虽然多了一两步,但是很简单的操作。
现在,你可以选择一个自己喜欢的 chatgpt-Web 端来部署了,这里我推荐使用ChatGPT-Next-Web,主要原因是它支持随便切换模型,并且通知启动参数自定义模型列表。
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
我们可以从如下地方选择切换模型,可以方便的和各处模型对话啦!
如果你有多个渠道提供了同一个模型,OneAPI 后端会自动作负载均衡,当然你也可以指定使用某个渠道。当我看到 OneAPI 的渠道还支持Ollama时,便知道本地模型也有机会统一进来啦~
本地模型意味着量大管饱,看到 OneAPI 支持 Ollama 后,我便打开了台式机的电源,我们一起试试看~
如果你没有使用过Ollama
,那么容我简单介绍两句,不对,只需要一句:
Get up and running with large language models locally.
它支持蛮多的主流开源模型的,你可以在这里查到,我就不搬运啦!为了获得较好的推理速度,你可能需要使用到 GPU 加速,我试过 Macbook M 系列芯片速度也是不错的。然后给几个命令(以下是在 Windows 中执行的,Linux 也类似):
# 查看当前已经下载的模型列表
ollama list
# 下载模型(去选择你喜欢的模型吧)
ollama pull Mistral
# 修改监听端口(默认监听在127.0.0.1,为了能被外部访问到,需要修改)
$env:ollama_host = "0.0.0.0:8899"
# 开启服务
ollama serve
启动后,我们可验证是否可用:
curl http://<你的ollama部署的机器IP>:8899/api/chat -d '{
"model": "mistral:latest",
"messages": [
{ "role": "user", "content": "why is the sky blue?" }
]
}'
有返回即准备工作完成啦!恭喜!!如果网络不通,请检查防火墙或端口等是否正常哈~
我们在创建渠道时选择Ollama
,然后手工填上自己要使用的模型,最重要的是后面在代理中写上自己 ollama 服务的地址即可,如下图所示:
之后我们修改一下ChatGPT-Next-Web
的启动参数,将这些 Ollama 的模型暴露出去即可在页面中选择和使用啦~
到这里,本文接近尾声了。OneAPI 的功能不止于此,还有 Embeding,绘画等 API 也适配了,未来还有进一步折腾的空间。不过虽说看起来完美了,但我还有点不爽。主要原因是模型的使用观测上依然不太够,我希望对各个模型使用的 token 数量和时间有详细统计,或许在 OneAPI 中集成 Prometheus 是个不错的主意,看了下 Issue 还没有涉及相关讨论,未来有空给集成一版看看效果,如果你也想要此功能,欢迎持续关注!
文章转自微信公众号@爱折腾的风