ИИ2 мин чтения

Расходы на языковые модели растут не так, как подсказывает интуиция

Функция, которая в демо стоит копейки, в проде обходится в тысячи долларов в месяц — и почти никогда из-за цены за токен. Куда уходят деньги на самом деле.

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

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

Куда на самом деле уходят деньги

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

Контекст, растущий вместе с диалогом. Если вы пересылаете всю историю на каждом ходу, диалог из двадцати реплик — это не двадцать запросов. Это квадратичный объём входных токенов. Самый частый сюрприз из всех.

Входные данные, размер которых не заложили. Суммаризатор документов, проверенный на PDF в две страницы, на третий день встречает документ на триста. Что пользователь может загрузить, то он и загрузит.

Длина ответа, которую никто не ограничил. Модели по умолчанию многословны. Ответ, которому хватило бы сорока токенов, приходит на четырёхстах, а на нагрузках с большим выводом именно вывод — дорогая сторона.

Прежде чем что-то оптимизировать, получите разбивку по функциям. Не «мы потратили $4000 на API», а «вот этот эндпоинт съел из них $3100». Большинство команд месяц оптимизируют не ту функцию просто потому, что не разделили счёт.

Что чинить, в порядке отдачи

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

Поставьте жёсткий потолок на циклы агента. Лимит шагов, лимит по времени и лимит стоимости на запрос. Агент без бюджета — это программа без базового случая.

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

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

Явно ограничивайте вывод. Просите нужный формат и задавайте потолок длины. «Ответь одним предложением» — это оптимизация расходов.

Часть, которая вообще не про токены

Заметная доля расходов на языковые модели в проде — это не модель, а то, что функцию спроектировали с вызовом модели там, где он не нужен. Классификация, с которой справляется регулярное выражение. Извлечение данных из документа, у которого уже есть структурированные метаданные. Суммаризация текста, который пользователь и так собирается прочитать.

Самый дешёвый токен — тот, который вы не отправили. Это продуктовое решение, принимаемое на этапе постановки задачи, и стоит оно больше, чем все оптимизации уровня промпта вместе взятые.

Сергей Палий

Основатель, Sepia Software

Обо мне

Читать дальше

Все статьи