惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Help Net Security
Help Net Security
月光博客
月光博客
N
News and Events Feed by Topic
Cloudbric
Cloudbric
博客园 - 司徒正美
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tenable Blog
The Register - Security
The Register - Security
The Hacker News
The Hacker News
I
InfoQ
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
WordPress大学
WordPress大学
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
C
Cisco Blogs
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Latest news
Latest news
PCI Perspectives
PCI Perspectives
T
The Blog of Author Tim Ferriss
P
Palo Alto Networks Blog
T
Tor Project blog
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Webroot Blog
Webroot Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

好好学习的郝

ClawdBot(OpenClaw)试用记录 编程辅助工具 Codex 入门篇 编程辅助工具 Claude Code 入门篇 Claude API 中转服务 Claude Relay Service LLM 接口管理和分发系统 New API 好好学Git:Git Submodule详解 编程辅助工具Cursor入门篇 好好学Golang:Golang问题记录 One API配置自定义渠道 FastAPI入门篇 好好学Docker:使用Docker安装配置AList 好好学Docker:容器指标查看工具ctop 好好学Docker:自建RustDesk Server 好好学Linux:Ubuntu18 升级到 Ubuntu22 好好学Docker:使用Docker安装配置FileBrowser 邮箱配置中的SPF、DKIM、DMARC记录 One API 开发环境配置 好好学K8S:K8S中的Leader Election机制 好好学Golang:Viper库
LLM 接口管理和分发系统 One API
本文作者: 好好学习的郝 · 2024-10-26 · via 好好学习的郝

One API是一个LLM代理系统,支持LLM接口管理和消息分发。使得用户可以通过标准的 OpenAI API 格式访问所有的大模型,开箱即用。

One API 比 openai-forword 更强大,因为 One API 除了作为LLM代理,还可以作为LLM一个中间商系统。

相关文档:

2. One API核心功能

  • 支持多种大模型:OpenAI、Claude、Gemini、Mistral、豆包、文心一言、通义千问、腾讯混元、SiliconCloud等等等等。
  • 支持 stream 模式,可以通过流式传输实现打字机效果
  • 支持绘图接口
  • 支持失败自动重试
  • 支持多机部署,提高并发
  • 支持渠道管理,批量创建渠道,支持渠道设置模型列表,支持通过负载均衡访问多个渠道
  • 支持多用户管理,支持用户额度配置,支持充值,支持用户分组以及渠道分组,支持为不同分组设置不同的倍率
  • 支持令牌管理,设置令牌的过期时间、额度、允许的 IP 范围以及允许的模型访问

3. 安装配置 One API

3.1. 安装配置 One API 概述

One API 提供了多种安装部署方式,包括Docker部署、裸机编译部署、多机部署、宝塔部署、第三方平台一键部署等。
本文中选择使用Docker部署,数据库选择MySQL,不使用Redis。

3.2. 安装MySQL(可选)

1、安装MySQL8,参考文档好好学MySQL:使用Docker安装配置MySQL

2、创建一个数据库,名称为 oneapi

3.3. 安装 One API

1、下载 one-api 镜像

1
docker pull justsong/one-api:v0.6.10-alpha.1

2、运行 one-api 容器
使用SQLite数据库:

1
2
3
4
5
6
docker run --name one-api -d \
--restart always \
-p 3000:3000 \
-e TZ=Asia/Shanghai \
-v /opt/one-api/data:/data \
justsong/one-api:v0.6.11-alpha.8

备用镜像地址:ghcr.io/songquanpeng/one-api:v0.6.11-alpha.8

使用MySQL数据库:

1
2
3
4
5
6
7
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 /opt/one-api/data:/data \
justsong/one-api:v0.6.11-alpha.8

其中,SQL_DSN的值要改成自己的MySQL配置。

3、查看容器状态

1
2
docker ps | grep one-api
docker logs one-api

3.4. 配置Nginx

参考配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server{
server_name oneapi.voidking.com; # 请根据实际情况修改你的域名

location / {
client_max_body_size 64m;
proxy_http_version 1.1;
proxy_pass http://localhost:3000; # 请根据实际情况修改你的端口
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_read_timeout 300s; # GPT-4 需要较长的超时时间,请自行调整
}
}

4. 使用 One API

4.1. 登录 One API

1、使用 IP+端口 或者 域名 访问 One API 首页

