OpenRouter 模型与路由
OpenRouter 模型与路由
Auto Exacto
1 分钟阅读
Auto Exacto
自动优化工具调用的模型服务提供商顺序
Auto Exacto(自动高精度路由)是一个路由步骤,会为所有包含工具的请求自动优化模型服务提供商的排序。它默认在每一次工具调用请求上运行,无需任何配置。
工作原理
当你的请求包含工具时,Auto Exacto 会结合真实流量中的性能信号,为你所选模型重新排列可用的模型服务提供商:
- 吞吐量。 实时的每秒 Token 数指标(可在任意模型页面的 性能(Performance)选项卡 上查看)。
- 工具调用成功率。 各模型服务提供商完成工具调用的可靠程度(同样可在性能选项卡上查看)。
- 基准测试数据。 来自 OpenRouter 自有基准测试框架的结果,该框架会持续评测符合条件的模型服务提供商端点。具体基准测试与参数见 基准测试框架会跑什么,结果发布位置见 分数在哪里查看。
在这些信号上表现不佳的模型服务提供商会被降低优先级,而往绩出色的会被移到列表前面。
工具调用成功率如何衡量
工具调用成功率信号来自 工具调用错误率(Tool Call Error Rate) 指标,该指标同样可在任意模型页面的性能选项卡上查看。对于每一个包含工具的请求,OpenRouter 会检查模型返回的每一次工具调用,并对照调用方提供的 schema 进行校验。
校验器
工具调用的 arguments 会对照相应的 tools[].function.parameters schema,使用 @cfworker/json-schema 进行校验,并固定为 JSON Schema Draft 7:
如果工具的 parameters schema 缺失或编译失败,会视为没有 schema,并始终判定为有效,因此在调用方 schema 本身有误时,该指标会偏保守。
正则引擎
@cfworker/json-schema 把 pattern 和 patternProperties 交给运行时内置的正则实现。在 OpenRouter 的环境中,这就是原生的 JavaScript RegExp(V8 / ECMA-262)。其上没有额外的 ECMA-262 一致性垫片,因此在某些边界情况下,JavaScript 正则语义会与 JSON Schema 所规定的正则方言不同。
单次工具调用的分类
每一次工具调用会被归入以下三类错误之一,或计为有效:
InvalidJson。JSON.parse(arguments)抛出异常。UnknownName。function.name不在请求的tools[]中。SchemaMismatch。 校验器对照解析后的 schema 返回valid: false。
请求级汇总
只要请求中任意一次工具调用落入上述三个错误桶,该请求就会被标记为出错。每个端点每天展示的工具调用错误率随后在请求层面计算。分子和分母都是请求数,而不是单次工具调用数:
换句话说:在所有以发出工具调用结束的请求中,至少有一次工具调用落入三个错误桶之一的比例是多少。一个包含五次工具调用、其中一次无效的请求,计为一次出错请求,而不是五分之一。
注意事项
- 仅在 JSON Schema Draft 2019-09 或 2020-12 中引入的关键字(例如
unevaluatedProperties、$dynamicRef)在 Draft 7 下不会被强制校验。 - JavaScript 正则语义不同于 JSON Schema 正式引用的 ECMA-262 正则方言,因此
pattern检查的行为可能与严格的 JSON Schema 实现不同。
基准测试框架会跑什么
基准测试信号来自 OpenRouter 自研的基准测试框架,它会按周期对每一个服务于已纳入模型的模型服务提供商端点运行。目前有两项基准测试为 Auto Exacto 路由提供输入:
- GPQA Diamond。 研究生水平的多项选择科学题。该基准将 temperature 固定为
0.5(与参考的 openbench 配置一致),按题目确定性打乱选项,默认运行 10 个 epoch(对数据集重复多轮)。 - Tau2-Bench Airline。 一项智能体式工具调用基准:由 LLM 用户模拟器驱动与航空领域工具的多轮对话,并根据最终数据库状态、标准动作(golden-action)以及沟通信息检查给出二元奖励。该基准将 temperature 固定为
0,默认运行 1 个 epoch。
运行方式
- 每一次基准测试运行都会固定到特定模型服务提供商端点,因此每一项分数都精确对应一个端点,不会回退。另外还会对 OpenRouter 的默认路由执行一次未固定端点的运行,作为基线。
- 需要工具的预设会在不支持工具的端点上被跳过。
- 用于路由的分数是各端点的当前分数,按滚动 32 天窗口汇总。
- 运行必须达到最小样本量下限才会计入(目前至少 50 道 GPQA 题目和 45 个 Tau2 任务),因此不完整或失败的运行不会影响路由。
GPQA 的选项打乱方式有意不同于 openbench。openbench 会对每条记录重新设种子,使正确答案始终为 B;本框架则按索引打乱。因此本框架给出的 GPQA 数字不能直接与 openbench 公布的分数比较。
基准测试阈值如何设定
每个模型与每种基准测试类型都有一条基线:该模型、该基准测试类型在大约前 21 天评测期内,各端点分数的中位数。降权阈值是该基线减去 2σ。端点当前的滚动分数会与该阈值比较。
每个窗口从该模型与该基准测试类型的第一条合格结果开始,因此同一模型的不同基准测试类型可以有不同的窗口。窗口仍在进行时,其基线是暂定的。OpenRouter 会根据迄今收集到的全部合格结果重新计算基线,因此该基准测试类型的每一条新合格结果(包括来自其他模型服务提供商的结果)都可能移动阈值。窗口一旦关闭,按当时构成的基线不再纳入之后基准测试运行的结果;其他模型服务提供商当前分数变化时,阈值也不再移动。
分数在哪里查看
基准测试结果是公开的:
- 模型页面。 每个已纳入模型页面上的 AutoExacto Benchmarks 卡片,会按模型服务提供商(若同一服务提供商运行多个端点,则按端点)展示与路由所用相同滚动窗口内的分数。
- 性能选项卡。 每个端点的吞吐量和工具调用错误率位于每个模型页面的性能选项卡上。
效果
OpenRouter 已测得:经 Auto Exacto 路由的工具调用请求,在 tau-bench 分数和工具调用成功率上有所提升。各端点的具体数字见每个已纳入模型页面上的 AutoExacto Benchmarks 卡片。
退出
没有 Auto Exacto 时,OpenRouter 的默认路由主要是 价格加权。请求会在模型服务提供商之间做负载均衡,并明显偏向更低成本。Auto Exacto 会改变工具调用请求的这一行为:按质量信号而不是价格重新排列模型服务提供商。
如果希望工具调用请求恢复之前的价格加权行为,可以通过以下任一方式显式按价格排序来退出:
provider.sort参数。 在请求体的provider对象中将sort设为"price"。详见 模型服务提供商排序。:floor虚拟变体。 在任意模型 slug 后追加:floor(例如openai/gpt-4o:floor)即可按价格排序。见 最低价快捷方式。- 账户设置中的默认排序。 在 账户设置 中将默认的模型服务提供商排序设为价格,即可对所有请求应用价格排序。
以上任一方式都会绕过 Auto Exacto,回到标准的价格加权模型服务提供商排序。