量子位 昨天
openJiuwen X-Router自演进模型路由技术首发,昇腾亲和,Agent越跑越省,实测减少50+%Token消耗
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

不是所有任务都需要最强的模型。让每一次请求选对模型,让每一次反馈都成为下一次更优、更省的选择。

你有没有想过,你的 Agent 可能一直在 " 用力过猛 "

先做一个思想实验。

你问 AI 助手一个再简单不过的问题:" 帮我把这句话翻译成英文。"

它调用的,是一个参数量千亿、跑在云端最贵算力上的模型。你问它一个需要通盘推演、写五十行代码、还要自己 debug 三轮的难题,它调用的还是同一个模型。

这是今天绝大多数 AI 应用的真实状态:一个模型包打天下。

问题还不止于 " 贵 "。真实场景里,一个 Agent 往往同时握着本地模型、云端模型,以及来自不同厂商的多种服务。当可选模型越来越多,新的麻烦随之出现:

简单任务用昂贵模型,带来不必要的成本;

复杂任务交给轻量模型,效果不稳定;

依赖固定规则做选择,很难跟上业务与模型的持续变化。

用户真正需要的,不是一张需要反复维护的模型路由表,而是让 Agent 自己完成判断:这次请求该由谁处理,为什么这样选择,下一次能否做得更好。

问题出在哪?出在我们把 " 路由 " 这件事给忘了。

从 " 一个模型包打天下 " 到 " 一支模型队伍 "

现实世界里的调度智慧,随处可见。

点外卖时,平台不会派最近的骑手去送最远的一单,也不会为了三公里的单子调动整个配送站;医院分诊台不会让所有人直接挂专家号,而是先判断病情轻重,再决定看哪个科室、找哪位医生;快递分拣中心如果想要 " 送得快 ",前提是 " 分得准 "。

它们的共同点是:手里有一支队伍,并且知道每一项任务该交给队里的谁。

Agent 也该如此。

今天的 Agent 背后,现实已经是一支队伍了:有的模型推理能力强但贵且慢,有的轻快便宜但只能干简单活,有的擅长写代码,有的多模态理解更好。

每个模型各有所长,也各有所短。以 PC 办公场景为例,删除文件和写 PPT,所需的能力显然不同。

问题是:谁来当这位调度员?

这就是 openJiuwen 智能路由要解决的事。

openJiuwen 是由华为 2012 实验室、华为云、终端、计算、算力先遣队等团队联合高校、企业等广大开发者联合构建的开源 AI Agent 平台。

此次,openJiuwen 团队给出的答案是——在 Agent 与模型之间,增加一层面向请求的智能决策能力,一个专门负责 "这一轮任务,该用哪个模型、用什么策略" 的路由引擎。

一句话说清:智能路由在做什么

基于任务复杂度,动态决策与编排群智协同及最优模型选择,实现成本 - 效果综合最优。

翻译成大白话:看菜下饭,量体裁衣。

简单的问题,用轻快的模型快速回;复杂的问题,调度更强的模型深思考;需要多个模型互相印证的问题,组织多模型协同作战、再统一汇总;而每一次决策的结果,都会变成经验,让下一次的判断更准。

这里的关键词是 "动态 "。它不是一个开关,不是一份写死的配置表,而是一个会随着任务、用户、负载、成本实时变化的决策系统。

这套系统要有三个属性,缺一个都不成立:

可配置——不同业务能带着自己的偏好进来。这一轮要最省,还是这一轮要最快,由业务方说了算,而不是被一套写死的规则绑住;

可演进——模型生态是流动的,新模型每个月都在冒出来,老模型在悄悄降价,同一模型迭代一个版本能力分布就可能换个样子。策略必须能跟着一起长;

可观测——每一次决策的依据、每一次执行的反馈都要能看见、能回溯。一个说不清 " 为什么选它 " 的路由器,用户不敢把它放进生产。

那它到底怎么做到的?

