Omni Router: 适用于 Open WebUI 的多模型供应商 & 多用户灵活计费管理 Pipeline

203 天前
 awkamo

概述

Open WebUI 功能很强大,但没有多用户计费功能,也就是说,不能追踪每个用户的用量,也不能实现按量计费。另外,如果要接入多个模型供应商,比如 Deepseek R1 就有火山引擎、阿里云等等,也不是那么方便。

现有的各种解决方案我看了都不满意,于是自己做了一个,分享给大家,目标场景是自用+小范围共享,可以很方便地管理多个来源的模型的计费配置,记录各个用户的用量,适合朋友/熟人/小团体之间使用。

地址: https://github.com/moeakwak/openwebui-omni-router-pipeline (求 star ~)

目前还没时间写详细的配置教程,也暂无 README ,wiki 里有一个简单的使用说明,可能需要你对 Open WebUI 比较了解才能用起来。

特点

整个 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:简易配置指南(中文)

2236 次点击
所在节点    分享创造
6 条回复
boleyn1992
203 天前
支持,用过你的 cws ,感谢 op
lovestudykid
203 天前
配置文件可以在 GUI 设置吗,或者用 API 自动获取,一个个填太傻了
lovestudykid
203 天前
@lovestudykid 另外可以适配下 Perplexity 么,把 citation 拼接到回复中
awkamo
202 天前
@lovestudykid 目前暂时没精力做 GUI 。perplexity 适配这个可以有👀
x4gz
186 天前
试了下 thinking 的时候看起来是重复了一次 请问是我设置有误吗
awkamo
185 天前
@x4gz 我用着没这个问题🤔 不知道为什么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1113354

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX