Финансовая дисциплина API
Как снизить стоимость LLM API: токены, ключи и бюджеты
Снижение стоимости LLM API начинается не с хаотичного сокращения prompt, а с понимания, какая продуктовая функция потребляет ресурс и зачем. Когда команда измеряет токены, разделяет ключи и вводит границы на одну задачу, расходы становятся объяснимыми. После этого можно выбирать модель и оптимизировать контекст, не жертвуя качеством вслепую.
Сначала определите единицу полезной работы
«Мы тратим много на ИИ» — плохая метрика для решения. Гораздо полезнее определить единицу работы: обработанный тикет, черновик карточки товара, проверенный документ, диалог с пользователем или успешно завершённый сценарий. Для каждой единицы зафиксируйте входные токены, выходные токены, число вызовов, модель, попытки и итоговую оценку качества. Тогда видно, растёт ли расход потому, что запрос стал длиннее, повысился параллелизм, появилось больше повторов или изменился сам продуктовый поток.
Не начинайте с публикации «самой дешёвой модели» во все места. Более короткий ответ, который приходится несколько раз переделывать, может стоить дороже одной качественной генерации. Сравнивайте не цену единичного вызова, а цену результата, который прошёл вашу проверку. Для критичных задач добавьте небольшую выборку ручной оценки; для рутинных — автоматические тесты с заранее известными ожидаемыми признаками.
Измеряйте вход и выход отдельно
Контекст часто растёт незаметно: в каждый запрос попадает вся переписка, большой system prompt, повторяющиеся инструкции и документы целиком. Выход тоже может быть избыточным, если приложение просит «подробно» там, где нужен классификатор, JSON с несколькими полями или одно предложение. Раздельная метрика сразу подсказывает, куда смотреть. Большой вход — повод сжать историю и убрать повтор; большой выход — повод поставить явный предел и уточнить формат результата.
Сохраняйте в телеметрии только численные показатели и технические идентификаторы, если полное содержимое не требуется для задачи. Это одновременно снижает риск утечек и стоимость хранения логов. Не записывайте заголовок Authorization, API Key, cookies или полные пользовательские данные ради удобства отладки. Если нужен образец для теста, используйте обезличенный fixture, а не production-диалог.
Лимитируйте задачу до отправки
Контроль затрат лучше всего работает до вызова модели. Для каждой функции продукта установите максимальную длину входа, максимум выходных токенов, число документов и допустимое число попыток. Покажите эти значения в конфигурации, а не прячьте в нескольких вызовах SDK. Пользователь должен понимать, когда его текст слишком велик, а система — отклонять или ставить в очередь чрезмерную задачу до того, как она станет неожиданным расходом.
// Серверный пример: значения выбирает ваша команда после измерений.
const requestBudget = {
maxInputCharacters: 12000,
maxOutputTokens: 500,
maxAttempts: 2
};
if (userText.length > requestBudget.maxInputCharacters) {
throw new Error('Input is too large for this operation');
}
const payload = {
model: process.env.RUSSIAAPI_MODEL, // модель из /v1/models
messages: [{ role: 'user', content: userText }],
max_tokens: requestBudget.maxOutputTokens
};
Этот пример запускается на сервере при условии, что переменная модели задана и соответствует доступному вашему ключу значению. Числа не являются универсальной рекомендацией: выберите их по результатам тестов и требованиям функции. В браузерный код ключ и вызов API не переносите. Схема безопасного подключения описана в статье про OpenAI-совместимый API.
Сокращайте контекст осмысленно
Хороший prompt не обязательно длинный. Уберите дублирующиеся правила, передавайте структурированные данные вместо текстовых пересказов и не прикладывайте всю историю, если для текущего шага нужна только последняя реплика и краткое резюме. Для поиска по внутренним материалам сначала отберите несколько релевантных фрагментов, затем передайте их модели с источниками и ограничением длины. Резюмируйте старую переписку отдельной контролируемой операцией, а не добавляйте её бесконечно.
При этом не экономьте за счёт критически важного контекста. Если модель должна принять решение по договору, медицине, финансам или персональным данным, минимизация входа требует предметной проверки, а не только токенометра. У команды должны быть правила, какие данные допустимо передавать, кто утверждает prompt и как человек проверяет результат. API gateway не снимает обязанности соблюдать применимые законы, договоры и правила поставщиков.
Разделите ключи, бюджеты и ответственность
Один общий ключ делает расход непрозрачным: невозможно быстро отличить эксперимент аналитика от нагрузки production-сервиса. Создавайте отдельные API Key для приложений и окружений, давайте им ясные названия и задавайте квоты по назначению. Когда тесты внезапно начинают отправлять длинные запросы, вы увидите источник и сможете ограничить только его, не останавливая весь продукт.
Минимальный набор измерений — расход по ключу, функции продукта, модели и окружению. Следующий уровень — предупреждения на порогах бюджета и автоматическое безопасное действие: уменьшить очередь фоновых задач, отключить необязательную функцию, перевести запрос в ручную обработку. Не стоит автоматически переключать пользователей на неизвестную модель без тестов, не стоит использовать чужой ключ и не стоит обещать, что расходы всегда будут фиксированными. Любая автоматизация должна быть наблюдаемой и обратимой.
Выбирайте модель по тесту, а не по названию
Для каждой функции сформируйте небольшой набор обезличенных примеров: короткие, длинные, сложные, неоднозначные и пограничные. Прогоните доступные модели из текущего каталога с одинаковой инструкцией, лимитами и критерием качества. Сравните долю полезных результатов, задержку, число повторов и измеренный расход. Только после этого закрепляйте модель как default. Не привязывайте внутренний код к случайно найденному названию: сверяйте доступность через GET /v1/models и оставляйте безопасный путь ошибки, если выбранная модель недоступна.
Если функция допускает несколько уровней качества, сделайте выбор явным. Например, черновик может использовать один проверенный профиль, а финальное решение — другой, но пользователь и команда должны понимать разницу. Такой подход лучше, чем скрытая экономия, при которой важная задача неожиданно получает менее подходящий ответ. Следите за ошибками и 429: лишние повторы также меняют итоговую стоимость. Политика очереди и backoff разобрана в отдельном руководстве.
Еженедельный чек-лист
- Есть ли расход по функции, окружению и собственному ключу, а не только общая сумма?
- Ограничены ли вход, выход, число попыток и конкурентность для каждой операции?
- Убраны ли повторяющиеся инструкции и ненужная история из контекста?
- Проверена ли модель на ваших обезличенных примерах и в текущем каталоге?
- Есть ли оповещение о резком росте расхода и понятный безопасный план реакции?
- Защищены ли секреты и исключены ли ключи из клиентского кода и логов?
Если на любой вопрос нет ответа, не начинайте с «оптимизации prompt». Сначала восстановите наблюдаемость. Она позволит отличить проблему продукта от проблемы конфигурации и сделать последующие изменения проверяемыми.
Наведите порядок в API Key и лимитах
Создайте отдельные ключи для сервисов и окружений, настройте квоты и сверяйте выбор модели с актуальным каталогом. Это базовая основа контролируемых расходов.
Открыть консоль RussiaAPIFAQ
С чего начать оптимизацию стоимости LLM API?
С измерения расхода по продуктовой функции, модели, ключу, входным и выходным токенам. Затем установите ограничение на одну задачу и сравнивайте изменения с качеством результата, а не только с ценой вызова.
Можно ли использовать один API Key во всех сервисах?
Лучше разделять ключи по приложению и окружению. Так проще ограничить квоту, отозвать скомпрометированный доступ и понять, откуда возникла аномалия. Храните ключи только в защищённом серверном окружении.
Гарантирует ли более дешёвая модель меньшую итоговую стоимость?
Нет. Учитывайте повторы, длину контекста, качество, проверку результата и влияние на пользовательский поток. Доступность и текущие параметры моделей нужно сверять в каталоге перед решением.