三层能力,构成一个完整的路由体系

openJiuwen 团队把这套体系拆成三层,它们各自解决一个独立的问题:第一层负责 " 看得准 ",第二层负责 " 选得对 ",第三层负责 " 越用越好 "。

第一层:精准画像—— " 认识队伍里的每个人 "

要做调度,首先得知道每个人擅长什么。

模型的能力不是一张静态标签。说 " 这个模型代码能力强 " 不够用——强到什么程度?在什么类型的题目上强?换个领域还强不强?模型还在迭代,能力还在变。

openJiuwen 的做法是:基于历史数据,离线刻画每个模型的能力画像,并在线动态刷新——当模型版本变动或表现发生变化时,画像的更新时延优于 1 分钟。

画什么?不只是 " 代码能力 8 分、数学能力 7 分 " 这种模糊打分,而是精细化的刻画:不同任务类型上的表现、不同难度下的表现、时延和功耗特性、成本量级。

有了精准的画像,路由才有一个可靠的起点——决策与执行分离,路由层只管判断,具体调用交给宿主,两者互不耦合。

△模型能力画像——每个模型都有一份动态更新的能力档案

第二层:决策—— " 这一轮,到底交给谁 "

画像有了,接下来是真正难的部分:面对一个具体请求,怎么选?

先看请求本身。Agent 的任务是多轮的、有状态的,复杂度判断不能只看当前这一句,要看整条轨迹:我们走到哪了,接下来要做什么,前面失败过什么。

openJiuwen 把最近的对话窗口连同工具调用进展一起送进判断,并专门做了一处处理——Agent 循环的尾部常被工具输出占满,任务本身会被挤出窗口时,openJiuwen 团队特别保留了最近一次用户诉求,确保调度员始终知道 " 雇主想要的是什么 "。

再看系统状态。这是纯算法视角容易漏掉、但对真实收益影响最大的一块:

KV 缓存亲和:这个请求的上下文,跟哪个模型上已有的缓存更 " 熟 "?复用缓存能省下大量重复计算——同样的模型,缓存命中与不命中,成本可以差出一截。

实时负载:此刻哪个模型更空闲、响应更快?同价位的两个模型,负载不同,时延可能差一倍。

目标可用性:某个模型刚超时或被限流,这一轮就不该再往它身上撞。这类信息会写进状态,成为下一次决策的排除项。

换句话说,路由的输入不只是 " 这个问题的难度 ",而是" 这个问题的难度 + 整个系统此刻的状态 "。

最后才是决策本身。这本质上是一个多目标优化问题:质量够不够、成本值不值、时延等不等得起、上下文和工具支不支持、用户更看重速度还是质量。

openJiuwen 的做法是基于候选模型能力、时延功耗、用户偏好等约束,构建启发式优化算法,综合选出最优模型——选的是 " 最优 " 的那一个,而不是 " 看起来最强 " 的那一个。

△动态路由决策——多路信息汇聚后的实时权衡。系统按 " 请求分析 → 算法判定 → 输出选择 → 宿主调用 " 的链路工作,模型池每次选其一

第三层:演进—— " 越用越准,而且要能跟着模型生态一起长 "

前两层解决的是 " 此刻怎么选 "。

但如前面所说,一套写完就冻结的策略,三个月后必然过时。所以第三层解决的是:这套系统能不能自己变聪明。

openJiuwen 的做法,是把 " 学习 " 从 " 运行 " 里拆出来——状态解耦。这一条是整套架构里最不起眼、但决定性的设计:

算法是纯函数:给定同样的请求和同样的状态快照,必须给出同样的决策。决策逻辑里不允许藏着跨请求的记忆,也不允许有隐藏的随机性。

状态是可丢弃的提示:所有跨请求的记忆——历史结果、排除项、缓存亲和、经验数据——全部外置到独立的状态层,算法每一轮只读它一眼。

