Не женитесь на своей модели
Маршрутизация LLM — сейчас в центре внимания
Большинство инженерных команд выбирают одну языковую модель и привязываются к ней. Один провайдер, одна модель, все задачи. Это как нанять одного человека, который будет писать ваш код, создавать тексты и вести налоговый учёт, просто потому что он хорошо прошёл первое интервью.
В любой момент одна модель лучше справляется с кодом, другая — с длинным «грязным» контекстом, а третья — самый дешёвый надёжный рабочий для классификации. Названия меняются, а характер задачи остаётся тем же. Считать, что одна модель превосходно решает всё, значит либо переплачивать за простые задачи, либо получать посредственные результаты в специализированных.
Я видел, как команда сожгла тысячи долларов, проводя анализ тональности через модель стоимостью $30 за миллион токенов, тогда как модель за $0,50 справилась бы так же хорошо. Простое форматирование JSON, базовые задачи классификации — всё шло через их премиум‑провайдера. Единственное, что действительно «нагревалось», — их счёт в AWS.
Есть лучший способ, и он не особенно сложен.
Делегирование вместо преданности
А что если направлять запросы к модели, которая действительно лучше подходит для конкретной задачи? Использовать дорогой «тяжеловес» для сложных задач, а простое парсинг и форматирование отдавать более дешёвому решению. Получаете преимущества нескольких провайдеров, не прибегая к ручному переключению их в кодовой базе.
Mastra позволяет построить именно такую систему. Вы задаёте специализированных агентов для разных типов задач, а затем создаёте роутер‑агента, который решает, какому специалисту передать каждый запрос. Идентификаторы моделей ниже приведены лишь как примеры, а не как рейтинг. Подмените их текущими моделями, которые показывают лучшие результаты в ваших оценках и укладываются в бюджет.
Представьте, что в вашей команде три специалиста.
import { Mastra } from '@mastra/core';import { Agent } from '@mastra/core/agent';import { openai } from '@ai-sdk/openai';import { anthropic } from '@ai-sdk/anthropic';import { google } from '@ai-sdk/google';
export const claudeAgent = new Agent({ id: 'claude-agent', instructions: 'You are an expert engineer. Write bugs? You are fired.', model: anthropic(process.env.CODE_MODEL ?? 'claude-sonnet-4-5'),});
export const geminiAgent = new Agent({ id: 'gemini-agent', instructions: 'You are a creative writer. Be weird.', model: google(process.env.LONG_CONTEXT_MODEL ?? 'gemini-3-pro-preview'),});
export const gptAgent = new Agent({ id: 'gpt-agent', instructions: 'You are a helpful assistant. Be boring.', model: openai(process.env.GENERAL_MODEL ?? 'gpt-5.2'),});У каждого своя роль. Агент кода должен быть моделью, проходящей ваши репо‑специфичные тесты по программированию. Агент с длинным контекстом — тем, кто справляется с вашими реальными документами, не превращая их в «суп». Общий агент должен быть дешёвым, надёжным и предсказуемо скучным.
И вот где начинается интересное. Вы добавляете роутер, который выступает в роли интеллектуального прокси:
export const routerAgent = new Agent({ id: 'router-agent', name: 'The Boss', instructions: `You are an intelligent router. - Coding -> Claude - Poetry -> Gemini - Facts -> GPT
Do not do the work yourself. Delegate.`, model: openai(process.env.ROUTER_MODEL ?? 'gpt-5-mini'), // Use a cheap model for routing! agents: { claudeAgent, geminiAgent, gptAgent, },});
export const mastra = new Mastra({ agents: { routerAgent, claudeAgent, geminiAgent, gptAgent },});Сам роутер работает на лёгкой модели, потому что он лишь решает, куда направить трафик. Вы не платите премиальные тарифы за определение, какую премиальную модель задействовать. Учтите и это: плохой роутер тихо превращает экономию в неправильные маршруты.
Когда кто‑то просит реализовать пузырьковую сортировку, роутер распознаёт задачу как код и передаёт её вашему специалисту по коду. Запрос на креативное написание? Он попадает к модели, выбранной для творческого голоса и диапазона. Фактический вопрос о исторических событиях? Маршрутизируется к общему агенту, желательно с подключённым поиском, когда важны актуальность или ссылки.
Практические выгоды
Экономия средств важнее, чем кажется. Маленькая модель‑маршрутизатор, принимающая решения о делегировании, стоит лишь доли от стоимости обработки каждого запроса самым дорогим провайдером. Со временем, особенно при больших объёмах, это превращается в реальные деньги. Вы платите за тяжёлый интеллект только тогда, когда он действительно нужен.
Качество повышается, когда модели соответствуют задачам. Победитель меняется от месяца к месяцу, от задачи к задаче и от формы подсказки. Поэтому слой маршрутизации должен опираться на ваши оценки, а не на то, какая модель «выигрывала» в Твиттере в ту неделю, когда вы писали интеграцию.
Устойчивость становится побочным преимуществом. Когда у OpenAI происходит один из периодических сбоев (а они бывают), ваш маршрутизатор может перенаправить трафик к другим провайдерам. Вы не останетесь «на мели», ожидая восстановления конкретного API.
Это не попытка выглядеть умным ради умения. Это построение систем, которые логичны и с финансовой, и с технической точек зрения. Вы бы не использовали один и тот же молоток для всех строительных работ, и, вероятно, не стоит использовать одну и ту же языковую модель для всех AI‑задач.
Прелесть такого подхода в том, что код вашего приложения не меняется. Вы всё равно вызываете только роутер‑агента. Сложность выбора модели для конкретной задачи сосредоточена в одном месте, настроена один раз, вместо того чтобы разбросана по всему кодовому базу в виде множества условных операторов.
Ресурсы
Читайте серию
- Маршрутизация LLM (этот пост)
- Безопасность и ограничительные меры
- MCP и интеграции инструментов
- Рабочие процессы и память