AI-агент може не лише відповідати на запити.
Він може:
- Змінювати дані
- Надсилати запити до API
- Створювати файли
- Або запускати процеси
Тобто — виконувати дії у реальному світі.
І саме тут з'являється нова проблема.
Бо не всі дії безпечні.
Агент може:
- Видалити дані
- Витратити гроші
- Або зробити запит до зовнішньої системи
Навіть якщо ти цього не планував.
Тому агенту не можна дозволяти робити все.
Йому потрібні межі.
Що таке дозволені дії (Permissions)

Агент не має прямого доступу до інструментів.
Він не може сам:
- Відкрити файл
- Змінити запис у базі
- Або надіслати запит до API
Щоб виконати дію, він має використати інструмент.
І лише ті інструменти, які йому дозволено викликати.
Цей список дозволених дій і є його Permissions.
Вони визначають:
- Що агент може зробити
- А що — ні
Рівні дозволів
Не всі дії однаково безпечні.
Тому дозволи зазвичай поділяють за рівнями — залежно від того, наскільки сильно агент може вплинути на систему.
Read — читати
Агент може отримувати дані. Але не може їх змінювати.
Наприклад: прочитати запис у базі, відкрити файл, перевірити статус.
Write — записувати
Агент може створювати або змінювати дані.
Наприклад: створити новий запис, оновити файл, зберегти результат.
Execute — запускати
Агент може викликати процеси або зовнішні сервіси.
Наприклад: надіслати запит до API, запустити скрипт, викликати webhook.
Delete — видаляти
Агент може видаляти дані або записи.
Це найнебезпечніший рівень.
Бо дія — незворотна.
Чим вищий рівень дозволу — тим більше агент може змінити у світі.
Тому йому дають лише той доступ, який потрібен для виконання задачі.
Чому агенту не можна давати доступ до всього
Агент не розуміє наслідків своїх дій.
Він обирає інструмент, який виглядає найбільш підходящим у цьому контексті.
| Рівень | Що дозволено | Ризик |
|---|---|---|
| Read | Отримувати дані | Низький |
| Write | Створювати або змінювати | Середній |
| Execute | Запускати процеси або API | Високий |
| Delete | Видаляти дані | Критичний |
Але "підходящий" не завжди означає "безпечний".
Агент може:
- Записати неправильні дані
- Викликати платний API
- Або видалити важливий файл
Просто тому, що це допомагає виконати задачу.
Якщо дати йому доступ до всього — він може зробити більше, ніж ти очікував.
Хто встановлює межі
Агент не обирає свої дозволи сам.
Він не вирішує:
- До яких інструментів має доступ
- Які дії може виконувати
Ці межі встановлює людина.
Або система, яка визначає:
- Які інструменти дозволені
- Які дії можна виконувати
- І на якому рівні доступу
Агент лише працює в межах цих правил.
Принцип мінімальних дозволів
Є просте правило:
Агенту дають лише той доступ, який необхідний для виконання конкретної задачі.
Не більше.
Це називається принцип мінімальних дозволів (Least Privilege).
Якщо агенту потрібен доступ лише для читання — він не має отримувати доступ на запис.
Якщо потрібно створити файл — він не має мати можливість його видалити.
Менше дозволів — менше ризиків.
У коді це виглядає так
Нижче той самий принцип у простому форматі:
ми явно задаємо, що агенту дозволено, а систему змушуємо це перевіряти перед кожною дією.
1) Маємо інструменти з різними рівнями ризику
def read_user(user_id: int):
return {"id": user_id, "status": "active"}
def update_user(user_id: int, status: str):
return {"id": user_id, "status": status}
def send_webhook(event: str):
return {"sent": event}
def delete_user(user_id: int):
return {"deleted": user_id}
TOOLS = {
"read_user": {"level": "read", "handler": read_user},
"update_user": {"level": "write", "handler": update_user},
"send_webhook": {"level": "execute", "handler": send_webhook},
"delete_user": {"level": "delete", "handler": delete_user},
}
2) Тут ми задаємо дозволи для конкретного агента
AGENT_PERMISSIONS = {"read", "write"} # execute і delete заборонені
3) Модель просить виконати дію
model_output = {
"action": "update_user",
"parameters": {"user_id": 42, "status": "paused"},
}
4) Система перевіряє права перед виконанням
def run_action(call: dict):
action = call["action"]
params = call["parameters"]
tool = TOOLS.get(action)
if tool is None:
return {"error": "Інструмент не знайдено"}
if tool["level"] not in AGENT_PERMISSIONS:
return {"error": "Дія не дозволена"}
return tool["handler"](**params)
5) Якщо рівень дозволений, дію виконаємо
result = run_action(model_output)
# {"id": 42, "status": "paused"}
Якщо модель попросить delete_user, система поверне:
{
"error": "Дія не дозволена"
}
Повний приклад реалізації з підключеною LLM
Аналогія з життя
Уяви, що ти даєш комусь ключі від квартири.
Якщо потрібно лише полити квіти — ти даєш ключ від дверей.
Але не даєш:
- Ключ від сейфу
- Доступ до банківського додатку
- Або PIN-код від картки
Бо чим більше доступу — тим більше можна змінити.
Навіть випадково.
Саме тому дають лише ті ключі, які потрібні для конкретної задачі.
Коротко
Агент може виконувати дії через інструменти.
Але йому дозволено:
- Лише певні інструменти
- Лише певні типи дій
- І лише на певному рівні доступу
Зазвичай використовується принцип мінімальних дозволів:
Агент отримує лише той доступ, який потрібен для виконання задачі.
FAQ
Q: Чи може агент виконувати будь-які дії через інструменти?
A: Ні. Він може використовувати лише ті інструменти і дії, які йому дозволено.
Q: Хто визначає, що агенту дозволено робити?
A: Людина або система, яка встановлює список доступних інструментів і рівень доступу до них.
Q: Що таке принцип мінімальних дозволів?
A: Це правило, за яким агент отримує лише той доступ, який потрібен для виконання конкретної задачі.
Що далі
Тепер ти знаєш, що агенту дозволено робити.
Але навіть з обмеженнями він може:
- Застрягти в циклі
- Повторювати ті самі дії
- Або витрачати ресурси
Тому іноді агент має зупинитись сам.
Або бути зупиненим системою.