为么要是用 One-API
从 v4.1.1 版本开始,GeekAI 将不在兼容多平台的 API,只支持类 OpenAI 格式的大模型 API,主要原因如下:
- 各种大模型层出不穷,要兼容的代码量越来越大,导致系统越来越臃肿。
- one-api (opens new window) 是一个非常优秀的大模型 API 整合框架,使用简单,功能强大,几乎支持市面上所有的主流模型,以及像 ollama 这种本地大模型的 API 服务,关键是又是完全免费开源系统,因为无需再重复造轮子,直接用这个工具即可。
使用 one-api,你可以轻松把你的所有不同平台的 API 资源(OpenAI,Claude,Azure,谷歌,星火,百度,字节,本地模型等)聚合到一起,然后作为统一的 API 接口向你应用提供服务。这样你在应用端就不需要再去兼容各个平台的 API 了,减少耦合。
其次,聚合的渠道也可以再次聚合,比如你买的中转站,已经是聚合渠道了,假设每个中转站支持的并发是1000,那么如果你买了三个不同中转平台的 API KEY,那么你聚合一起的并发就是 3000。能否大大提升你的应用 API 调用的并发数。
# 部署
首先拉取 docker 镜像,使用 Docker 拉取的最新镜像可能是 alpha 版本,我们这里手动指定稳定版本,我写本文档的时候的,one-api 的最新稳定版本是 v0.6.7。
使用 SQLite 的部署:
docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api:v0.6.7
使用 MySQL 的部署命令,在上面的基础上添加 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"
,请自行修改数据库连接参数。
docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api:v0.6.7
其中,-p 3000:3000
中的第一个 3000 是宿主机的端口,可以根据需要进行修改。
数据和日志将会保存在宿主机的 /home/ubuntu/data/one-api
目录,请确保该目录存在且具有写入权限,或者更改为合适的目录。
如果上面的镜像无法拉取,可以尝试使用 GitHub 的 Docker 镜像,将上面的 justsong/one-api
替换为 registry.cn-shenzhen.aliyuncs.com/geekmaster/one-api
即可。
也可以直接 docker-compose 启动,复制下面的内容到 docker-compose.yaml
services:
redis:
image: "registry.cn-shenzhen.aliyuncs.com/geekmaster/one-api:v0.6.7"
container_name: "one-api"
restart: always
environment:
- TZ="Asia/Shanghai"
#- SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"
ports:
- "3000:3000"
volumes:
- ./data:/data
然后运行 docker-compose up -d
启动。
# 配置
访问 http://localhost:3000,使用 root/123456 登录后,点击 “渠道”
然后点击 “添加新的渠道”,填上渠道信息,保存。
这里需要注意的,这这里的渠道可以是单一渠道,比如 OpenAI,Kimi,百度等,也是聚合渠道,比如说你购买的中转 API 就是一种聚合渠道,可以同时支持 OpenAI 和各种国产模型。只要你在“模型”这一栏把渠道支持的模型全写上去就好。
在渠道列表页还可以设置渠道的优先级,优先级高的渠道将会被优先调用,建议把稳定的渠道设置较高的优先级,这样能增加 API 的可用性。
# 使用
配置好渠道之后,one-api 就可以使用了,我们先创建一个令牌。
填好令牌信息,保存
复制令牌:
然后就可以使用该令牌和 API 地址(http://localhost:3000)来调用 one-api 的 API 了。
curl http://localhost:3000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-PQtiDuMUpYUtzHjtF4B60c47566b44699f4b33Ed480160De" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}'
# 响应
{
"id": "chatcmpl-9qGUJ9P4QinHWPMTIHjny47Sp665T",
"object": "chat.completion",
"created": 1722243463,
"model": "gpt-4o-mini-2024-07-18",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?"
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 9,
"total_tokens": 18
},
"system_fingerprint": "fp_ba606877f9"
}
# Nginx 转发
如果你想使用 one-api 对外提供服务的话,可以使用 nginx 做一层转发:
map $http_upgrade $connection_upgrade {
default upgrade;
'websocket' upgrade;
}
server {
listen 80;
server_name api.abc.com; #替换成你自己的域名
location / {
proxy_http_version 1.1;
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 12s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3000;
}
}
这样你就可以使用 http://api.abc.com 访问 one-api 服务了。
# GeekAI 配置
在 GeekAI 中配置自己搭建的 one-api 非常简单,只需要登录管理后台,选择 “API-KEY” 菜单,点击“添加 API-EKY”按钮,填入 API 信息即可。
← GPT-Plus和GPTs 常见错误处理 →