Policy Boundaries в Архітектурі: Які дії дозволено агентам

Керований шар, який визначає і примусово виконує правила: що агенту дозволено, що заборонено, а що потребує погодження.
На цій сторінці
  1. Ідея за 30 секунд
  2. Проблема
  3. Рішення
  4. Як працюють Policy Boundaries
  5. У коді це виглядає так
  6. Як це виглядає під час виконання
  7. Коли підходить — і коли ні
  8. Підходить
  9. Не підходить
  10. Типові проблеми та відмови
  11. Як поєднується з іншими патернами
  12. Чим це відрізняється від Guarded-Policy Agent
  13. Коротко
  14. FAQ
  15. Що далі

Ідея за 30 секунд

Шар Policy Boundaries — це системні межі, які визначають, що агент може робити, а що ні.

Агент може пропонувати дії, але фінальне рішення завжди за системою: allow, deny або require_approval.

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

LLM не має самостійно керувати side effects (змінами стану). Шар Policy Boundaries примусово контролює це на рівні архітектури.


Проблема

Без чітких Policy Boundaries агент починає діяти "занадто вільно".

Це створює типові ризики:

  • агент виконує дію без потрібних прав;
  • читає або передає чутливі дані;
  • агент перевищує бюджет, квоти або кількість дозволених кроків;
  • запускає незворотні операції без погодження;
  • різні сервіси застосовують різні правила, і поведінка стає непередбачуваною.

У результаті зростають ризики інцидентів, складніше проходити аудит, а помилки коштують дорожче.

Рішення

Додати Policy Boundaries як окремий керований шар у системі: він перевіряє кожну ризикову дію перед виконанням.

Такий шар працює за принципом "заборонено за замовчуванням" (deny by default): дозволяється лише те, що явно входить в allowlist і відповідає контексту.

Аналогія: як пропускна система в офісному центрі.

Людина може хотіти зайти в серверну, але двері відкриються лише якщо є правильний рівень доступу.

Шар Policy Boundaries так само перевіряє доступ до дій і ресурсів перед виконанням.

Як працюють Policy Boundaries

Policy Boundaries — це керований шар між Agent Runtime і шарами виконання/даних, який вирішує: пропустити дію, заблокувати або відправити на погодження.

Diagram
Опис повного флоу: Classify → Check → Decide → Enforce → Log

Classify
Система визначає тип дії: читання, запис, видалення, експорт, виконання коду, витрати бюджету.

Check
Policy engine перевіряє роль, tenant (окремого клієнта), allowlist, scopes, ліміти бюджету/кроків і рівень ризику.

Decide
Рішення має бути явним: allow, deny або require_approval.

Enforce
Дія або блокується, або виконується з обмеженими правами через Tool Execution Layer.

Log
У лог потрапляє рішення, reason_code, request context, а також результат виконання або факт блокування.

Цей цикл застосовується до кожної ризикової дії і дає передбачувану поведінку навіть при помилках моделі.

У коді це виглядає так

PYTHON
class PolicyBoundaryLayer:
    def __init__(self, policy_engine, approval_queue):
        self.policy_engine = policy_engine
        self.approval_queue = approval_queue

    def authorize(self, action, context):
        request = {
            "actor_role": context["role"],
            "tenant_id": context["tenant_id"],
            "action": action["name"],
            "resource": action.get("resource"),
            "risk_level": action.get("risk_level", "medium"),
        }

        decision = self.policy_engine.evaluate(request)
        mode = decision.get("mode")

        if mode == "allow":
            return {"ok": True, "mode": "allow", "scopes": decision.get("scopes", [])}

        if mode == "require_approval":
            ticket_id = self.approval_queue.create(request=request, reason=decision["reason_code"])
            return {"ok": False, "mode": "pending_approval", "ticket_id": ticket_id}

        # Fail-closed for deny and for unexpected/unavailable policy modes.
        return {
            "ok": False,
            "mode": "deny",
            "reason_code": decision.get("reason_code", "policy_unavailable_or_invalid"),
        }

Як це виглядає під час виконання

TEXT
Запит: "Видали рахунок INV-991 і надішли дані клієнта у зовнішній CRM"

Step 1
Agent Runtime: формує action -> delete_invoice + export_customer_data
Runtime: передає дії в Policy Boundaries

Step 2
Policy Boundaries: Check -> роль support_agent, ризик high
Policy Engine: delete_invoice -> require_approval
Policy Engine: export_customer_data -> deny (reason_code: cross_system_export_blocked)

Step 3
Runtime: створює approval ticket для видалення
Runtime: блокує експорт і повертає безпечну відповідь з причиною

Policy Boundaries не лише "радять", а реально зупиняють небезпечні дії.

Коли підходить — і коли ні

Policy Boundaries потрібні там, де є реальні ризики доступу, змін стану або витрат. Для локального read-only прототипу це може бути зайвою складністю.

Підходить

СитуаціяЧому Policy Boundaries підходять
Є інструменти, що змінюють стан системиШар Policy Boundaries блокує небезпечні операції або вимагає погодження.
Потрібна рольова модель доступу і multi-tenant ізоляціяЄдині policy rules не дозволяють витік між клієнтами та ролями.
Агент може витрачати гроші або обмежені ресурсиPolicy Boundaries контролюють budget caps, quotas і require_approval для дорогих дій.
Потрібен аудит рішень для комплаєнсуШар Policy Boundaries фіксує рішення, reason_code і контекст для кожної критичної дії.

