Слияние моделей в производстве: внутри OrcaRouter Fusion и Routing DSL
Три передовые модели параллельно, один ответ назад. Вызовите это в одной строке — или создайте свою собственную.
TL;DR.Claude Fable 5 был исключен из списка. Ответ не в более крупной модели — а в панели: запускайте несколько передовых моделей параллельно и позвольте арбитру возвращать самый сильный ответ. OrcaRouter предлагает это двумя способами: встроенные маршрутизаторы orcarouter/fusion, которые вы вызываете как любую модель, и Routing DSLдля создания собственных. Это практическое руководство по обоим — с готовыми рецептами, пять арбитров (включая synthesize, объединение Mixture-of-Agents) и как развернуть это, не рискуя вашим SLA.
Часть 1 — Вызовите это одной строкой: встроенные маршрутизаторы Fusion
Fable 5 была прекращена и ограничена, поэтому она больше не является широко доступной. Fusion перестраивает этот уровень из моделей, которые вы можете все еще вызывать — это подключаемый маршрутизатор, совместимый с OpenAI, который параллельно запускает панель передовых моделей и возвращает самый сильный ответ. В каждой рабочей области поставляются три тщательно подобранных уровня:
Три уровня Fusion (композиция панели × контекстное окно)
Claude Opus 4.8 + GPT-5.5 + Gemini 3.1 Pro
Контекстное окно: 1 000 000
Лучше всего для: Fable-5 уровень Max intelligence
Claude Opus 4.8 + GPT-5.5
Контекстное окно: 1 000 000
Лучше всего для: сбалансированного инференса уровня Fable-5
Gemini 3.5 Flash + MiniMax M2.7 + GLM 5.1
Контекстное окно: 200,000
Лучше всего подходит для: быстрый и дешевый инференс уровня Fable-5
(Контекстное окно = наименьший элемент панели — ограничение на разветвление.)
Это не маркетинговые заглушки; это предварительно скомпилированные DSL-роутеры, управляемые централизованно. Вот фактическая программа orcarouter/fusion, дословно:
version: 1
rules:
- id: hard_panel
when: task_class == "code" || task_class == "agent" || code_keyword_density >= 0.3 || has_tools || difficulty >= 0.3
use:
parallel:
- { model: "anthropic/claude-opus-4.8" }
- { model: "openai/gpt-5.5" }
- { model: "google/gemini-3.1-pro-preview" }
arbiter:
strategy: best_of_n
model: "anthropic/claude-opus-4.8"
template: best_answer_v1
max_latency_ms: 120000
default:
delegate: balancedДва дизайнерских решения, которые стоит отметить:
Оно распределяется только на реальную работу. Шлюз when: запускает панель для подсказок типа code, agent, tool-using, code-dense или high-difficulty (difficulty >= 0.3); всё остальное переходит к balanced по умолчанию рабочего пространства. Вы платите цену панели ровно там, где это помогает, а не на "hi."
Судья выдает реальный ответ дословно. best_of_n запускает LLM-судью (здесь, Opus 4.8 с шаблоном best_answer_v1), который выбирает единственного самого сильного кандидата и выдает его как есть — никогда не разбавленное слияние. Вывод всегда является ответом реальной модели.
Часть 2 — Select vs. Fuse: best_of_n и synthesize arbiter
Роутеры Fusion выбирают. Но OrcaRouter также поставляет fuse стратегия — синтез, Mixture-of-Agents шаблон, добавленный в маршрутизирующий движок (service/dispatch_parallel/synthesize.go). Разница — вся игра:
Приложение 2 — Выбор против Слияния
best_of_n (SELECT) synthesize (FUSE)
┌─ Opus 4.8 ─┐ ┌─ Opus 4.8 ─┐
├─ GPT-5.5 ─┼─► judge picks leg k ├─ GPT-5.5 ─┼─► aggregator LLM writes
└─ Gemini ─┘ └─► serve leg k verbatim └─ Gemini ─┘ ONE new fused answer
output = a real model's answer output = a new answer better than any legРецепт истинного слияния:
use:
parallel:
- { model: "anthropic/claude-opus-4.8" }
- { model: "openai/gpt-5.5" }
- { model: "google/gemini-3.1-pro-preview" }
arbiter:
strategy: synthesize
model: "anthropic/claude-opus-4.8" # aggregator: fuses candidates into one new answer
template: synthesize_v1Честные оговорки:
- Тарификация N+1 — каждый сегмент тарифицируется, плюс агрегатор как дополнительный вызов.
- Только формат чата OpenAI в V1 — агрегатор выдает завершение чата OpenAI; Claude/Gemini нативные клиенты деградируют до serve-first-successful (этапы все еще выставляются счета).
Агрегатор должен входить в авторизованный набор кандидатов маршрутизатора, иначе он деградирует.
Когда что использовать: best_of_n, когда ответ одной модели, вероятно, полностью правильный (код, фактические Q&A) — вам нужен чистый, реальный ответ. synthesize когда ответы являются взаимодополняющими (исследования, анализ, длинные тексты) и объединение сильных сторон превосходит любой отдельный вариант.
Часть 3 — Создайте свой собственный: пособие по Routing DSL
Не хотите подобранную панель? Начните с "Claude Fable 5 Level" шаблоны в редакторе DSL маршрутизации (они поставляются в каждой рабочей области и зеркалируют маршрутизаторы Fusion), затем настройте под себя. Шесть паттернов копирования-вставки:
1 — Код, который действительно работает → разветвляемся, пусть тесты выбирают победителя:
- id: hard_code
when: task_class == "code" && difficulty > 0.6
use:
parallel:
- { model: "anthropic/claude-opus-4.8", thinking_budget_tokens: 16000 }
- { model: "openai/gpt-5.5", reasoning_effort: high }
- { model: "google/gemini-3.1-pro-preview" }
arbiter: { strategy: tests_pass }tests_pass основан на выполнении — он обслуживает кандидата, прошедшего вашу проверку, и не требует LLM-судьи.
2 — Перестаньте переплачивать за простые промпты → барьер сложности (паттерн Fusion, ваши модели):
- id: easy
when: difficulty < 0.3
use: { delegate: cheapest }
- id: hard
when: difficulty >= 0.3
use:
parallel:
- { model: "anthropic/claude-opus-4.8" }
- { model: "openai/gpt-5.5" }
arbiter: { strategy: best_of_n, model: "anthropic/claude-opus-4.8", template: best_answer_v1 }3 — Держите длительные запуски агента на рельсах → эскалируйте только когда он отклоняется:
- id: agent
when: task_class == "agent" && agent_state.consecutive_errors == 0
use: { model: "anthropic/claude-sonnet-4.6", affinity_ttl: "5m" }
on_low_confidence:
signals: [next_turn_test_failed, self_doubt]
use: { model: "anthropic/claude-opus-4.8", thinking_budget_tokens: 24000 }4 — Сделать нестабильные выходные данные детерминированными → голосовать, эскалировать при расщеплении:
- id: extract
when: task_class == "rag"
use:
parallel:
- { model: "anthropic/claude-opus-4.8" }
- { model: "openai/gpt-5.5" }
- { model: "google/gemini-3.1-pro-preview" }
arbiter: { strategy: majority }
on_disagreement: { model: "anthropic/claude-opus-4.8", thinking_budget_tokens: 32000 }5 — Сократите хвостовую задержку и сбои провайдера → соревнуйтесь, обслуживайте первого ответчика:
- id: race
when: request.stream == true && difficulty < 0.5
use:
parallel:
- { model: "google/gemini-3.5-flash" }
- { model: "minimax/minimax-m2.7" }
- { model: "z-ai/glm-5.1" }
arbiter: { strategy: first }6 — Выкатка без риска для SLA → теневая (оценивать вместе с живым трафиком, логировать, что он бы выбрал + разница в стоимости, обслуживает живой выбор) → канареечный % (dsl_canary_pct 5 → 25 → 100, крипто-случайный на запрос). Мигрируйте по измеренному расхождению, откатывайтесь мгновенно.
Шпаргалка: пять арбитров

Экономика и честность
Ограниченный по сложности фан-аут сохраняет стоимость постоянной (Иллюстративно; стоимость = реальная математика цены токенов) — смешанная стоимость = easy_share × cheap + hard_share × panel:

70%-легкая нагрузка запускает полную панель за треть стоимости всей панели.