反馈闭环:每次调用结束后,宿主把结果回报回来:成功还是失败、用了多久、大概花了多少、这一轮做得好不好。这些反馈写回状态层,成为下一轮的输入。

这三条合起来,产生了一个很实用的性质:状态丢了,只是降质为 " 冷路由 ",不会让请求失败;而算法要升级、要换一个新的学习模型,不用动状态层,也不用动宿主。

从运行时的角度看,这条闭环长这样:用户请求进来 → 路由算法分析请求、判定模型 → 宿主执行、调用选中的模型 → 返回用户;

与此同时,执行结果被送去评估(质量评分、调用成本、成败、时延,可接入后台评分模型)→ 关联请求、模型与反馈形成经验积累 → 演进模块检索相似经验、权衡质量与成本 →  应用于下一次决策。

系统在这里有一个克制而重要的默认:样本不足或优势不明显时,保留原判定——不为了 " 演进 " 而演进。

△反馈驱动的路由自演进——将执行结果转化为经验,持续修正后续选模决策

正是这个设计,让 " 演进 " 这条路真正走得通——算法和状态各自独立,谁升级都不会拖住对方。

于是就有了两条互不干扰的演进通路:一条在运行时自我学习,靠 Contextual Bandit 和轻量强化学习从真实反馈里持续抽经验;一条在逻辑上持续迭代,画像更新、算法替换、策略升级都是独立模块。

为什么这件事重要?

因为它决定了这套路由是 " 一次性的工程 ",还是 " 能活三年的基础设施 "。前者每次模型换代都要重做一遍,后者只需要换掉一个模块。

再进一步:从 " 选模型 " 到 " 编排协同 "

三层能力之上,还有一个更大的空间。

一是多模型协同。

当一个问题确实很难、单模型不足以给出可信答案时,路由层可以调度多个模型协同作答——让不同的模型分别给出参考结果,再经过语义去重、质量筛选、冲突消解、压缩整理,最终聚合成一个更高质量的答案。

多模型协同天然昂贵,所以关键在于能不能聪明地协同:重复的答案不必重复计算,站不住脚的答案及早淘汰,模型之间结论不一致时有机制判断谁更可信。

这类能力,openJiuwen 团队已经在WorkSwarm的MoA(多模型协同)中做了实现,并支持通过路由框架统一接入——路由决定 " 这一轮要不要发动多个模型、发动哪几个 ",MoA 负责 " 多个模型的结果怎么收拢成一个 "。

  一个管派谁上场,一个管场上怎么配合。

△MOA 多模型协同——重点不是 " 多 ",而是聚合得聪明

二是策略自编排。

不再局限于 " 选模型 ",而是把模型、Skill/Tool、SubAgent 等多种能力放在同一个调度框架下统一编排——某一步交给模型推理,某一步交给工具执行,某一步派个子 Agent 去查证。

路由的粒度,从 " 选模型 " 升级为 " 编排整个执行策略 "。

再加上策略自闭环优化:通过构建反馈 Hook 点和 Fallback 机制,验证并总结执行结果和错误根因,让策略能够自行优化——每一次失败都不会被浪费。

关键难点:在四个目标之间走钢丝

讲到这里,有必要单独说说这件事真正的难点。

模型路由最难的,从来不是 " 能不能选 ",而是如何在成本、时延、质量、上下文 / 工具兼容性之间做实时权衡。

把成本压到极致,质量可能就崩了,用户转头就走;

把质量顶到最高,成本会失控,业务方不答应;

一味追求低时延,可能在关键问题上给出草率答案;

只看单次最优,忽略了缓存复用,整体反而更贵。

这是一个典型的没有标准答案的多目标权衡问题。理论上没有免费的午餐,实践中也没有一个参数能适配所有场景。

openJiuwen 的思路不是去找一个 " 万能的最优解 ",而是把权衡这件事本身变成一个可配置、可演进、可观测的系统:不同业务可以带着自己的偏好进来;决策依据来自真实的执行反馈,而不是纸面上的假设;策略可以随着数据积累持续演进,越用越准。

