Слияние моделей в производстве: внутри OrcaRouter Fusion и Routing DSL

Слияние моделей в производстве: внутри 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 (композиция панели × контекстное окно)


orcarouter/fusion

Claude Opus 4.8 + GPT-5.5 + Gemini 3.1 Pro

Контекстное окно: 1 000 000

Лучше всего для: Fable-5 уровень Max intelligence


orcarouter/fusion-mini

Claude Opus 4.8 + GPT-5.5

Контекстное окно: 1 000 000

Лучше всего для: сбалансированного инференса уровня Fable-5


orcarouter/fusion-flash

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%-легкая нагрузка запускает полную панель за треть стоимости всей панели.