V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
awkamo
V2EX  ›  分享创造

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

  •  
  •   awkamo · 21 小时 20 分钟前 · 395 次点击

    概述

    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 ):

    omni-router-demo-1

    通过自助机器人查看用户最近的请求记录(管理员可查看全局最近的使用情况):

    omni-router-demo-2

    时间段内使用情况统计(仅供演示,简化了计费):

    omni-router-demo-3

    关于计费

    可以为模型供应商设置倍率,则一次 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:简易配置指南(中文)

    4 条回复    2025-02-22 10:08:09 +08:00
    boleyn1992
        1
    boleyn1992  
       21 小时 13 分钟前 via Android
    支持,用过你的 cws ,感谢 op
    lovestudykid
        2
    lovestudykid  
       16 小时 58 分钟前
    配置文件可以在 GUI 设置吗,或者用 API 自动获取,一个个填太傻了
    lovestudykid
        3
    lovestudykid  
       16 小时 12 分钟前
    @lovestudykid 另外可以适配下 Perplexity 么,把 citation 拼接到回复中
    awkamo
        4
    awkamo  
    OP
       6 小时 50 分钟前 via Android
    @lovestudykid 目前暂时没精力做 GUI 。perplexity 适配这个可以有👀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2931 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 08:58 · PVG 16:58 · LAX 00:58 · JFK 03:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.