Не підходить

СитуаціяЧому Policy Boundaries не підходять
One-shot демо з одним read-only інструментом без побічних ефектівОкремий шар Policy Boundaries може дати більше складності, ніж користі.
Агент не приймає рішення сам — увесь flow детерміновано закодований у бізнес-логіціЗазвичай достатньо простих перевірок у бізнес-логіці конкретного сервісу.

У таких випадках інколи достатньо базової перевірки в коді:

PYTHON
if role != "admin":
    raise PermissionError("denied")

Типові проблеми та відмови

ПроблемаЩо відбуваєтьсяЯк запобігти
Обхід policy boundaryДії виконуються напряму, минаючи policy checksЄдина точка входу для інструментів, заборона прямого доступу
Fail-open при збої policy engineПід час збою система випадково дозволяє ризикові діїFail-closed для write/high-risk операцій, аварійний deny by default
Надто жорсткі правилаКорисні дії блокуються, агент не може завершити задачуRisk-tier правила, винятки з аудитом, регулярний перегляд політик
Policy drift (розсинхрон правил)Документація каже одне, а код перевіряє іншеPolicy-as-code, версіонування та тести правил
Немає пояснення причини блокуванняКоманда не розуміє, чому дія відхиленаСтандартизовані reason_code і аудит-логи
Неповний контекст для policy checkPolicy engine приймає рішення без важливих атрибутів запитуПередавати повний request context: actor, tenant, resource, action type, risk, budget

Більшість таких проблем вирішуються через єдину policy-точку контролю, fail-closed підхід і якісний аудит.

Як поєднується з іншими патернами

Policy Boundaries не замінюють Agent Runtime чи Tool Execution Layer. Це системний контроль доступу поверх них.

  • Agent Runtime — Runtime керує кроками, а Policy Boundaries перевіряють, які дії дозволені на цих кроках.
  • Tool Execution Layer — execution layer виконує дію, а Policy Boundaries вирішують, чи можна її запускати.
  • Human-in-the-Loop Architecture — ризикові дії можна переводити в require_approval.
  • Multi-Tenant — Policy Boundaries примусово відділяють доступи між tenant.

Інакше кажучи:

  • Agent Runtime визначає коли агент робить крок
  • Policy Boundaries визначають які дії в цьому кроці взагалі дозволені

Чим це відрізняється від Guarded-Policy Agent

Guarded-Policy AgentPolicy Boundaries в архітектурі
РівеньПоведінковий патерн усередині логіки агентаСистемний шар примусового контролю на рівні архітектури
Що контролюєЯк агент формулює і обирає діїЧи дозволено цю дію реально виконати
Як реагує на помилку моделіЗменшує ризик, але не гарантує блокуванняПримусово блокує або відправляє на погодження
Ключовий результатБезпечніша поведінка агентаТехнічно гарантовані межі доступу + аудит

Guarded-Policy Agent робить поведінку агента обережнішою.

Policy Boundaries роблять виконання дій контрольованим навіть якщо агент помиляється.

Коротко

Коротко

Policy Boundaries:

  • визначають, що дозволено, заборонено або потребує погодження
  • примусово перевіряють роль, tenant, allowlist і ризик дії
  • блокують небезпечні дії до виконання
  • фіксують рішення і reason_code для аудиту

FAQ

Q: Якщо є Guarded-Policy Agent, Policy Boundaries ще потрібні?
A: Так. Guarded-Policy Agent покращує поведінку, але саме Policy Boundaries дають примусове виконання правил на рівні системи.

Q: Де краще зберігати policy rules (правила політик)?
A: Найчастіше в окремому policy engine або policy-as-code шарі з версіями і тестами.

Q: Що робити, якщо policy engine недоступний?
A: Для ризикових write-операцій застосовують fail-closed: заборонити виконання, доки перевірка недоступна.

Q: Чи можуть Policy Boundaries залежати від середовища (dev, staging, prod)?
A: Так. Часто ті самі дії мають різні policy rules залежно від середовища, рівня ризику і типу даних.

Що далі

Policy Boundaries задають правила гри. Далі корисно подивитися, де саме ці правила виконуються в системі:

  • Tool Execution Layer — як policy застосовується під час реальних tool calls.
  • Human-in-the-Loop Architecture — як оформити approval для критичних дій.
  • Agent Runtime — як runtime зупиняє або продовжує цикл за правилами.
  • Production Stack — як policy стає частиною операційної дисципліни.
⏱️ 8 хв читанняОновлено 7 березня 2026 р.Складність: ★★★
Інтегровано: продакшен-контрольOnceOnly
Додай guardrails до агентів з tool-calling
Зашип цей патерн з governance:
  • Бюджетами (кроки / ліміти витрат)
  • Дозволами на інструменти (allowlist / blocklist)
  • Kill switch та аварійна зупинка
  • Ідемпотентність і dedupe
  • Audit logs та трасування
Інтегрована згадка: OnceOnly — контрольний шар для продакшен агент-систем.
Автор

Цю документацію курують і підтримують інженери, які запускають AI-агентів у продакшені.

Контент створено з допомогою AI, із людською редакторською відповідальністю за точність, ясність і продакшн-релевантність.

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