2、点击页面右上角 登录,登录进入管理页面
默认用户名为 root ,密码为 123456,登录后请先修改密码

4.2. 系统配置

4.2.1. 配置服务器地址

1、点击设置

2、配置服务器地址
该地址要和配置的域名一致。

4.2.2. 配置用户登录和注册方式

1、点击设置

2、配置登录注册部分,选择登录和注册方式

3、配置邮箱域名白名单

4.3. 配置渠道

1、点击渠道,添加新的渠道

2、填入渠道信息

  • 选择类型
  • 填入名称
  • 选择分组
  • 选择模型或者填入模型
  • 填入密钥
  • 部分类型需要填入 base_url
  • 填入模型重定向(可选)

填入的模型,其实是oneapi中的模型名,默认与真实模型名相同。如果oneapi中的模型名,与真实模型名不同,那么可以配置模型重定向。
例如:oneapi中模型名是 gpt3.5-test,真实模型名是 gpt-3.5-turbo-16k ,那么模型重定向配置如下

1
2
3
{
"gpt3.5-test": "gpt-3.5-turbo-16k"
}

3、提交,并点击测试

注意:根据个人经验,添加渠道并且测试成功后,并不能立刻通过API调用。
如果立刻调用,会报错:

1
openai.InternalServerError: Error code: 503 - {'error': {'message': '当前分组 default 下对于模型 xxx 无可用渠道 (request id: xxx)', 'type': 'one_api_error'}}

需要等待2到3分钟,再进行API调用才会正常,也许是oneapi的什么机制。

4.4. 配置额度

1、点击用户,选择某一个用户,编辑

2、剩余额度填入 token 数,会自动显示等价金额
100000 token,等价金额 0.2 刀

3、提交

4.5. 配置令牌

1、用户登录 One API

2、点击令牌,添加新的令牌

3、填入令牌信息

  • 名称
  • 模型范围
  • IP限制
  • 过期时间
  • 额度

4、提交

5、复制 token
找到新创建的令牌,点击复制,就可以获取到 token
注意:该 token 对应的 base_url 是我们配置的域名 https://oneapi.voidking.com/v1

6、聊天
找到新创建的令牌,点击聊天,会自动跳转到 NextChat,同时提示自动填入 base_url 和 token,点击确定,就可以使用 One API 代理进行聊天了。

5. 模型价格与倍率

参考文档:

模型倍率和补全倍率算法:

1
2
3
基准价格:0.002 $ /1k tokens
模型倍率 = 输入价格 / 基准价格
补全倍率 = 输出价格 / 输入价格

假设X模型的价格为 $0.18/M input tokens$0.72/M output tokens,那么它的模型倍率和补全倍率如下:

1
2
模型倍率 = 输入价格 / 基准价格 = (0.18/1000) / 0.002 = 0.09
补全倍率 = 输出价格 / 输入价格 = 0.72 / 0.18 = 4

在oneapi代码中,在计算费用时,涉及到变量包括:

  • model_name:模型名(针对模型名配置模型倍率和补全倍率)
  • base_price:基准价格,0.002 $ /1k tokens
  • prompt_tokens:提示词token数
  • completion_tokens:返回token数
  • model_ratio:模型倍率
  • completion_ratio:补全倍率
  • group_ratio:分组倍率(针对不同用户类型,控制打折或溢价)
  • quota:某个大模型的提示词token数和返回token数,换算成基准价格token数

变量关系如下:

1
quota = ((prompt_tokens * model_ratio) + (completion_ratio * model_ratio * completion_ratio)) * group_ratio

最终费用为:

1
cost = quota * base_price = quota * (0.002/1000)

6. API 调用 One API

参考文档:

6.1. curl调用测试

1
2
3
4
5
6
7
8
9
10
11
12
curl "https://oneapi.voidking.com/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <ONE_API_KEY>" \
-d '{
"model": "gpt-3.5-turbo-16k",
"messages": [
{
"role": "user",
"content": "hello!"
}
]
}'

6.2. python调用测试

1、编写测试脚本 test.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from openai import OpenAI

client = OpenAI(
base_url="https://oneapi.voidking.com/v1",
api_key="<ONE_API_KEY>",
)

completion = client.chat.completions.create(
model="gpt-3.5-turbo-16k",
messages=[
{
"role": "user",
"content": "hello!"
}
]
)

print(completion.choices[0].message.content)

2、运行脚本

1
python test.py