给 OpenViking 做个免费模型聚合入口,小米兜底

2026年08月15日0 次阅读0 人喜欢
New-APIOpenViking模型路由模型映射
所属合集

我服务器上跑着一个自部署的记忆系统 OpenViking,它把聊天、项目里的内容做语义提取和检索。内部有个 vlm 配置,管这些"读懂再存"的活。

先说一个前提,这决定了后面整个方案的走向:OpenViking 只有 vlm 这一个模型配置,没有单独的 llm 配置。语义提取、记忆提取、摘要、检索扩展,全走这一个 vlm。没法在它内部区分"这个任务用 A 模型、那个任务用 B 模型"。

之前 vlm 直接走小米的 mimo-v2.5,调用量不小,费用有点肉疼。想省,又受限于"只有一个 vlm 入口"这个约束——在 OpenViking 层面没法做模型区分,只能在上游想办法。

这个"只有一个 vlm"的设计,社区里也有人提过。OpenViking 的仓库有个 issue(#2716),建议加一个独立的纯文本 LLM 配置、跟视觉 VLM 分开,理由就是纯文本模型比视觉模型便宜。官方回复是:纯文本模型其实也能当 vlm 用,只是处理图片时会挂;而且已经有低成本的视觉模型可选,所以暂时不打算拆分。issue 链接:https://github.com/volcengine/OpenViking/issues/2716

既然官方不改,省费就只能放到上游去做了。

思路:把路由放到上游网关

既然 OpenViking 只认一个模型名,那就让它继续只认一个。真正的路由——哪些请求走免费渠道、哪些兜底到小米——放到它上游的 New-API 网关里做。

具体两步:模型映射做单入口,渠道优先级做兜底。

模型映射:一堆渠道捏成一个名字

我网关里已经接了几个免费模型渠道。New-API 支持 model_mapping,能把自定义模型名映射到渠道真实的上游模型。

我给每个免费渠道都配了映射,把统一的 openviking 这个名字,映射到各自最稳的免费模型上。小米渠道也映射成 openviking,指到 mimo-v2.5。

这样 OpenViking 只需要把 vlm 的 api_base 换成网关、model 换成 openviking,剩下的事它完全不用管。对外就是一个模型名,对内是一堆渠道。

这里有个坑:model_mapping 要生效,渠道的 models 字段里得同时有自定义名和上游名,少一个都不行。一开始只配了 mapping 没补 models,映射不生效。

优先级:免费优先,小米兜底

New-API 里渠道有两个相关参数:priority 和 weight。

priority 是优先级,数值越大越优先。选渠道的时候先按 priority 从高到低排,priority 高的先用。

weight 是权重,只在同一 priority 的一堆渠道里起作用,按权重随机分摊负载。

我的配置:免费渠道全部 priority=10,小米 priority=0。

请求进来,先找 priority=10 的免费渠道,免费渠道之间按 weight 随机分摊;只有免费渠道全部不可用,才会落到 priority=0 的小米。

小米就从"主力"变成了"兜底"。

一个 403 的插曲

建 token、测试的时候,报了个 403「无权访问 free-auto 分组」。

查下来是 New-API 全局配置里有三个东西各管各的:UserUsableGroups、GroupRatio、group_ratio_setting.group_ratio。新建的 free-auto 分组只进了最后一个,前两个里没有,所以 token 虽然属于这个分组,用户层面却根本不被允许访问它。

把 free-auto 补进前两个,403 消失,路由通了。

结果

改完以后,OpenViking 还是只配一个模型名,什么感知都没有。但请求进到网关,会优先走免费渠道,免费全挂了才兜底到小米。

费用上,小米从主力降级成兜底,大头都让免费渠道扛了。

加载评论中...