这套机制落到代码里长什么样?看这张图。

△openJiuwen 智能路由整体架构——路由算法(Algorithm)、状态管理(State)、自演进(Evolving)三块解耦,向上对接 WorkSwarm/MoA 的协同编排,向下对接候选模型池;对外是纯函数接口调用,不产生无状态之外的影响

架构里的Algorithm一层,是把 " 怎么判断 " 做成可插拔的能力。

目前已经落地的算法包括x-router:基于五档复杂度分档的路由算法,支持端云分级、本地能力边界判断、进程内小模型分类器、失败降级永不升级,并用上下文 Bandit 做经验修正。

同层还有其他路线——比如 Rust 版本的轻量前瞻路由,走的是高维特征空间质量预测与任务轨迹预测、联合优化的路子,静态编译、无运行时依赖、可直接嵌入宿主进程。

也就是说,x-router 是这台引擎里的一个算法模块,而不是引擎本身。

引擎提供的是那套 " 可配置、可演进、可观测 " 的骨架;换算法不改骨架,换骨架不动算法。

下面的实测数据,用的就是 x-router 这条算法通路。

实测:在哪些榜单上,拿到了什么结果

技术讲完了,看效果。

openJiuwen 团队想回答两个最直接的问题:启用智能路由之后,能否减少不必要的模型调用成本?开启自演进之后,路由策略能否随着真实使用持续优化?

实验设置

团队把 x-router 接入WorkSwarm,使用PinchBench全量147 个任务进行评测,任务覆盖日志分析、数据分析、编码、研究等11 个类别。

x-router 的复杂度分类器采用本地部署的Qwen3-0.6B,直接跑在进程内,无需额外启动独立服务。五级模型池配置如下:

△五级模型池配置——从 SIMPLE 到 REASONING 五档,本地模型与云端模型混合编队

对应的能力分档逻辑是:从SIMPLE到REASONING,简单任务优先使用轻量模型,复杂任务按需升级能力——查询 "HTTP 429 是什么含义 " 走轻量模型,编写数据处理脚本走通用或高能力模型,多文档研究走研究型模型,数学证明与深度推理才交给推理模型。

△五级能力路由——根据任务复杂度匹配合适的模型能力,追求的不是 " 选更便宜的 ",而是 " 能用轻量模型完成就不必调用强模型,能力不足时才让更强模型接手 "

三种运行模式

为保证对比公平,三组实验使用相同的评测模型和评分标准,并统计不同模式下的PinchBench 得分及真实模型调用成本:

全云基线(All Kimi-K2-Thinking):不使用智能路由,所有请求统一交给指定的云端强模型;

x-router 静态路由:启用 x-router 的复杂度路由,但不开启自演进;

x-router Bandit 自演进:在静态路由基础上开启 Bandit 自演进,根据相似任务的真实执行结果动态调整路由策略。

结果一:PinchBench ——得分几乎持平,成本降 44.6%

△PinchBench 实测结果——横轴为模型调用总成本,纵轴为 PinchBench 得分;越靠近左上角,代表以更低成本拿到更高任务质量

x-router 静态路由取得66.3%的 PinchBench 得分,总模型调用成本  $8.25。相比全量调用 Kimi-K2-Thinking(71.36%、$11.11),得分下降 5.1%,而模型调用成本降低了 25.7%。

开启 Bandit 自演进后,成本进一步从$8.25降至$6.16,较静态路由再降约25.3%;与此同时,PinchBench 得分提高 4.4%,达到70.70%。

与全云基线相比:x-router Bandit 自演进模式得分 70.70% vs 71.36%,仅低0.66 个百分点,几乎持平;而模型调用成本从$11.11降至$6.16,整体降低约 44.6%。

