Мій оркестратор агентів спалював по 1–2 мільйони токенів Opus на кожне завдання.
Як вибухнула вартість
Оркестратор був розроблений для Claude Code і використовував ієрархію субагентів. Кожен субагент успадковував налаштування батьківського агента, запускав власний промпт і повертав результат у цикл, доки рецензент не оголошував результат «чистим». Інструмент виконував завдання, але ціна була астрономічною.
Три приховані «податки» помножили кількість токенів:
- Податок на модель — субагенти ніколи не вказували модель, тому за замовчуванням використовувався Opus, найдорожчий рівень. Дрібна операція, яка цілком підійшла б для дешевшої моделі (Haiku або Sonnet), тарифікувалася за ставками Opus.
- Податок на кеш — кешування промптів повторно використовує лише точні побайтові збіги. Оскільки кожен субагент додавав індивідуальні інструкції, кожен виклик призводив до запису в «холодний» кеш. Кеш батьківського агента не міг бути використаний повторно, що нівелювало економію, яку зазвичай забезпечує спільний кеш.
- Податок на цикл — правило «цикл, доки не стане чисто» підтримувало процес, поки рецензент знаходив хоча б одну помилку. Без жорсткої межі цикл працював доти, доки модель не зупинялася сама.
Разом ці множники перетворили кілька рядків коду на токенну лавину.
Чому правило бюджету в промпті не спрацювало
Початкова архітектура намагалася обмежити витрати, вбудувавши правило бюджету безпосередньо в системний промпт. Теоретично, вказівка моделі «не перевищуй X токенів» мала б обмежити використання. На практиці правило, засноване на промпті, є лише побажанням. У міру зростання сесії модель стискає контекст і може взагалі відкинути або проігнорувати ці інструкції. Результат: модель поводилася так, ніби правила ніколи й не існувало.
Перенесення контролю з промпту в код
Редизайн вилучив логіку бюджету з промпту та переніс її в детерміновану систему хуків, яку модель не може перевизначити.
- Явний вибір моделі — кожен виклик субагента тепер потребує конкретного вибору моделі (Haiku, Sonnet або Opus). Приховане успадкування вилучено, тому дешеві завдання залишаються дешевими.
- Жорсткі обмеження через хук PreToolUse — перед запуском будь-якого інструменту хук перевіряє:
- Кількість уже здійснених викликів у сесії.
- Чи відповідає обрана модель мінімальному рівню (щоб запобігти випадковому використанню Opus).
- Максимальну кількість ітерацій циклу, після якої процес переривається.
Якщо будь-яке обмеження спрацьовує, код перериває роботу субагента; мовна модель не має можливості «переспорити» це рішення.
Що це означає для розробників
Будь-яка система, що встановлює ліміти витрат, політики безпеки або обмеження на деструктивні команди, повинна сприймати ці обмеження як код, а не як розмовні вказівки. Промпт можна перезаписати, проігнорувати або втратити під час внутрішнього стиснення моделі. Код, з іншого боку, виконується детерміновано і піддається аудиту.
