
Наша платформа використовує 11 AI-субагентів для автоматизації розробки — code review, генерація тестів, security-аналіз, документація. Всі вони за замовчуванням працювали на Claude Sonnet 4.6 за $3/$15 за 1M токенів. Це стало найбільшою статтею витрат на AI, і більшість із них була зайвою.
У цій статті описана гібридна архітектура, яку ми спроектували, щоб це виправити.
Проблема
Субагенти на зразок code-simplifier, docs-maintainer і pm-issue-writer виконують невеликі, структуровані задачі з текстом. Вони отримують diff або лінт-звіт, повертають структурований текстовий блоб і зупиняються. Запускати їх на Sonnet — це як залучати старшого розробника для заповнення форми.
Водночас code-generator витрачав токени Sonnet на цикли з файловим I/O, з якими CLI-інструмент, підключений до OpenRouter, справляється у 10 разів дешевше.
OPENROUTER_API_KEY у нашому .env.local — платний ключ. Жодних обмежень безкоштовного рівня. Це розблокувало міграцію.
Інвентаризація провайдерів
Перевірені ціни станом на 2026-04-22:
| Модель | $/1M вх. | $/1M вих. | Найкраще для |
|---|---|---|---|
deepseek/deepseek-v3.2 |
0.26 | 0.38 | Генерація коду, рефакторинг |
qwen/qwen3-coder-next |
0.15 | 0.80 | TypeScript, генерація тестів |
x-ai/grok-4.1-fast |
0.20 | 0.50 | Швидке паралельне review |
google/gemini-2.5-flash |
0.075 | 0.30 | Документація, ADR, текст |
google/gemini-2.5-flash-lite |
0.037 | 0.15 | Класифікація лінту, малі виклики |
| Claude Haiku 4.5 | 1.00 | 5.00 | Оркестрування, валідаційні шлюзи |
| Claude Sonnet 4.6 | 3.00 | 15.00 | Лише критичні задачі |
Чотири патерни
Патерн A — Skill замість субагента
Для чисто аналітичних задач, де вхід — невеликий артефакт (diff, лінт-виведення), а вихід — структурований блоб (звіт, список пропозицій).
батьківський Claude → Skill (тонкий bash) → HTTP POST до OpenRouter → результат
Жодного agentic-циклу, жодного Sonnet. Skill /fix-review вже робить це — три раунди OpenRouter-моделей, один Sonnet Arbiter. code-simplifier першим мігрує за Патерном A.
Патерн B — Haiku-оркестратор + OpenRouter-виконавець
Для агентів, які потребують валідаційного шлюзу: генеруємо результат дешевою моделлю, потім Haiku перевіряє форму або запускає тести.
Haiku-субагент
→ OpenRouter-модель генерує кандидат
→ Haiku валідує + запускає верифікатор
→ успіх: commit | невдача: retry
Застосовується до test-generator, docs-maintainer, pm-issue-writer, security-reviewer, static-analysis.
Патерн C — Haiku-оркестратор + CLI-воркер
Коли задача потребує реального файлового I/O та ітеративного використання інструментів (редагування кількох файлів, цикли збірки), делегуємо CLI-інструменту з вбудованим tool-use-циклом.
Haiku-субагент
→ codex exec / opencode run (через openrouter/deepseek/deepseek-v3.2)
→ Haiku перевіряє diff + лінт + тести перед commit
Застосовується до code-generator. Цей патерн ми вже перевірили на практиці — п’ять PR зроблено через codex exec, коли квота субагентів Claude вичерпалась.
Патерн D — Залишаємо Sonnet
Для агентів, де конвенції проєкту важливіші за вартість, а помилки мають великий радіус ураження.
Залишаються на Sonnet: bug-fixer, migration-generator, project-devops.
Матриця рішень
| Агент | Патерн | Основна модель |
|---|---|---|
code-generator |
C | openrouter/deepseek/deepseek-v3.2 через codex exec |
test-generator |
B | openrouter/qwen/qwen3-coder-next |
code-simplifier |
A | openrouter/deepseek/deepseek-v3.2 |
security-reviewer |
B | chorus review (3 OR-моделі паралельно) |
static-analysis |
B | openrouter/google/gemini-2.5-flash-lite |
docs-maintainer |
B | openrouter/google/gemini-2.5-flash |
pm-issue-writer |
B | openrouter/google/gemini-2.5-flash |
ci-build-agent |
B (лише Haiku) | Haiku 4.5 |
bug-fixer |
D | Sonnet 4.6 |
migration-generator |
D | Sonnet 4.6 |
project-devops |
D | Sonnet 4.6 |
Порядок міграції
code-simplifier→ Патерн A. Найменший обсяг, базовий вимір.static-analysis→ Патерн B.docs-maintainer→ Патерн B. Текст на Gemini Flash.pm-issue-writer→ Патерн B.security-reviewer→ Патерн B поверх наявногоchorus review.test-generator→ Патерн B із циклом виконання тестів.code-generator→ Патерн C. Найбільший, найвищий ризик.ci-build-agent→ Патерн B (лише Haiku).
Кожен крок — окремий PR, за яким іде 3–5 реальних запусків задачі перед переходом до наступного агента. Умова зупинки: success rate падає >10% відносно baseline на Sonnet.
Ризики, які варто знати
Haiku має нижчу контекстну обізнаність. Промпти повинні вбудовувати найрелевантніші конвенції, а не розраховувати, що агент «знає кодову базу». Для кожної міграції розширюємо системний промпт із точними правилами.
Дрейф моделей OpenRouter. Фіксуйте рядки моделей явно. ID моделі, що працює сьогодні, може змінити бекенд наступного тижня.
Sandbox у CLI. codex exec потребував -s danger-full-access на цьому хості (помилка bubblewrap). Кожна CLI-міграція потребує smoke-тесту.
Безкоштовний vs платний рівень. Безкоштовні :free-рівні мають тихі rate limit. Завжди використовуйте платні openrouter/* ID моделей.
Не видаляйте визначення Sonnet-агентів при відкаті. Якщо мігрований агент регресує, залиште визначення Sonnet для downstream-викликачів і відкотіть лише призначення моделі.
Очікуваний результат
8 із 11 субагентів на Haiku + OpenRouter-делегат. 3 агенти залишаються на Sonnet. Ціль: 70–85% скорочення витрат на субагенти при збереженні еквівалентної якості для аналітичних задач і контрольованої якості для генеративних — виміряно за ковзним 7-денним вікном.