Skip to content

Матрица выбора модели: фаза × сложность

Источник истины для scripts/model_routing.py::suggest_model. Решение Decision #112. Задача v15mr-phase-matrix (P1).

TAUSIK рекомендует Claude-модель (применяет её пользователь вручную — Claude Code не переключает модель программно). До v1.5 выбор зависел только от сложности задачи. С v1.5 он зависит от двух осей: сложность и SDLC-фаза, в которой модель работает.

Почему фаза важна: одна и та же «простая» задача требует разной мощности в зависимости от того, что делает модель. Простой research («где определён X», поиск по символу, скан доков) — это read-only discovery, и Haiku справляется в 10–20 раз дешевле. Простой implement (правка одного файла) требует рассуждения о типах, call-site и тестах — Haiku здесь спотыкается, пол реализации = Sonnet.

Матрица

Фаза \ Сложностьsimplemediumcomplex
planningFable 5 (Opus 4.8 alt)Fable 5 (Opus 4.8 alt)Fable 5 (Opus 4.8 alt)
implementSonnet 4.6Sonnet 4.6Opus 4.8 (Fable 5 alt)
researchHaiku 4.5Sonnet 4.6Sonnet 4.6 (Opus 4.8 alt при затыке)

phase по умолчанию — implement (обратная совместимость с однопараметрическими вызовами suggest_model(complexity)). Неизвестная сложность или None падает в колонку medium соответствующей фазы. Неизвестная фаза → ValueError со списком допустимых значений (planning, implement, research).

Обоснование по ячейкам

planning → Fable 5 (alt Opus 4.8), независимо от сложности

Качество плана компаундируется на всю задачу: один раз потратив токены на сильный планировщик, мы экономим многократно на исполнении по чёткому плану. Поэтому даже простая задача в фазе planning получает топовую модель — сложность здесь не понижает планировщик. Fable 5 — primary (быстрый вывод на топ-качестве); Opus 4.8 — приемлемая альтернатива.

implement → пол = Sonnet 4.6

  • simple → Sonnet 4.6. Даже правка одного файла требует рассуждения о типах, местах вызова и тестовой обвязке. Haiku слишком слаб для production-кода и фабрикует ошибки в этих местах. Sonnet — минимальный порог для реализации. (Это намеренное изменение относительно v1.4, где simple → Haiku. См. Decision #112.)
  • medium → Sonnet 4.6. Мультифайловые изменения / рефакторинг в пределах модуля. Sonnet балансирует цену и способности.
  • complex → Opus 4.8 (alt Fable 5). Кросс-модульный рефакторинг, архитектура, неоднозначные требования. Opus окупает стоимость на сложном рассуждении.

research → Haiku для лёгкого, Sonnet для глубокого

  • simple → Haiku 4.5. Read-only discovery: «где X», поиск по символу/паттерну, скан документации. Haiku в 10–20 раз дешевле и достаточен — здесь живёт бывший «simple → Haiku».
  • medium → Sonnet 4.6. Более глубокое исследование по подсистемам, синтез.
  • complex → Sonnet 4.6 (alt Opus 4.8). Глубокий research с синтезом многих источников; эскалация на Opus вручную, только если рассуждение буксует.

Конфиг-override

Любую ячейку можно переопределить в корне .tausik/config.json под ключом model_routing. Две формы:

jsonc
{
  "model_routing": {
    "planning": "claude-fable-5",            // одна модель на все сложности фазы
    "implement": {                            // или по-сложностный override
      "simple": "claude-haiku-4-5",
      "complex": "claude-opus-4-8"
    }
  }
}

Значение — model_id (строка). Display-имя выводится из семейства модели (haiku/sonnet/opus/fable); незнакомый id используется как есть. Битые/отсутствующие записи игнорируются — побеждает базовая матрица, ошибка не выбрасывается. suggest_model(..., config=None) (по умолчанию) override не применяет — это чистый вызов; пользовательские поверхности (format_suggestion, format_task_start_banner) сами подгружают конфиг.

Сабагенты (Agent-tool)

Когда скилл порождает сабагентов через Agent-tool, рекомендуемая модель задаётся параметром model= и зависит от фазы работы сабагента (та же философия, что у матрицы). Задача v15mr-subagent-model-hints.

Фаза сабагентаМодельГде
search / exploration (read-only discovery)Haiku 4.5deep-research finder'ы, explore-форки
code-review / verificationSonnet 4.6/review 5 доменных агентов, /ship review+test, /debug gate-fixer
reasoning / synthesis (adversarial, многоисточниковый синтез)Opus 4.8 (или Fable 5)/review critic, deep-research synthesis

Согласовано с token-economy (sonnet для поиска по коду в ревью, opus только там, где нужен сильный reasoning). model= — подсказка, не требование: если его не указать, сабагент наследует модель сессии. Легаси-вызовы без model= остаются валидными — grep-тест дрейфа проверяет наличие гайд-подсказки, а не model= в каждом вызове.

Телеметрия adherence — фаза implement

task done пишет пару recommended/actual в .tausik/routing_adherence.jsonl (tausik metrics агрегирует %). Recommended берётся из рекомендации на task start, а она всегда implement-фазы (task_start — точка входа в реализацию; в схеме задачи нет поля phase). То есть adherence калибрует именно implement-строку матрицы — «кодил ли я на правильной модели». Planning/research подсказки живут в /plan и /explore и в эту телеметрию не входят by design.

Известные ограничения

  • Это рекомендация, а не переключатель: Claude Code не меняет модель программно, применяет пользователь через model picker в IDE. /fast — не переключение (только fast-output на Opus).
  • alt-вариант («Opus 4.8 alt») сообщается в тексте rationale, а не отдельным ключом возврата: suggest_model всегда отдаёт стабильный dict из трёх ключей {model, display, rationale}.