Когда команда собирает ИИ-агента для живых людей, вопрос о том, какую модель поставить под капот, быстро превращается в вопрос о деньгах. Самая сильная модель отвечает лучше, но каждый её ответ стоит в десятки раз дороже. Самая дешёвая укладывается в доли цента, зато ошибается там, где ошибка обходится дорого. Выбор модели для агента в такой ситуации сводится к правилу, по которому одна модель отвечает по умолчанию, а другая подключается только по делу.
Хорошо это видно на кейсе, который разработчик ИИ-секретаря «Лиза Петровна» разобрал в статье на Хабре. Бот работает в Telegram и MAX и принимает текст, голос и фото. С 30 мая ему написали 8568 запросов от 118 человек. За последние 30 дней языковые модели для всех агентов системы обошлись в $77, причём в эту сумму не входит генерация картинок и видео. Ниже разобрано, как устроена маршрутизация, откуда берутся эти цифры, чего маршрутизация не лечит и во что обходится такой подход.
К концу статьи станет понятно, как спроектировать правило эскалации для своего агента, какие метрики собирать с первого дня и в каких случаях дешёвую модель лучше не трогать.
В чём задача: один чат, много специалистов и счёт за токены
Кейс задаёт типичную для ИИ-агента постановку. Пользователь пишет в один чат и не выбирает, к кому обращается. Секретарь сам решает, ответить или передать задачу профильному агенту: доктору, юристу, дизайнеру, штурману. Контекст не должен теряться ни между агентами, ни между днями, ни между мессенджерами.
Из этого следуют три требования, которые тянут в разные стороны:
- скорость — с ботом говорят как с человеком, и ждать полминуты ответа на «ты тут?» никто не станет;
- качество — часть запросов касается договоров, расчётов и здоровья, где неверный ответ хуже, чем никакой;
- стоимость — платить ценой флагманской модели за каждое «давай» бессмысленно.
Распределение запросов показывает масштаб разрыва. По подсчёту автора, 21% всех сообщений оказались короткими репликами и тестами: «давай», «ну чего там?», «ты тут?». Ещё часть составляют разговоры, справки и напоминания. Сложных задач, где нужна сильная модель, заметно меньше, чем кажется при проектировании.
Как работает ИИ-агент с маршрутизацией моделей
Архитектура «Лизы Петровны» собрана из стандартных деталей, и в этом её ценность для разбора: повторить её можно без собственных разработок на уровне моделей.
- Входы. Telegram-бот и мост в MAX ведут в один диалог и одну память.
- Хаб. Секретарь принимает сообщение, отвечает сам или делегирует профильному агенту.
- LLM-слой. LiteLLM работает прокси перед всеми провайдерами. Агенты знают только алиасы моделей, а куда реально уходит запрос, решает конфиг прокси.
- Хранилище. Postgres с расширением pgvector для векторного поиска плюс Redis.
- Эмбеддинги — числовые представления текста для поиска по смыслу. Их считает локальный сервис на
deepvk/USER2-small, без внешних API. - Веб-поиск. Собственный SearXNG, доступный любой модели.
Ключевая деталь здесь — алиасы. Агент в коде просит условную «дешёвую» или «сильную» модель, а не конкретного провайдера. Заменить одну модель на другую можно правкой конфига, без переписывания агентов. Для тех, кто разбирается, как создать ИИ-агента с прицелом на долгую эксплуатацию, это, пожалуй, главный архитектурный урок кейса: модели меняются быстрее, чем код вокруг них.
Вторая деталь — профильные агенты роутингом секретаря не управляются. У доктора и юриста своя модель, прописанная в их «уставе», потому что там качество важнее скорости. Маршрутизация решает задачу только для хаба, через который идёт основной поток.
Выбор модели для агента: дешёвая по умолчанию, дорогая по правилу
Схема устроена так: секретарь отвечает дешёвой моделью, а на дорогую уходит только то, что подходит под одно из правил. На проде включены два триггера.
Триггер complex. Регулярное выражение ловит в сообщении слова, которые обычно сопровождают сложную задачу: «проанализируй», «сравни», «спланируй», «разбери», «посчитай», «рассчитай», «исследуй», «напиши код», «напиши отчёт», «объясни подробно», «подумай как следует» и похожие.
Триггер length. Если сообщение вместе с контекстом длиннее 2500 символов, запрос уходит на сильную модель. Логика автора: длинная переписка часто значит, что человек застрял и ему нужен хороший ответ, даже если в тексте нет ни одного слова из списка.
Веб-поиск в триггеры намеренно не входит. Он доступен всем моделям, и дешёвая с ним справляется. Это стоит перенести к себе: наличие инструмента у агента само по себе не повод звать дорогую модель.
Почему регулярка, а не модель-классификатор
Очевидная альтернатива — поставить перед ответом маленькую модель, которая оценит сложность запроса. Автор от неё отказался и объясняет почему. Регулярку можно прочитать, покрыть тестами и всегда объяснить, почему конкретный запрос ушёл на Opus. Классификатор на модели добавил бы задержку и стоимость к каждому ответу ради решения, которое касается 7% из них.
Аргумент работает, пока доля эскалаций мала. Платить за классификацию 100% трафика, чтобы точнее отобрать 7%, выгодно, только если ошибки отбора стоят дорого. Сам автор в финале статьи открыто спрашивает, как роутить лучше регулярки, так что вопрос он считает открытым.
Стоимость LLM API на практике: цифры за 30 дней
Вот как распределились 2500 ответов секретаря за последние 30 дней по данным автора:
| Модель | Доля ответов | Медиана времени ответа | Средняя цена ответа |
|---|---|---|---|
| DeepSeek (текст + зрение) | 88% | 2,5–12 с | $0,002–0,007 |
| Claude Opus 5 | 7% | 18–38 с | $0,21–0,24 |
| Claude Haiku 4.5 | 2,4% | 43 с | $0,006 |
| GLM 5.2 (эксперимент) | 2,2% | 5 с | $0,026 |
Сам секретарь стоил $51 за месяц, из них $39 пришлось на ответы Opus. Получается, что 7% ответов съели около трёх четвертей бюджета. По оценке автора, один ответ Opus стоит примерно как 50 ответов DeepSeek.
Из таблицы следуют три практических вывода.
Время ответа — тоже цена. Медиана Opus — 18–38 секунд против 2,5–12 у DeepSeek. Для чата это ощутимая разница: отправь хаб весь поток на сильную модель, бот стал бы медленным даже при неограниченном бюджете.
Дешёвая модель с медленным ответом не всегда выгодна. У Claude Haiku 4.5 цена ответа низкая, но медиана — 43 секунды, дольше, чем у Opus. Причины задержки в материале не разбираются, поэтому делать вывод о самой модели не стоит. Вывод про метрики надёжнее: цену и время нужно смотреть в одной таблице, по отдельности они обманывают.
Эксперимент виден в цифрах. GLM 5.2 обрабатывает 2,2% ответов как эксперимент. Через прокси с алиасами новую модель можно пустить на небольшую долю трафика и сравнить с текущей на реальных запросах, а не на бенчмарках.
Можно ли сэкономить ещё и отдать эти 7% тоже DeepSeek? Автор отвечает, что можно, но именно в этих запросах люди просят «разбери договор» или «посчитай, хватит ли топлива». Ошибка в таком ответе стоит дороже двадцати центов. Это и есть критерий для эскалации: цена ошибки, а не сложность запроса сама по себе.
Что выбор модели не решает: контекст, даты и метаданные
Самый поучительный раздел исходной статьи — список ошибок. Почти ни одна из них не лечится заменой модели на более дорогую. Причины в том, что именно модель получает на вход.
Ответ не на то сообщение. Пользователь прислал фото регулировки лопастей вертолёта, а бот подробно разобрал состав лекарства с фото, присланного раньше в том же разговоре. В длинном контексте модель цепляется за предыдущую картинку. Последнее сообщение в промпте теперь отделено явным маркером и инструкцией отвечать только на него. По словам автора, ошибки стали реже, но не исчезли.
Язык. Пользователь пишет по-русски, а ответ приходит на английском. Причина нашлась в метаданных: система неверно определила язык, а модель послушно следовала пометке в системном промпте. Урок автора: метаданные в системном промпте модель считает важнее языка самого сообщения.
Даты. Бот рассказывал о планах на 3 и 15 июля, когда было уже 20-е. Модель плохо понимает «сегодня», если его не подставить явно.
Факт вместо действия. В календаре появилась запись «Звонок Teams (ссылка сохранена)», а саму ссылку бот никуда не положил. Модель записала факт сохранения вместо сохранения.
Доменные термины. Авиационный термин бот уверенно истолковал неправильно. После этого полётные вопросы ушли отдельному агенту-штурману. Здесь решением стало новое разделение на агентов, а не модель мощнее.
Есть и обратный пример. На вопрос о посадке вертолёта у загородного участка бот посчитал время полёта и топливо, заметил рядом закрытую зону и прямо написал, что полный перечень зон подтвердить не смог и номера выдумывать не будет. Автор ценит такое поведение выше, чем модель, которая права в 95% случаев: признание «не знаю» в критичной задаче защищает от худшего исхода.
Отсюда практическое правило. Прежде чем поднимать модель на класс выше из-за ошибок, проверьте вход: что лежит в контексте, какие метаданные в системном промпте, подставлена ли дата.
Память и зрение: что влияет на выбор моделей помимо цены
Две особенности кейса прямо влияют на подбор моделей, хотя к роутингу отношения не имеют.
Зрение обязательно. Автор разложил 6796 содержательных задач по темам с помощью той же DeepSeek, и разбор фото, документов и скриншотов оказался на первом месте — 19,6%. Каждая пятая задача начинается с картинки. Поэтому у секретаря есть отдельная vision-модель, и она даёт почти 7% всех его ответов. Агент, который не видит фото, в таком продукте теряет главный сценарий. Сам автор оговаривает, что классификация приблизительная и доли могут гулять на пару пунктов.
Память — это поиск, а не длинный контекст. Каждый обмен репликами сохраняется как эпизод, в базе их 7933 от 97 человек. Поиск гибридный: смысловой через pgvector плюс совпадение по словам, причём слова пользователя весят больше слов ответа. Эмбеддинг считается в фоне, так что ответ его не ждёт. Если сервис эмбеддингов недоступен, поиск переключается на одни слова. Средний поиск занимает 33 мс, медиана — 17 мс.
Для выбора модели это значит следующее. Ради «помнить всё» не нужно гнаться за моделью с огромным окном контекста и платить за длинный вход в каждом запросе. Достаточно подтягивать в промпт несколько релевантных эпизодов, а это работает и с дешёвой моделью. Заодно не срабатывает триггер length и запрос не уходит на дорогую модель без нужды.
Любопытна и картина спроса: календарь и напоминания — всего 4,7% задач, а здоровье и юридические вопросы вместе — почти 12%. Под такие темы автор держит отдельных агентов с моделями, выбранными по качеству, с жёстким требованием не выдумывать дозировки и статьи законов.
Границы и цена
Схема «дешёвая по умолчанию, дорогая по правилу» хорошо работает в этом кейсе, но у неё есть понятные пределы.
- Регулярка ловит слова, а не смысл. Запрос «хватит ли мне бензина до Твери с остановкой» не содержит слова «посчитай» и уйдёт на дешёвую модель. Обратная ошибка тоже возможна: «сравни два цвета» отправит на Opus пустяковый вопрос. Список триггеров придётся пополнять по логам, и он никогда не будет полным.
- Триггер по длине грубый. Длинная переписка может быть просто болтовнёй, и тогда сильная модель отвечает дорого и медленно там, где хватило бы дешёвой.
- Цифры кейса масштабируются условно. $77 в месяц — это 118 пользователей и несколько тысяч запросов. При другом составе задач доля эскалаций и итоговый счёт будут другими. Переносить проценты на свой продукт без собственных замеров нельзя.
- Цены и модели меняются. Таблица отражает конкретные 30 дней. Через прокси с алиасами пересобрать схему легко, но пересматривать её придётся регулярно.
- Дорогая модель не исправляет плохой вход. Ошибки с контекстом, датами и метаданными в кейсе лечились правкой промпта и архитектуры, а не повышением класса модели.
- Инфраструктура тоже стоит денег и времени. Прокси, Postgres с pgvector, локальные эмбеддинги, свой поиск, мониторинг — это сервера и обслуживание, которые в $77 не входят: сумма покрывает только языковые модели.
- Безопасность не зависит от выбора модели. Автор гонял бота на prompt injection, то есть попытках подменить инструкции через текст сообщения, и тот отказывал. Но главная защита в другом: ключей в контексте модели нет вовсе. Дешёвая модель в хабе допустима именно потому, что ей нечего выдать.
Что с этим делать
- Разметьте свой трафик до выбора моделей. Отделите короткие реплики и простые справки от задач, где ошибка стоит денег или здоровья. Доля второго и определит, сколько вы будете тратить на сильную модель.
- Поставьте прокси с алиасами между агентами и провайдерами. Тогда замена модели или эксперимент на части трафика — это правка конфига, а не код.
- Начните с прозрачного правила эскалации. Список слов-триггеров и порог длины легко тестировать и объяснять. Классификатор на модели стоит пробовать, когда логи покажут, что регулярка систематически промахивается.
- Собирайте цену и время ответа по каждой модели в одной таблице. Без этих данных выбор модели для агента остаётся догадкой.
- Разбирая ошибки, сначала смотрите на вход. Дата, язык, маркер нового сообщения и чистота контекста часто решают проблему дешевле, чем переход на модель дороже.
Новые разборы практики с нейросетями выходят в Telegram-канале направления.
