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

2026-03-20 · Мария Петрова

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

В конце прошлого года месячный счёт за LLM-инференс у одного из наших клиентов перевалил за $38k/мес. К марту мы довели его до $16.5k без потерь качества на eval-сете. Разбираем, что сработало.

1. Prompt caching — самая большая победа

Anthropic и OpenAI поддерживают кеширование префиксов промпта. Если у вас длинный system prompt (инструкции + few-shot примеры + документы), и он повторяется из запроса в запрос — вы платите за него один раз в 5 минут, а не на каждый запрос.

В нашем случае system prompt был ~4.5k токенов. После включения prompt caching стоимость одного запроса упала на ~62%.

response = client.messages.create(
    model="claude-3-sonnet-20240229",
    system=[
        {"type": "text", "text": FEW_SHOT_BLOCK, "cache_control": {"type": "ephemeral"}},
    ],
    messages=[{"role": "user", "content": user_msg}],
)

2. Routing между моделями по сложности задачи

Не все задачи требуют топовой модели. Мы построили маленький роутер (по сути — логистическая регрессия на 12 фичах запроса), который отправляет простые кейсы в Haiku, сложные — в Sonnet.

Класс задачи Модель Доля трафика
Простые (FAQ, template) Haiku 58%
Средние (classification, extraction) Sonnet 34%
Сложные (reasoning, multi-turn) Opus 8%

Итоговая средняя стоимость упала в 3.1 раза при сохранении качества (measured on holdout eval).

3. Укорачивание output через max_tokens и структурированный вывод

Раньше модель «писала сочинения» даже на yes/no задачи. Жёсткий max_tokens и tool calling с JSON schema убрали эту болезнь: output с 180 токенов в среднем упал до 35.

4. Batch API для офлайн-задач

Всё, что не требует realtime (ночные пересчёты, backfill, отчёты), переехало в batch API со скидкой 50%. Это ~18% нашего трафика.

5. Агрессивный трим контекста в RAG

Retrieval возвращал top-10 документов, в модель шли top-10. Заменили на top-5 + reranker, quality не упало, токенов на вход стало в 2 раза меньше.

6. Мониторинг на уровне запроса, а не модели

Дашборд по стоимости на каждый prompt_id. Видно, что один невинный prompt жрёт 40% бюджета — идёшь и оптимизируешь именно его. До этого оптимизировали «в среднем по больнице» — неэффективно.

Итоговая раскладка

Оптимизация Вклад в экономию
Prompt caching 32%
Model routing 28%
Batch API 12%
Output trimming 9%
RAG context trim 11%
Прочее (retry logic, dedup) 8%

Вывод

Большая часть экономии — не про «взять модель подешевле», а про убрать лишнее. Кеш работает бесплатно, роутинг окупается за неделю, а дашборды по prompt-level cost стоит завести ещё до того, как начнёте оптимизировать.


← Ко всем постам