Tvijo wiki
Каталог

Теми

Денний бюджет для AI, який відмовляє за замовчуванням: ліміти, ідентифікатори сесій і прогалина, яку ми знайшли

Одного разу неконтрольоване завдання зробило близько 118 000 викликів моделі за день і витратило менш ніж вісімнадцять доларів, а ми не могли сказати, яке саме це завдання. Два правила зупинили б це: денний ліміт, що відмовляє, коли його не задано, та ідентифікатор сесії в кожному виклику.

🎯 Для Розробник, який запускає виклики AI в циклах, cron-завданнях або фонових воркерах

📚 Ви дізнаєтеся
  • Як виглядає неконтрольоване завдання AI у ваших власних числах
  • Чому ліміт має відмовляти, коли його немає, і чому кожен виклик потребує мітки
  • Як перевірити власний помічник бюджету на прогалину, яку ми знайшли у своєму

🔥 Що сталося

26 червня 2026 року наша база трасування записала 117 917 викликів моделі за один день із вартістю $17,88. Днем раніше було 1 809 викликів і $2,14. Це приблизно в 65 разів більший обсяг. З 117 917 викликів 116 382 не мали ідентифікатора сесії, тож трасування не могло сказати, яке завдання їх зробило. Спершу вина лягла на не те завдання. Лише числа за день і за сесією вказали на справжнє — автоматичний цикл перекладу. У нашій нотатці про інцидент збитки оцінені приблизно у сімнадцять з половиною доларів. Трасування за той день показує $17,88, і це також включає звичайний трафік дня.

Гроші були невеликі. Урок — ні: цикл, який викликає модель для кожного елемента без ліміту, масштабується до того, що є на вході.

🧱 Два правила

Правило перше: кожен автоматичний шлях має денний ліміт, а відсутній ліміт означає відмову. Ліміт читається з явно заданого налаштування. Якщо налаштування порожнє, дорівнює нулю або від'ємне, завдання не повинно запускатися. Протилежне замовчування — «немає налаштування, немає обмеження» — перетворює забутий рядок конфігурації на необмежені витрати.

Правило друге: кожен виклик несе ідентифікатор сесії. Ідентифікатор називає завдання, а не людину. Без нього перше питання після тривоги — «хто це зробив?» — залишається без відповіді. Ми не комітимо автоматизацію, яка викликає модель без нього.

🔎 Прогалина, яку ми знайшли, поки писали це

Наш помічник, що відстежує денний бюджет для фонових завдань, читає ліміт із змінної середовища. Ми запустили його 3 листопада 2026 року з порожньою змінною. Ліміт вийшов 0,0, а виклик із питанням, чи дозволені витрати, повернув «так». Іншими словами, у цьому помічнику відсутній ліміт означає відсутність ліміту, а це протилежність правилу першому. Виклики, які задають додатний ліміт, у безпеці. Виклик, що забув змінну, не захищений.

Наш транспорт із обліком, смуга, яка платить провайдерам, поводиться правильно: він відмовляє з повідомленням «explicit daily cap required», коли ліміту немає. Два помічники розходяться, і ми зафіксували помічник як дефект, який треба виправити. Урок — перевіряти власний запобіжник із видаленим налаштуванням.

📈 Яка частка без міток

Від 2026-04-24 наша база трасування містить 777 526 викликів загальною вартістю $164,31. З них 125 541 виклик, 16,1 відсотка, не має ідентифікатора сесії, і вони коштували $24,57 — 15,0 відсотка від загальної суми. Більшість цього припадає на той самий день. Витрати без міток — не похибка округлення.

🛠️ Практика: закрийте обидві прогалини

  1. Перелічіть кожне місце, яке викликає модель у циклі, за розкладом або у фоні.
  2. Для кожного знайдіть налаштування денного ліміту. Якщо його немає, додайте. Якщо код вважає порожнє значення необмеженим, змініть його на відмову.
  3. Напишіть тест, який запускає завдання з видаленим налаштуванням і перевіряє, що жодного виклику не зроблено.
  4. Додайте ідентифікатор сесії до кожного виклику. Зробіть так, щоб обгортка кидала помилку, коли його немає.
  5. Запитуйте у трасуванні виклики без ідентифікатора, за кожен день. Зробіть цей запит тривогою.
  6. Задайте поріг тривоги від вашого звичайного дня, наприклад утричі більше за медіану останніх чотирнадцяти днів.

✅ Перевірте себе

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

🚧 Коли це не працює

  • Занадто високий ліміт. Ліміт у сто доларів не захищає нічого для завдання на десять доларів. Задавайте його з реальної потреби.
  • Витрати, що надходять із запізненням. Деякі провайдери повідомляють вартість після виклику. Ліміт, заснований на повідомлених витратах, можна перевищити на те, що зараз у дорозі. Резервуйте до виклику.
  • Спільні ключі. Якщо п'ять завдань ділять один ключ, рахунок провайдера не може їх розділити. Це має зробити ваш ідентифікатор сесії.
  • Повтори. Цикл повторів може примножити витрати. Рахуйте кожну спробу проти ліміту.
  • Безкоштовні моделі. Безкоштовні рівні мають обмеження частоти й можуть зникнути. Ліміт у нуль доларів усе одно потребує обмеження кількості викликів.

📊 Докази

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

➡️ Далі

Запишіть обмеження разом із Витрати, бюджети й ліміти, а в Порадник з інцидентів AI для маленької команди визначте, що відбувається, коли завдання йде не так.

Джерела

Зв’язки опублікованих статей. Виберіть вузол, щоб відкрити статтю біля заголовка.

100%
→ Пов'язані статті← Посилаються сюди⋯ Та сама тема
Зв’язки статей · клавіатура / текст

💬 Коментарі

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

Наступні кроки

AI agents and MCP explained

Векторна база — це мапа, а не джерело: що ми з'ясували про пошук

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

AI agents and MCP explained

Коли невідомо, скільки коштував виклик моделі: заморожування, потім звіряння

Іноді виклик моделі перевищує час очікування, і ви не знаєте, чи провайдер списав кошти. Ніколи не записуйте це як нуль. Позначте витрату як непевну, зупиніть нові платні виклики й доручте названій людині звірити її з випискою провайдера. Виняток — відмови, що сталися до генерації.

AI agents and MCP explained

Розбиття великого завдання для дешевої моделі: урок про 24 000 байтів

Дешева модель добре дає раду з однією невеликою чітко окресленою роботою, але погано з великим нагромадженням. Ми обмежуємо завдання 24 000 байтами і відмовляємо більшим ще до виклику моделі. Діліть на одиниці — один файл або одна країна на завдання — і перевіряйте розмір до початку.

AI agents and MCP explained

Навички, інструменти MCP і правила: три способи дати агенту можливості

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