Мій оркестратор агентів спалював по 1–2 мільйони токенів Opus на кожне завдання.

Як вибухнула вартість

Оркестратор був розроблений для Claude Code і використовував ієрархію субагентів. Кожен субагент успадковував налаштування батьківського агента, запускав власний промпт і повертав результат у цикл, доки рецензент не оголошував результат «чистим». Інструмент виконував завдання, але ціна була астрономічною.

Три приховані «податки» помножили кількість токенів:

  • Податок на модель — субагенти ніколи не вказували модель, тому за замовчуванням використовувався Opus, найдорожчий рівень. Дрібна операція, яка цілком підійшла б для дешевшої моделі (Haiku або Sonnet), тарифікувалася за ставками Opus.
  • Податок на кеш — кешування промптів повторно використовує лише точні побайтові збіги. Оскільки кожен субагент додавав індивідуальні інструкції, кожен виклик призводив до запису в «холодний» кеш. Кеш батьківського агента не міг бути використаний повторно, що нівелювало економію, яку зазвичай забезпечує спільний кеш.
  • Податок на цикл — правило «цикл, доки не стане чисто» підтримувало процес, поки рецензент знаходив хоча б одну помилку. Без жорсткої межі цикл працював доти, доки модель не зупинялася сама.

Разом ці множники перетворили кілька рядків коду на токенну лавину.

Чому правило бюджету в промпті не спрацювало

Початкова архітектура намагалася обмежити витрати, вбудувавши правило бюджету безпосередньо в системний промпт. Теоретично, вказівка моделі «не перевищуй X токенів» мала б обмежити використання. На практиці правило, засноване на промпті, є лише побажанням. У міру зростання сесії модель стискає контекст і може взагалі відкинути або проігнорувати ці інструкції. Результат: модель поводилася так, ніби правила ніколи й не існувало.

Перенесення контролю з промпту в код

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

  1. Явний вибір моделі — кожен виклик субагента тепер потребує конкретного вибору моделі (Haiku, Sonnet або Opus). Приховане успадкування вилучено, тому дешеві завдання залишаються дешевими.
  2. Жорсткі обмеження через хук PreToolUse — перед запуском будь-якого інструменту хук перевіряє:
    • Кількість уже здійснених викликів у сесії.
    • Чи відповідає обрана модель мінімальному рівню (щоб запобігти випадковому використанню Opus).
    • Максимальну кількість ітерацій циклу, після якої процес переривається.

Якщо будь-яке обмеження спрацьовує, код перериває роботу субагента; мовна модель не має можливості «переспорити» це рішення.

Що це означає для розробників

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