Не тримайте ключі провайдера в агенті: один шлюз, один токен на завдання
Якщо агент може прочитати ключ провайдера, ви не скажете, хто витратив що. Тримайте ключ в одному процесі й видавайте кожному завданню токен, який його називає, несе його бюджет і вмирає разом із ним. Тоді кожна витрата має власника, а вкрадений токен коштує мало.
🎯 Для Розробник, який дозволяє агентам викликати платні API моделей
- Чому ключ у середовищі агента руйнує атрибуцію витрат
- Як працює токен на завдання з бюджетом
- Що зберігати, а що не зберігати ніколи
🔑 Проблема спільного ключа
Найпростіше налаштування кладе ключ провайдера у файл середовища, і його читає кожен скрипт та кожен агент. Це працює, але унеможливлює три речі. Ви не скажете, яке завдання зробило виклик, бо для провайдера всі вони виглядають однаково. Ви не можете зупинити одне завдання, не зупинивши всі. І будь-який агент, який може прочитати власне середовище, здатен злити ключ через промпт.
Наш власний замір у вересні 2026 показав, що це досі відбувалося в одному runner моста, який брав файл середовища напряму. Саме через цю знахідку з'явився дизайн нижче.
🏗️ Дизайн
Один невеликий сервіс тримає ключі провайдера. Це єдиний код у системі, який їх читає, і тест сканує код, щоб довести, що жоден інший модуль цього не робить. Агенти ніколи не бачать ключа. Вони викликають сервіс і пред'являють токен.
Токен видається під одне завдання. Він прив'язаний до відбитка пакета завдання, тому його не можна використати для іншої роботи. Він несе бюджет і стелю на один виклик, час завершення, і його закривають, коли завдання закінчується. Сервіс зберігає лише хеш токена, ніколи сам токен. Кожен виклик — це рядок у журналі з id завдання, тож у витрат є власник.
Сервіс також веде свої книги окремо від інших грошових шляхів. Він не імпортує торговий код, і це перевіряє тест.
📊 У числах
Від 2026-09-21 сервіс видав 1 415 токенів завдань. 1 367 закрито, а 48 не позначено закритими: частина з них у роботі або покинуті й чекають на завершення терміну. Є 4 резервації бюджету. Файл тестів для меж модулів містить 17 тестів.
🛠️ Практика: винесіть ключ з агента
- Знайдіть кожне місце, де читається ключ провайдера: файли середовища, конфігураційні файли, скрипти. Складіть їх список.
- Створіть невеликий сервіс, який тримає ключі й надає той самий інтерфейс викликів, який ваші агенти вже використовують.
- Видавайте токен на кожне завдання. Прив'яжіть його до хешу опису завдання чи пакета, до бюджету, максимуму на один виклик і терміну дії.
- Зберігайте лише хеш токена. Покажіть токен тому, хто викликає, один раз.
- Логуйте кожен виклик з id завдання, моделлю, токенами й вартістю, включно з повторними спробами та резервними варіантами.
- Додайте тест, який сканує ваш код і падає, якщо якийсь інший модуль читає змінну з ключем.
- Приберіть ключ із середовища кожного агента і з кожного профілю оболонки, який успадковують агенти.
✅ Перевірте себе
- Виведіть середовище процесу агента. Ключа провайдера там немає.
- Використайте токен завдання після того, як завдання закрито. Виклик відхилено.
- Використайте токен з іншим пакетом. Його відхилено.
- Для будь-якого виклику в журналі минулого тижня назвіть завдання та його бюджет.
🚧 Коли це не працює
- Шлюз стає єдиною точкою відмови. Якщо він лежить, не працює жоден виклик моделі. Запускайте його як керований сервіс із політикою перезапуску.
- Ключі деінде. Якщо профіль оболонки розробника досі експортує ключ, агент його успадковує. Перевіряйте й оболонки.
- Токени з довгим життям. Токен, що живе тиждень, — це ключ із зайвими кроками. Прив'язуйте його до завдання.
- Збій одного провайдера. Шлюз його не усуває. Визначте політику резервних варіантів і логуйте їх.
- Локальні моделі. Модель на вашому власному обладнанні не має ключа. Журнал вам усе одно потрібен.
📊 Докази
| Що ми заміряли | Видані та закриті токени завдань, резервації та тести для меж модулів |
| Коли | 3 листопада 2026, 21:53 UTC |
| Артефакт | Таблиці токенів завдань і резервацій нашої транспортної бази даних, модуль облікових даних і його тести меж у нашому приватному репозиторії |
| Обмеження | Кількість показує використання, а не безпеку. Огляд від людини поза командою не опубліковано |
➡️ Далі
Подивіться, як бюджет резервується до запуску завдання, у Витрати, бюджети та ліміти, а що перевіряти в з'єднанні — у Контрольний список безпеки сервера MCP.
Джерела
- Витрати, бюджети та ліміти: резервування витрат.
- Контрольний список безпеки сервера MCP: перевірки перед підключенням даних.
- Дозволи та потік даних: чого агент може торкатися.
- Квитанції завдань агента: що вони доводять: докази на кожен запуск.
🔗 Зв'язки статті
Відкрити повний граф знань ↗Зв’язки опублікованих статей. Виберіть вузол, щоб відкрити статтю біля заголовка.
Зв’язки статей · клавіатура / текст
Та сама тема
- Векторна база — це мапа, а не джерело: що ми з'ясували про пошук
- Коли невідомо, скільки коштував виклик моделі: заморожування, потім звіряння
- Розбиття великого завдання для дешевої моделі: урок про 24 000 байтів
- Навички, інструменти MCP і правила: три способи дати агенту можливості
- Вісім помилок з shell і git, яких припускалися наші агенти, і правило для кожної
- Кілька агентів, один репозиторій: правила володіння з реальних інцидентів
Наступні кроки
Пов'язані матеріали
Векторна база — це мапа, а не джерело: що ми з'ясували про пошук
Векторна база знаходить уривки, близькі за змістом до вашого запиту. Вона не знає, які з них правдиві чи актуальні. Сприймайте кожен результат як вказівник: відкрийте названий файл, перевірте хеш і беріть числа з артефакту, а не зі знайденого абзацу.
AI agents and MCP explainedКоли невідомо, скільки коштував виклик моделі: заморожування, потім звіряння
Іноді виклик моделі перевищує час очікування, і ви не знаєте, чи провайдер списав кошти. Ніколи не записуйте це як нуль. Позначте витрату як непевну, зупиніть нові платні виклики й доручте названій людині звірити її з випискою провайдера. Виняток — відмови, що сталися до генерації.
AI agents and MCP explainedРозбиття великого завдання для дешевої моделі: урок про 24 000 байтів
Дешева модель добре дає раду з однією невеликою чітко окресленою роботою, але погано з великим нагромадженням. Ми обмежуємо завдання 24 000 байтами і відмовляємо більшим ще до виклику моделі. Діліть на одиниці — один файл або одна країна на завдання — і перевіряйте розмір до початку.
AI agents and MCP explainedНавички, інструменти MCP і правила: три способи дати агенту можливості
Агенти отримують можливості по-різному. Правило обмежує те, що вони роблять, навичка підказує, як виконати роботу, а інструмент MCP дозволяє викликати функцію. Кожен із трьох має власний ризик, тож фіксуйте всі три в реєстрі й перевіряйте тестом, що нічого не існує поза ним.
💬 Коментарі