这组对比回答了两个问题:静态路由证明了 " 按需选模 " 本身就能砍掉不必要的强模型调用;自演进则证明了——反馈闭环带来的不只是省钱,还有质量的回升。成本降了 25.3% 的同时得分反升 4.4%,这是 " 越用越准 " 最直接的证据。

结果二:Terminal-Bench/LLMRouterBench ——成功率达 Opus 的 95.2%,成本降 51.4%

openJiuwen 团队还在Terminal-Bench/LLMRouterBench上用Opus4.8/Qwen3.5-122B/Qwen3.5-35B 三档位模型池做了单轮 / 多轮路由测试:

cost focused模式下,降成本51.4%,成功率达 Opus 的95.2%;

quality focused模式下,降成本15.7%,成功率达 Opus 的98.6%。

△Terminal-Bench/LLMRouterBench 实测结果——横轴为模型调用总成本,纵轴为任务成功率;基于 Opus4.8/Qwen3.5-122B/Qwen3.5-35B 三档位模型池进行路由

两个榜单、两种偏好设置,指向同一个结论:接近顶配的质量,可以用大约一半的成本拿到。

而且 " 省多少、让多少质量 " 是用户自己选的——这正是 " 可配置 " 落到数字上的样子。

快速上手

1. 安装

model-router 的内核是 Rust,Python 侧是 PyO3 扩展。

git   clone   https://gitcode.com/openJiuwen/model-router.gitcd   model-routercargo build

pip   install maturinmaturin develop

如需使用 x-router 算法,在已激活的 Python 虚拟环境中执行:

maturin develop   --extras   x-router

2. 配置

路由的行为由一份 TOML 描述。最简形态如下:

# config/edge.tomlalgorithm   = "passthrough"

[ state ] backend   = "memory"ttl_secs   =   300max_entries   =   1024

[ targets ] models   = [ "local-default" ]

切换到 x-router 只需改算法名并补上模型池与分类器:

algorithm   = "x-router"

[ targets ] models   = [ "model-a", "model-b", "model-c", "model-d", "model-e" ]

[ x-router.classifier_model ] model_path   = "/path/to/qwen3-0.6b"local_models   = [ "model-a" ]

3. 调用

装配路由,发起请求,拿到决策后由宿主自己调用模型,再把结果回报回去——这就是前面说的 " 决策与执行分离 "。

import   openjiuwenfrom   openjiuwen   import   Feedback, Router

router = Router.from_config ( "config/cloud.toml" )

decision =   await   router.route ( {      "messages": [ {"role":   "user",   "content":   "hi"} ] ,      "session_id":   "s1",      "agent_id":   "host",} )

# 宿主自行调用 decision.selected_model_id 对应的模型

await   router.report (     Feedback.ok ( decision, latency_ms=12, session_id="s1", agent_id="host" ) )

x-router 的调用方式在语义上一致,分类器直接运行在本地进程中:

from openjiuwen import x_router

router = x_router.build_router ( "router.toml" )

selection = x_router.build_request (     [ {          "role":   "user",          "content":   "Compare Raft and Paxos for a five-node cluster."     } ] ,     session_id="s-1",     agent_id="my-agent", )

# Router 会从 decision.selected_model_id 中返回推荐调用的模型 decision = router.route_sync ( selection )

Rust 宿主可直接静态链接   openjiuwen-runtime:

use   openjiuwen_runtime::{Feedback,   RequestMetadata,   RouteHint,   RouteRequest,   Router};

let router =   Router::from_config ( "config/edge.toml" ) ?;let decision = router.route ( &req, &RouteHint::default ( ) ) ?;

let mut feedback =   Feedback::ok ( req.routing_key ( ) , &decision.selected_model_id,   40 ) ;feedback.route_id = decision.route_id.clone ( ) ;router.report ( feedback ) ;

详细使用说明参考代码仓 README。

为什么这件事,现在特别重要

最后聊几句判断。

第一,模型会越来越多,路由会越来越刚需。

