路由DSL:组合一个模型面板,其思考方式类似Fable 5
- deepseek新DeepSeek: DeepSeek V4 Pro 08132026-08-1253智能69代码
- grok新SpaceXAI: Grok 4.62026-08-1261智能77代码
- meta新Meta: Muse Spark 1.22026-08-0557智能72代码
- qwen新Qwen: Qwen3.8 Max2026-08-0358智能72代码
- deepseekDeepSeek: DeepSeek V4 Flash 07312026-07-3152智能69代码
- minimaxMiniMax: MiniMax-H32026-07-31minimax/minimax-h3
- qwenQwen: Qwen3.7 Flash2026-07-27$0.03 / $0.13 每百万 tokens · 2375 tok/s
- orcaOrcaDub: OrcaDub 1.02026-07-27orca/dub
- anthropicAnthropic: Claude Opus 52026-07-2463智能78代码
- googleGoogle: Gemini 3.6 Flash2026-07-2152智能69代码
- googleGoogle: Gemini 3.5 Flash-Lite2026-07-2137智能49代码
- metaMeta: Muse Spark 1.12026-07-1653智能71代码
- kimiMoonshotAI: Kimi K32026-07-1560智能76代码
- openaiOpenAI: GPT-5.6 Luna2026-07-0952智能71代码
- openaiOpenAI: GPT-5.6 Terra2026-07-0957智能77代码
- openaiOpenAI: GPT-5.6 Sol2026-07-0961智能77代码
- grokxAI: Grok 4.52026-07-0856智能72代码
- tencentTencent: Hy32026-07-0642智能59代码
- obsidianQwen3.6 35B A3B Uncensored (Aggressive)2026-07-0232智能42代码
- obsidianGemma4 26B A4B Uncensored (Balanced)2026-07-0226智能39代码
对于"更多智能"的剧本,两年来一直是"等待下一个模型"。我们认为这是错误的进步单位。前沿不是一个单一的检查点——而是一个专家团。给三个好模型同一个难题,让它们各抒己见,然后仲裁答案,这个专家团会胜过任何一个成员。通常它能胜过价格表上更贵的下一个模型。
该 路由 DSL是你构建那个面板的方式。这是一个可编程的路由策略 — YAML + CEL — 它把你的 OrcaRouter 端点变成一个推理图:按难度路由,按任务路由,同时分发到多个模型,判断或投票它们的输出,当信心低时回退,并根据成本、延迟或质量调整整个系统。你编写规则;网关在每次请求上编译并运行它们,大约5 ms。
这篇文章是工程指南:语法、可分支的变量、四个仲裁器、级联,以及最后的完整生产规则集。
结果优先
两个说明性基准测试。(数字仅为说明性质——它们旨在展示效果的形态,而非作为官方分数引用。)
前沿比较 — 基于难度路由的DSL端点与单独前沿的比较:

融合面板 vs. 单独模型 — 在100个任务(来自OpenRouter)中的93个上得分:

三件值得注视的事物:
每个融合小组都胜过自身的每一个成员。 Opus 4.8 + GPT-5.5(约67.5%)比单独使用Opus(约58.5%)和单独使用GPT-5.5(约60%)高出7–9个百分点。分歧就是信号;仲裁将其收获。
Fusion 达到下一层级。三个不同的面板通过Fable 5 solo(约65.5%)仅使用模型(下方的)。它
你不需要昂贵的成员模型。Opus + Opus 自融合(约65.5%)用一个模型和一个采样器就能媲美 Fable 5。一组廉价模型——Gemini 3 Flash + Kimi K2.6 + DeepSeek V4 Pro(约64.5%)——略逊于 Fable 5,且每 token 成本只是其一小部分。这就是全部论点:用拓扑获取智能,而不是靠更高的价格档位。
路由 DSL 是一个控制面,让你只在有价值的地方投入拓扑——简单80%用廉价模型,难啃的尾巴用融合面板。
30秒语法
规则集由版本、规则列表和必需的默认值组成。规则被评估自上而下;第一个为真的 when: 获胜。 没有 when: 表示“always match”。
版本: 1
rules:
- id: only_rule
use: { model: "claude-sonnet-4-6" }
default:
delegate: balancedwhen: 是一个 CEL 布尔表达式——沙盒化、仅支持RE2正则表达式、无循环、无I/O、微秒级评估,整个规则集共享一个5毫秒的截止时间。use: 是效果:请求的去向以及如何调优。限制有意设置得很小(≤30条规则、≤16 KiB的源文件、每个when: ≤200个字符),以便规则集保持可审计性。
基础1 — 按难度和任务进行路线
分发器在路由前对每个请求进行分类,并将这些特征暴露给CEL。您可以直接基于它们进行分支:
版本: 1
rules:
- id: hard_reasoning
when: difficulty > 0.8
use:
model: "claude-opus-4-8"
reasoning_effort: "high"
thinking_budget_tokens: 32000
- id: code_path
when: task_class == "code" && code_keyword_density > 0.5
use: { model: "gpt-5.5" }
- id: cheap_chat
when: difficulty < 0.3
use: { model: "gemini-3-flash" }
default:
delegate: balanced你可以在 when: 中读取的变量(缩写版——详见文档中的完整参考):
组示例
请求形状
request.input_tokens, request.output_max_tokens, request.stream, request.vision, request.message_count, request.has_tools分类
task_class (chat/code/agent/vision/audio/rag/creative), difficulty (0.0–1.0), code_keyword_density, reasoning_cue_count, log_prompt_tokens, tool_count会话
agent_state.turn, agent_state.tools_used, agent_state.has_edited, agent_state.last_test_failed, agent_state.consecutive_errors, agent_state.models_tried上下文
headers["x-…"], user.group, token.name, time.hour, workspace.id
…plus six macros for the things regex-over-payload is good at: system_prompt_matches(re), user_message_matches(re), tool_definitions_include(name), tool_calls_present_any([…]), tool_results_from_any([…]), header_matches(name, re).任何目标都可以携带 每次调用的旋钮,由中继适配器转换为每个提供者的原生参数:reasoning_effort(低/中/高)、thinking_budget_tokens(1024–64000)、samples(1–16)、temperature(0.0–2.0),加上由拒绝列表保护的param_override / header_override。这已经足够根据表A构建难度路由端点:简单尾部的廉价模型,困难尾部的带思考预算的Opus。
基元 2 — 扇出至面板(融合)
这是基准提升的来源。一个并行:效果会将请求分派到2–5个并发腿,然后一个仲裁器决定客户端实际看到的内容:
- id: hard_tail_panel
when: difficulty > 0.7 && task_class == "agent"
use:
parallel:
- { model: "anthropic/claude-opus-4-8", reasoning_effort: "high" }
- { model: "openai/gpt-5.5", thinking_budget_tokens: 16000 }
- { model: "google/gemini-3.1-pro", temperature: 0.3 }
arbiter:
strategy: best_of_n
model: "anthropic/claude-sonnet-4-6" # the judge
template: judge_code
max_latency_ms: 120000
on_disagreement: # majority-only escape hatch
model: "anthropic/claude-opus-4-8"
reasoning_effort: "high"四种仲裁策略,每种对应“谁的输出获胜?”的不同答案:
第一 — 竞赛腿部,服务第一个成功,取消失败者。优化 延迟 (你得到N中最快的).
大多数 — 在分支的输出上进行结构化投票,无需额外模型调用。当分支分裂且没有严格多数时,可选的 on_disagreement: 分支重新发起一次全新的、更强的尝试,而不是进行平局决断。优化 鲁棒性 在具有标准答案的任务上。
best_of_n — 一个 LLM judge 读取所有候选者并对它们进行排序。这是来自表B的 Opus + GPT-5.5 → judge 配置。优化 质量 在开放式工作上;如果 judge 出错,则回退到第一个成功的。
tests_pass — execution-grounded: 为那些补丁确实使测试套件通过的候选者服务。没有裁判猜测——由测试框架决定。这是代码/智能体工作的最强仲裁者。验证器位于网关之外(通过 VerifierProvider 连接);如果没有连接,则降级为第一个成功的。
{{1}}max_latency_ms(1000–600000,默认120000)限制扇出,使得一个慢分支不会阻塞响应——落后请求会被丢弃。{{/1}}{{2}}在lint阶段会拒绝在`parallel`内部嵌套`parallel`;面板特意只支持一层深度。{{/2}}
可用性说明: N 路扇出运行时受服务器标志控制 ROUTING_DSL_ENSEMBLE_RUNTIME 而逐项计费在预发布环境中得到强化——这就是为什么融合是 预览版,而非正式版。如果关闭该标志,则 parallel: 规则会干净地服务于其第一个分支,因此您现在可以编写和影子测试您的面板,并在融合功能在您的区域上线时将其启用。
原语 3 — 回退与置信度级联
扇出预先花费N倍。一个级联花费额外仅当第一个答案看起来错误时。响应后,on_low_confidence: 评估信号,如果触发,则重新分派到更强的目标:
- id: agent_with_safety_net
when: task_class == "agent"
use:
pool: "@pool:fast"
on_low_confidence:
signals: [patch_invalid, self_doubt, next_turn_test_failed]
threshold: { low_logprob: -1.5 }
use:
model: "claude-opus-4-8"
reasoning_effort: "high"信号: patch_invalid (差异无法通过 git apply --check 验证), self_doubt (一个模糊限制短语的正则表达式集), low_logprob (平均 token logprob 低于阈值,如果提供者暴露该值), 以及 next_turn_test_failed (一个跨回合锁存器——当前回合的提示携带了上一回合失败测试的形状). Cascades 设计上是深度1。将它们与 agent_state.models_tried 配对以获得 diversity on retry — 永远不要将修复发送给刚刚失败的模型。
调节刻度:成本、延迟、质量
同一个DSL表达了所有三个目标;你可以根据规则选择:
成本 — 委托:最便宜的,将廉价模型保留在简单尾部,并为难度 > 0.7 的任务保留扇出。表 B 的廉价面板(约 64.5% ≈ Fable 5 单刷)是存在性证明:小模型的融合可以用每 token 成本的一小部分取代前沿模型。但要清醒地看到——融合使用了"为每条腿计费" 模型:一个三腿 best_of_n 面板对三个候选者加评判者进行计费。其经济性在于,你(a)只对少数困难请求进行扇出,并且(b)融合更便宜的 成员,比你正在取代的前沿模型。
延迟 — arbiter: { strategy: first } 加上一个严格的 max_latency_ms 参数,可在硬性上限内提供 N 个选项中最快的结果。
质量 — 开放工作中使用 best_of_n,有测试套件时依据 tests_pass。samples 和 thinking_budget_tokens 可在单次推理中获取更多。
在不破坏生产环境的情况下操作它。
路由更改令人担忧,因此该领域特定语言内置了站点可靠性工程师所期望的安全护栏:
每次保存时进行 lint — 包括 schema、CEL 类型检查(每个 when: 必须计算为 bool)、引用解析、旋钮范围、头部/参数黑名单。错误返回格式为 {line, column, message, rule},并在编辑器中显示为沟槽标记。
空运行 — 发送一个合成请求(task_class、difficulty、agent_state 等),并在任何内容发布之前返回匹配的规则、解析后的效果以及评估时间。
影子模式— 在首次保存后的24小时内,DSL 被评估但不使用;影子日志记录潜在的拣选,控制台显示差异(路线变化百分比、预计每日成本变化、每条规则的触发次数)。
Canary — 一个0到100的流量滑块。逐步递增5→25→50→100,同时查看每个切片的指标;通过滑动到0来回滚。
审计+回滚 — 每次保存/回滚都会在同一个事务中写入审计行;并发编辑会收到包含当前版本的409状态码,因此你可以针对最新状态重试。
测试用例、追踪回放以及一个AI“解释此规则集”视图使其更加完善。您可以在仪表盘的路由 → 策略 → DSL.
完整的规则集
简单任务上廉价,中等任务上中等,困难代理尾端上经过判断的融合面板,其下是置信度级联:
版本: 1
rules:
- id: trivial
when: difficulty < 0.3 && !has_tools
use: { model: "gemini-3-flash" }
- id: standard
when: difficulty < 0.7
use:
model: "gpt-5.5"
on_low_confidence:
signals: [self_doubt, low_logprob]
use: { model: "claude-opus-4-8", reasoning_effort: "high" }
- id: hard_agent_panel
when: difficulty >= 0.7 && task_class == "agent"
use:
parallel:
- { model: "anthropic/claude-opus-4-8", reasoning_effort: "high" }
- { model: "openai/gpt-5.5", thinking_budget_tokens: 16000 }
- { model: "google/gemini-3.1-pro" }
arbiter:
strategy: tests_pass # execution-grounded; judged fallback if no harness
max_latency_ms: 180000
on_disagreement:
model: "claude-opus-4-8"
reasoning_effort: "high"
default:
delegate: balanced那个端点位于表A的顶部——不是因为它找到了更好的模型,而是因为它将正确的模型分配给正确的请求,并在面板胜出的地方精确地融合面板。
开始撰写
能力的下一次跃升不必等待下一个检查点。它是一个你今天下午就可以编写的图谱:按难度路由,在困难尾部展开,判断或测试输出,当信心下降时级联。
文档: https://docs.orcarouter.ai/routing/routing-dsl
UI: 路由 → 创建路由器 -> 路由策略 → DSL(专家)
前沿是一块面板。去打造属于你的吧。
