概述
Open WebUI 功能很强大,但没有多用户计费功能,也就是说,不能追踪每个用户的用量,也不能实现按量计费。另外,如果要接入多个模型供应商,比如 Deepseek R1 就有火山引擎、阿里云等等,也不是那么方便。
现有的各种解决方案我看了都不满意,于是自己做了一个,分享给大家,目标场景是自用+小范围共享,可以很方便地管理多个来源的模型的计费配置,记录各个用户的用量,适合朋友/熟人/小团体之间使用。
地址: https://github.com/moeakwak/openwebui-omni-router-pipeline (求 star ~)
目前还没时间写详细的配置教程,也暂无 README ,wiki 里有一个简单的使用说明,可能需要你对 Open WebUI 比较了解才能用起来。
特点
- 模型计费配置:支持自定义模型供应商和模型列表,每个模型自由设置价格,支持倍率、按量计费、按次数计费,配置起来非常灵活非常方便(下文有例子)
- 多用户用量统计和计费:每一次 completion 请求都会统计 token 用量,根据配置进行计费
- 显示费用:每条消息最后能够显示这一条消息的花费,非常直观
- 自助机器人:专门提供了一个自助服务机器人,就在 Open WebUI 网页 chat 中选择该自助机器人模型,即可完成用量查询/充值等操作
- 适配 OpenRouter:对 OpenRouter 做了特别适配,支持后台调用 API 获取精确的 token 计费结果
- 适配 Deepseek:对 Deepseek R1 推理模型的 reasoning_content 做了特别适配,自动转换成
<think>tag
整个 Pipeline 使用 SQLite 存储数据。
效果
每条消息可显示费用(这里使用了某个中转 API ,倍率设置成了 3.2 ,所以按照官方价格消耗了 0.000122 ,给用户扣费了 0.000392 ):
通过自助机器人查看用户最近的请求记录(管理员可查看全局最近的使用情况):
时间段内使用情况统计(仅供演示,简化了计费):
关于计费
可以为模型供应商设置倍率,则一次 completion 的实际费用是 用量×模型价格×模型供应商倍率。这个和很多 API 中转站很像:例如说你想要以 RMB 结算,但是很多供应商是美元结算,你可以在模型里设置成官方的费用(比如输入$5 ,输出$15 ),然后在模型供应商上设置 7.3 的倍率,避免了手动换算汇率。你还可以设置成更低或更高的倍率,这样一来,同一个模型不用反复修改费用。
计费支持按量计费、按次计费等等。这里有一个例子(完整文件在 https://github.com/moeakwak/openwebui-omni-router-pipeline/blob/main/omni_router.yaml ):
providers:
- key: OpenAI
url: https://api.openai.com/v1
api_key: sk-xxx
price_ratio: 7.3 # 倍率会影响该 provider 下所有模型的计费
- key: Deepseek
url: https://api.deepseek.com/v1
api_key: sk-xxx
price_ratio: 1
- key: OpenRouter
url: https://openrouter.ai/api/v1
api_key: sk-or-v1-xxx
price_ratio: 7.3
models:
- code: gpt-4o-2024-11-20
provider: OpenAI
human_name: GPT-4o-2024-11-20
prompt_price: 2.5
completion_price: 10
- code: anthropic/claude-3.5-sonnet
provider: OpenRouter
human_name: Claude-3.5-Sonnet (OpenRouter)
prompt_price: 3
completion_price: 15
update_usage_via_openrouter_api: true # 启用后,会通过 OpenRouter 的 API 更新 usage ,得到一个精确的 cost 结果
- code: deepseek-reasoner
provider: Deepseek
human_name: Deepseek R1 (Official)
prompt_price: 4
completion_price: 16
no_system_prompt: true # 不在请求中添加 system prompt
- code: deepseek/deepseek-r1:free
provider: OpenRouter
human_name: Deepseek R1 (OpenRouter, free)
prompt_price: 0
completion_price: 0
update_usage_via_openrouter_api: true
include_reasoning: true
extra_args: { "temperature": 0.6 } # 请求 payload 中的额外参数,会覆盖已有参数
no_system_prompt: true
简易使用说明
见 wiki:简易配置指南(中文)