今天大家还在讨论 " 哪个模型最强 ",但很快,这个问题会变成 " 哪个组合最合适 "。

因为模型生态正在快速分化:有的往强推理走,有的往轻量端侧走,有的往多模态走,有的专攻代码或某个垂直领域。

没有哪个模型能在所有维度上都赢,这意味着选择本身,正在成为一种核心能力。

第二,成本是 Agent 走向大规模落地的真正门槛。

Agent 和聊天机器人最大的区别,是它会长时间、多轮次、多工具地持续工作。

这意味着 Token 消耗不是线性增长,而是成倍放大。一个在 Demo 里跑得很漂亮的能力,如果成本压不下来,在真实业务里就跑不起来。

路由不是锦上添花的优化,而是 Agent 能不能规模化的前置条件。

第三,通用性比单点最优更重要。

团队不打算为某个特定场景做一套定制的最优解。openJiuwen 智能路由的目标,是一套统一的、可嵌入的路由框架:同一套内核,通过配置就能实例化出不同的部署形态——

端侧形态:单进程、内存态、零外部依赖,路由与推理同机共处,把决策开销压到可以忽略;

云侧形态:状态层外置,决策依据来自全局的模型表现与负载视图;

企业私有化形态:在有限的模型清单内做最优搭配,策略与数据都留在本地;

端云混合形态:端侧判断简单任务自己消化,复杂任务交给云端——同一套决策逻辑,两侧给出同样的答案。

一套框架,多种形态。换的是部署拓扑,不换的是那套 " 看菜下饭 " 的判断逻辑。

△一套路由框架,多种部署形态结语:让每一分算力,都用在最该用的地方

回到开头那个思想实验。

openJiuwen 团队真正想改变的,不是 " 用哪个模型 " 这个具体选择,而是" 选择 " 这件事本身的发生方式——从开发者预先写死的配置,变成一个运行时会思考、会权衡、会学习的系统。

打个比方:过去团队给 Agent 配的是一位 " 照着名单发活 " 的排班员,现在他们想给它配一位真正的调度员。

这位调度员知道每个人此刻的状态,知道这一单的轻重缓急,知道客户最在意什么,而且每做完一单,他对整支队伍的理解就更深一分。

这正是 openJiuwen 智能路由想做的事:不是让 Agent 用更强的模型,而是让 Agent 用更对的模型。

而 x-router 只是这台引擎里已经跑通的一条算法通路。

接下来,openJiuwen 团队还会推出包括路由策略强化学习训练在内的更多自演进能力,让短期经验逐步沉淀为更加稳定的长期路由策略。

相关能力在持续开发和验证中,更多进展敬请关注 openJiuwen 社区后续发布。

openJiuwen 智能路由已开源,欢迎关注 openJiuwen 开源社区,第一时间上手体验。

相关资源

openJiuwen 官网:https://www.openjiuwen.com/

AtomGit:https://atomgit.com/openJiuwen/model-router

GitHub:https://github.com/openJiuwen-ai/model-router

x-router README:https://atomgit.com/openJiuwen/model-router/blob/main/python/openjiuwen/x_router/README.md

https://github.com/openJiuwen-ai/model-router/blob/main/python/openjiuwen/x_router/README.md

x-router 示例:https://atomgit.com/openJiuwen/model-router/blob/main/examples/x_router_cli.py

* 本文系量子位获授权刊载,观点仅为原作者所有。

一键三连「点赞」「转发」「小心心」

欢迎在评论区留下你的想法!

—  完  —

点亮星标

科技前沿进展每日见

智客推

智客推

ZAKER 智客推 GEO | AI 时代的品牌认知解决方案

一起剪

一起剪

ZAKER旗下免费视频剪辑工具

相关标签

ai
相关文章
评论
没有更多评论了
取消

登录后才可以发布评论哦

打开小程序可以发布评论哦

12 我来说两句…
打开 ZAKER 参与讨论