vegman.dev
Все статьи

Как выбрать модель под задачу и не разориться

2026-03-26кейс

Начинается это почти всегда одинаково. Человек собирает первый рабочий пайплайн - цепочку шагов, где текст передается от одного вызова модели к другому, - открывает свежий рейтинг языковых моделей, берет верхнюю строчку и подставляет ее во все шаги подряд. Система работает, и это приятно. Потом приходит счет, и выясняется, что самая сильная и самая дорогая модель в системе занималась в основном тем, что перебирала списки и отбрасывала лишнее.

Дальше обычно следует второй ход: заменить дорогую модель на дешевую и выдохнуть. Это тоже ошибка, просто более тихая.

Я покажу, как выбираю модели у себя: не «лучшую», а разные - под роли внутри одной системы. Вы унесете три параметра, по которым выбор делается на самом деле, ловушку, в которую я попалась сама, и две технические детали, из-за которых система падает не там, где вы будете ее чинить.

Почему вопрос «какая модель лучше» неправильный

Место в рейтинге - это усредненный результат на наборе тестов: математика, код, рассуждения, знания, иногда все сразу. Усреднение по многим разным задачам - ровно то, что вам не нужно. У вас не «задачи вообще», у вас конкретный шаг конкретного пайплайна: отобрать из длинного списка несколько подходящих материалов, перевести абзац, найти нужный кусок в базе знаний, собрать связный текст.

Модель в системе - не сотрудник, которого нанимают «самого умного на рынке». Это деталь на конкретном месте, и у места есть требования. Верхняя строчка рейтинга не отвечает ни на один из них.

Правильный вопрос звучит так: какая модель нужна вот на этом шаге и почему. И ответ на него почти никогда не одинаковый для всей системы.

flowchart LR
  A[Поток входящих материалов] --> B[Роль: массовое чтение и первичный отбор]
  B -->|быстрая дешевая модель| C[Короткий список]
  C --> D[Роль: рассуждение, редактура, перевод]
  D -->|сильная модель| E[Готовый результат]
  F[Отраслевая база знаний на русском] --> G[Роль: поиск по смыслу]
  G -->|модель отечественного провайдера, своя квота| D
Одна система, три роли, три разные модели: дорогая работает последней и на малом объеме

Роли, а не рейтинги: как это устроено у меня

В моей системе несколько ролей, и у каждой своя модель.

  • Массовое чтение и первичный отбор материалов - быстрая дешевая модель. Она идет по потоку входящего, смотрит на каждый элемент по формальным критериям и оставляет короткий список.
  • Рассуждение, редактура и перевод - сильная модель. Она включается позже и работает уже не с потоком, а с тем немногим, что прошло отбор.
  • Работа с отраслевой базой знаний на русском - модель отечественного провайдера с собственной квотой. Квота здесь означает отдельный лимит и отдельный баланс, не общий с остальными вызовами.

Разделение по ролям дает главное: дорогая модель вызывается редко и по делу, а не на каждом чихе. Обратите внимание, откуда берется экономия. Не из того, что я нашла модель подешевле, а из того, что дорогой вызов перестал происходить там, где он не был нужен. Это разные вещи, и вторая работает надежнее.

Три параметра, по которым реально выбирают

Первый: язык и домен

Чтобы искать по смыслу, а не по совпадению слов, текст превращают в вектор - длинный набор чисел, где близкие по смыслу фрагменты оказываются рядом. Это называется векторизацией, и делает ее отдельная модель. Так устроен поиск по базе знаний: вопрос векторизуется, и система достает ближайшие к нему куски документов.

Для русскоязычной базы знаний качество векторизации на русском важнее, чем место модели в общем рейтинге. Модель может быть сильной в целом и при этом хуже различать оттенки формулировок вашего языка и вашей отрасли. Проверять это нужно на своих текстах и своих реальных вопросах, а не по таблице.

Второй: характер задачи

Отбор из списка по критериям и генерация связного текста - это разные задачи, и они нагружают модель по-разному. Быстрая модель хорошо отбирает и плохо пишет длинные тексты. У меня это выглядело так: на длинном тексте она сбивается в безличную брошюру и начинает досочинять факты - то есть уверенно выдавать правдоподобные детали, которых в исходнике не было.

Значит, вывод «модель слабая» неверен. Верный вывод: эта модель хороша на отборе и не годится на генерации. Она остается в системе, просто на своем месте.

Третий: способ оплаты

Обычная схема - поштучная оплата за токены. Токен - это кусочек текста, примерно часть слова; платите вы и за то, что отправили модели, и за то, что она написала в ответ. При такой схеме стоимость растет вместе с объемом, линейно и без потолка.

