Tvijo wiki
Каталог

Темы

Дневной бюджет ИИ, который отказывает при отсутствии лимита: потолки, session id и найденный нами пробел

Одна фоновая задача как-то сделала около 118 000 вызовов модели за день меньше чем на восемнадцать долларов, и мы не смогли сказать, какая именно. Остановили бы два правила: дневной потолок, который отказывает, если не задан, и session id в каждом вызове.

🎯 Для Разработчик, который запускает вызовы ИИ в циклах, по cron или в фоновых воркерах

📚 Вы узнаете
  • Как выглядит сбежавшая задача в ваших собственных цифрах
  • Почему потолок должен отказывать при отсутствии и зачем каждому вызову метка
  • Как проверить свой помощник бюджета на тот же пробел, что нашли у нас

🔥 Что случилось

26 июня 2026 в нашей базе трасс записано 117 917 вызовов модели за день на сумму $17,88. Накануне было 1 809 вызовов и $2,14. Это примерно в 65 раз больше по объёму. Из 117 917 вызовов у 116 382 не было session id, поэтому трасса не могла сказать, какая задача их сделала. Сначала вину возложили не на ту задачу. Только цифры по дням и по session id указали на настоящую: цикл автоматического перевода. По записи об инциденте ущерб — около семнадцати с половиной долларов. Трасса за тот день показывает $17,88, туда входит и обычный трафик дня.

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

🧱 Два правила

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

Правило второе: каждый вызов несёт session id. Идентификатор называет задачу, а не человека. Без него первый вопрос после тревоги «кто это сделал?» остаётся без ответа. Автоматизацию, которая зовёт модель без него, мы не коммитим.

🔎 Пробел, найденный при написании этой статьи

Наш помощник дневного бюджета для фоновых задач читает лимит из переменной окружения. 3 ноября 2026 мы запустили его с пустой переменной. Лимит получился 0,0, а вызов «можно ли тратить?» вернул «да». То есть в этом помощнике отсутствие потолка означает отсутствие ограничения — противоположность правилу первому. Вызывающие, которые задают положительный лимит, защищены. Тот, кто забыл переменную, — нет.

Наш измеряющий транспорт, то есть полоса, которая платит провайдерам, ведёт себя правильно: при отсутствии потолка он отказывает с сообщением «нужен явный дневной потолок». Два помощника расходятся, и мы записали помощник как дефект к исправлению. Вывод: проверяйте свою защиту при убранной настройке.

📈 Какова доля вызовов без метки

С 2026-04-24 в нашей базе трасс 777 526 вызовов на $164,31. Из них у 125 541 вызовов, это 16,1 процента, нет session id, и они стоят $24,57, то есть 15,0 процента всей суммы. Большая часть — тот самый день. Расход без метки — не ошибка округления.

🛠️ Практика: закройте оба пробела

  1. Перечислите все места, где модель вызывается в цикле, по расписанию или в фоне.
  2. Для каждого найдите настройку дневного потолка. Нет — добавьте. Если код считает пустое значение «без лимита», замените на отказ.
  3. Напишите тест, который запускает задачу с убранной настройкой и проверяет, что ни одного вызова не сделано.
  4. Добавьте session id в каждый вызов. Пусть обёртка выбрасывает ошибку, если его нет.
  5. Запросите из трасс вызовы без идентификатора по дням. Сделайте этот запрос тревогой.
  6. Порог тревоги берите из обычного дня, например втрое от медианы за последние четырнадцать дней.

✅ Проверьте себя

  • Уберите потолок у одной задачи в тестовой среде. Задача отказывается и говорит почему.
  • Выберите любой вызов прошлой недели. Вы можете назвать задачу, которая его сделала.
  • Число вызовов без идентификатора за последние семь дней равно нулю, или вы можете объяснить каждый.
  • Вчерашний расход по задачам читается одним запросом.

🚧 Когда это не работает

  • Слишком высокий потолок. Сто долларов не защищают задачу на десять. Назначайте потолок по реальной потребности.
  • Расход, который приходит позже. Часть провайдеров сообщает стоимость после вызова. Потолок по отчётному расходу можно перескочить на то, что уже в полёте. Резервируйте до вызова.
  • Общие ключи. Если пять задач делят один ключ, счёт провайдера их не разделит. Это должен делать ваш session id.
  • Повторы. Цикл повторов может умножить расход. Считайте каждую попытку в потолок.
  • Бесплатные модели. У бесплатных тарифов есть лимиты по скорости, и они могут исчезнуть. Потолку в ноль долларов всё равно нужен лимит вызовов.

📊 Доказательства

Что измерено Вызовы и стоимость по дням и вызовы без session id в нашей базе трасс; поведение помощника бюджета при пустом лимите
Когда 3 ноября 2026, 22:06 UTC
Артефакт База трасс LLM (777 526 вызовов с 2026-04-24); день 26 июня 2026 и прямой запуск помощника
Ограничение Один инцидент и один помощник. Трасса показывает объём и стоимость, но не имя задачи: оно названо в нашей записи об инциденте

➡️ Дальше

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

Источники

Связи опубликованных статей. Выберите узел, чтобы открыть статью у заголовка.

100%
→ Связанные статьи← Ссылаются сюда⋯ Та же тема
Связи статей · клавиатура / текст

💬 Комментарии

Комментарии публичны и модерируются. Не публикуйте персональные данные.
  • Комментариев пока нет. Будьте первым!

Следующие шаги

ИИ-агенты и MCP простыми словами

Векторная база — это карта, а не источник: чему нас научил поиск

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

ИИ-агенты и MCP простыми словами

Когда неизвестно, сколько стоил вызов модели: заморозка, затем сверка

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

ИИ-агенты и MCP простыми словами

Как разбить большую задачу для дешёвой модели: урок 24 000 байт

Дешёвая модель хорошо справляется с одной небольшой чёткой задачей и плохо — с большой кучей. Мы ограничиваем задачу 24 000 байт и отклоняем большие до вызова любой модели. Режьте по единицам — один файл или одна страна на задачу — и проверяйте размер до запуска.

ИИ-агенты и MCP простыми словами

Навыки, MCP-инструменты и правила: три способа дать агенту возможности

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