Часть работы имеет смысл уводить с поштучной оплаты на подписку с фиксированной стоимостью. Для потока однотипных задач это радикально меняет экономику: вы платите за месяц, а не за каждый прогон, и рост объема перестает быть ростом счета. Разовые и редкие задачи, наоборот, спокойно живут на поштучной оплате.

flowchart TB
  A[Регулярный вызов, который на самом деле не нужен] --> B[Шаг 1: перевести на модель дешевле]
  A --> C[Шаг 1: проверить, нужен ли вызов вообще]
  B --> D[Расход по вызову меньше в 7 раз]
  C --> E[Вызов отключен, расход по нему исчез]
  D --> F[Силы потрачены на оптимизацию мусора]
  E --> G[Сначала нужность, потом цена]
Один и тот же ненужный вызов: удешевить или отключить

Ловушка удешевления

Теперь про ошибку, которую я проверила на себе.

У меня был регулярный вызов, который стоил заметных денег. Я перевела его на модель дешевле и получила экономию в семь раз. Цифра приятная. Проблема в том, что этот вызов вообще не был нужен - его надо было просто отключить. Вместо экономии в семь раз я могла получить экономию полную, и потратила силы на оптимизацию того, чему место в мусорке.

Отсюда порядок действий, который я теперь соблюдаю жестко: сначала проверяют нужность вызова, потом его цену. Удешевление - второй шаг, не первый. Он очень соблазнителен, потому что дает быстрый измеримый результат и не требует думать, что происходит в системе.

Потолок токенов, который вы не тратите

При вызове модели вы задаете верхнюю границу длины ответа - параметр, который обычно называется max_tokens. Это не расход, это заявка: «ответ может быть вот таким длинным».

У провайдеров бывает проверка платежеспособности по запрошенному потолку, а не по фактическому расходу. Задача, которая просит потолок модели ради ответа в девяносто токенов, начинает падать при просевшем балансе - притом что тратит она копейки. Симптом обманчивый: расход маленький, а вызовы не проходят. Лечится тем, что потолок ставится по реальной длине ответа, а не «побольше, вдруг пригодится».

Один ключ на всех

Несколько агентов могут делить один ключ доступа и один баланс. Когда баланс кончается, падают все сразу, а выглядит это как поломка одного - того, чью ошибку вы заметили первой. Вы идете чинить его логику, а причина общая и снаружи.

Признак именно этой ситуации: несколько разных сбоев в разных местах в одну минуту. Полезно заранее знать, какой агент каким ключом ходит, и разводить критичные роли по разным балансам.

Применить у себя

Что проверить на практике

  • Выпишите шаги своего пайплайна списком: что происходит, чем, как часто. Пока этого списка нет, разговор о моделях бессмысленен.
  • Напротив каждого шага пометьте тип задачи: отбор и классификация или генерация текста. Первое отдавайте быстрой модели, второе - сильной.
  • Найдите самый частый вызов. Спросите не «чем его заменить подешевле», а «что сломается, если его выключить». Если внятного ответа нет - выключайте и смотрите.
  • Посмотрите max_tokens у каждого вызова и сравните с реальной длиной ответов. Все, где потолок в разы больше факта, приведите в соответствие.
  • Составьте карту ключей: какой агент каким ключом и с какого баланса работает. Найдите места, где один баланс держит несколько независимых ролей.
  • Для русскоязычной базы знаний прогоните свои настоящие вопросы через разные модели векторизации и сравните, что нашлось. Оценивайте выдачу, а не описание модели.
  • Посчитайте, есть ли у вас поток однотипных задач. Если есть - сравните его месячную стоимость по токенам с ценой подписки.

Как понять, что получилось

Критерий не в счете, хотя счет тоже изменится. Критерий вот такой.

  • Вы можете за минуту объяснить про каждый шаг, почему там стоит именно эта модель, и объяснение не сводится к «она в топе рейтинга».
  • Сильная модель вызывается редко и на малом объеме - только после того, как дешевый отбор сократил поток.
  • Если убрать сильную модель с шага отбора, качество итогового результата не меняется. Значит, на этом шаге ее и не было нужно.
  • Длинные тексты перестали приходить безличной брошюрой с досочиненными деталями - потому что их пишет модель, которая это умеет.
  • Когда что-то падает, вы сначала смотрите на балансы и ключи, а потом на логику агента. Этот рефлекс экономит часы.

Выбор модели - это не покупка, а проектирование. Вы не ищете одну хорошую, вы расставляете несколько разных по местам, где их сильные стороны нужны, а слабые не мешают. Тогда и счет становится следствием архитектуры, а не сюрпризом в конце месяца.