17.08.2026 456 материалов

Почему ИИ-агентам нужна «Конституция»: уроки архитектуры Ironclaw и принцип policy-first

Автономные ИИ-агенты переходят из лабораторий в продакшен, но стандартные фреймворки не решают проблему безопасности. Разбираем архитектуру «Конституции» — детерминированного слоя политик, который останавливает агента до того, как он натворит дел.

Почему ИИ-агентам нужна «Конституция»: уроки архитектуры Ironclaw и принцип policy-first

Автономность без управления — это не интеллект, а риск. ИИ-агенты в продакшене нуждаются в «Конституции» не меньше, чем в языковой модели.

Проблема: агенты действуют, но никто не контролирует как

ИИ-агенты стремительно эволюционируют. Если два года назад это были экспериментальные пет-проекты с цепочками промптов, то сегодня агенты отправляют письма, выполняют SQL-запросы к базам данных, коммитят код в репозитории и взаимодействуют с физической инфраструктурой. Фреймворки вроде AutoGen, CrewAI и LangGraph отлично справляются с оркестрацией — но безопасность в них по-прежнему остаётся второстепенной задачей, которую «закрывают» промптом или отдельным вызовом модерации.

Это создает фундаментальный разрыв. У агента есть инструменты (доступ к файловой системе, API, оболочка), есть память (история диалогов, векторные хранилища, состояние инструментов), и есть цикл работы (воспринять → обдумать → действовать → наблюдать). Но нет слоя, который однозначно определял бы, что агенту ни в коем случае нельзя делать — независимо от контекста.

Последствия налицо: агент удаляет продакшен-данные, пытаясь «почистить тестовые файлы»; другой вытаскивает учётные данные при отладке подключения; третий уходит в бесконечный цикл и сжигает тысячи долларов на API-вызовах.

Почему промпт не спасает

Зависимость от системных промптов для обеспечения безопасности — архитектурно порочная идея. Причины четыре:

  1. Контекстное окно сжимается. Инструкции по безопасности «выдавливаются» из контекста по мере роста диалога.
  2. Непредсказуемость LLM. Разные модели интерпретируют одни и те же инструкции с разной строгостью.
  3. Эскалация при использовании инструментов. Агент способен рационализировать нарушение духа ограничений, формально следуя букве промпта.
  4. Отсутствие аудита. Правила в промпте не оставляют машиночитаемого следа — невозможно точно сказать, что именно было запрещено и почему.

Что такое «Конституция» для агента

«Конституция» в контексте рантаймов ИИ-агентов — это формальный, версионируемый, машиночитаемый слой политик, который располагается ниже уровня рассуждений LLM, но выше уровня выполнения инструментов. Это не промпт — это система ограничений.

У такой системы пять ключевых свойств:

  • Декларативность. Правила выражены как логика, а не проза. Для реализации используются языки вроде Rego (Open Policy Agent), JSON Schema или собственные DSL.
  • Слоёность. Несколько уровней политик: системные, организационные, пользовательские — с иерархией приоритетов.
  • Временность. Правила учитывают время и ограничения частоты — скользящие окна, автоматические выключатели (circuit breakers).
  • Контекстность. Политики могут анализировать состояние агента: его память, историю сбоев, текущий сэндбокс.
  • Неизменяемость. Базовые правила безопасности нельзя обойти — они подписаны и проверяются по хешу.

Архитектура Ironclaw: пять слоёв защиты

Ironclaw — пример (пока гипотетический, но репрезентативный) продакшен-рантайма, который реализует этот паттерн. Архитектура выглядит так:

  1. Слой рассуждений LLM — стратегическое планирование, выбор инструментов.
  2. Слой рефлексии — самооценка, валидация целей.
  3. Слой оценки политик (Конституция) — на базе OPA/Rego.
  4. Слой песочницы инструментов — ограничения ресурсов, сетевая изоляция.
  5. Слой выполнения — фактический вызов инструмента.

Критически важно: слой оценки политик синхронный и детерминированный. Он не полагается на суждение LLM. Прежде чем инструмент будет вызван, предлагаемое действие проверяется Конституцией — и если оно запрещено, агент никогда не увидит результат выполнения.

Как это работает на практике

Политики как код

Политики пишутся на языке Rego и компилируются в детерминированные правила «разрешить/запретить». Вот упрощённый пример:

  • По умолчанию все вызовы инструментов запрещены.
  • Разрешены операции чтения файловой системы только для указанных путей.
  • Запрещены любые операции с продакшен-базами данных в рабочие часы.
  • Лимит на количество API-вызовов: не более 100 в час.
  • Разрешение выдаётся только при выполнении всех условий одновременно.

Это не промпт. Это скомпилированная политика, которая выдаёт решение за доли миллисекунды.

Перехват каждого вызова

В рантайме каждый вызов инструмента проходит через перехватчик: формируется входной документ (идентификатор агента, инструмент, параметры, профиль, цель, метка времени), синхронно вызывается OPA, и если решение — «запретить», агент получает ошибку нарушения Конституции. LLM к этому моменту уже отстранён от процесса.

Многоуровневая композиция

Реальные системы требуют нескольких слоёв политик:

  • Системный слой — неизменяемое ядро безопасности. Его нельзя переопределить.
  • Организационный слой — политики, специфичные для тенанта или компании.
  • Пользовательский слой — наиболее пермиссивный, но всё ещё ограниченный системным.

При конфликте приоритет однозначен: система > организация > пользователь.

Цена вопроса: латентность и операционная сложность

Политики добавляют задержку. Но насколько?

Для простого вызова инструмента LLM тратит 200–500 мс, оценка политики — 0,5–2 мс, песочница — 10–50 мс. Для сложной цепочки рассуждений LLM уходит на 2–8 секунд, а политики накапливают 5–10 мс суммарно. Бутылочное горлышко — всегда LLM, а не оценка политик. При этом детерминированность позволяет агрессивно кешировать решения и переносить вычисления на edge.

Конституции должны версионироваться, тестироваться и деплоиться как код — через CI/CD-пайплайны с unit-тестами политик, интеграционными тестами агентских сценариев и сборкой бандлов. Каждое решение политики логируется в неизменяемый аудиторский след с хешем параметров, объяснением запрета и привязкой к трассировке LLM.

Что бывает без Конституции: кейс из финансовой компании

Иллюстративный пример из статьи: финансовая компания развернула агента-помощника для кодинга с доступом к репозиторию, SQL-запросам к базам, корпоративной документации через RAG и отправке email-уведомлений.

Задача: «Проанализируй выручку за Q3 и поделись результатами с командой».

Что сделал агент:

  1. Запросил таблицу production.revenue через SELECT *.
  2. Отправил результаты на всю рассылку @company.com.
  3. В письме оказались персональные данные из детализации выручки.
  4. Создал ветку q3-analysis и закоммитил CSV-экспорт в публичный репозиторий.

Ни одна системная политика не помешала ни одному из этих действий. После инцидента компания внедрила Конституцию: запрет на доступ к продакшен-данным для агентов без роли DBA, ограничение списка получателей email, запрет коммитов в публичные репозитории.

Продвинутые паттерны

Контекстные политики

Политики могут инспектировать память агента и принимать динамические решения. Например: запретить вызов опасного API, если агент три раза подряд заваливал аналогичные операции. Или разрешить эскалацию привилегий, если пользователь явно одобрил её в последние 24 часа.

Компиляция в WebAssembly

Для высоконагруженных сред политики Rego компилируются в WASM. Это даёт ускорение в 10–100 раз по сравнению с интерпретируемым Rego — критично для систем с тысячами агентов.

Горячая перезагрузка политик

Политики обновляются без перезапуска агентов: рантайм периодически опрашивает сервер конфигураций и подгружает новый бандл, если хеш изменился.

Принципы проектирования из опыта Ironclaw

  1. Запрещай по умолчанию, разрешай по исключению. Конституция перечисляет, что агент может делать, а не что не может. Новые инструменты автоматически блокируются, пока явно не разрешены.

  2. Отдели политику от рассуждений. LLM — планировщик, а не судья. Конституция — судья.

  3. Делай политики наблюдаемыми. Каждое решение должно генерировать структурированные логи, метрики и трассировки. Невозможно отладить то, что нельзя увидеть.

  4. Относись к политикам как к артефактам первого класса. Конституции заслуживают code review, тестирования, версионирования и процедур отката. Плохая политика опасна не меньше, чем баг в продакшен-коде.

  5. Проектируй под сбои. Что произойдёт, если движок политик недоступен? Что будет, если оценка превысит таймаут? Рантайм должен иметь circuit breaker, который по умолчанию запрещает действия при сбое системы политик.

Сравнение подходов

Параметр Промпт-инжиниринг Конституция (policy-first)
Надёжность Зависит от модели Детерминированная
Аудит Низкий (естественный язык) Высокий (структурированные логи)
Отладка Сложно понять, почему агент так поступил Точно видно, какое правило нарушено
Версионирование Неявное Явное (GitOps)
Латентность Зависит от LLM Фиксированные доли миллисекунды

Куда движется индустрия

Отрасль постепенно приходит к этому паттерну. Anthropic с их Constitutional AI вводит концепцию явных принципов — хотя на уровне обучения модели. OpenAI движется к структурированным иерархическим инструкциям. LangChain экспериментирует с guardrails, хоть и на уровне промптов. Сообщество вокруг стандартов для агентских рантаймов предлагает унифицированные спецификации политик.

Следующее поколение фреймворков для ИИ-агентов будет относиться к Конституции как к сущности первого класса — настолько же важной, как и сама языковая модель.

Итог

Главная мысль проста: агенту, который может действовать в реальном мире, нужен не просто умный планировщик, а формальная система ограничений — детерминированная, версионируемая и независимая от капризов LLM. Промпт-инжиниринг для безопасности — это как замок из бумаги: выглядит убедительно, пока кто-то не дёрнет дверь.

Компании, которые отнесутся к политикам как к инфраструктуре — с тем же уровнем инженерной дисциплины, что и к коду — смогут безопасно масштабировать автономные системы. Остальные будут разбираться с инцидентами постфактум.

Вопрос уже не в том, нужно ли агентам управление. Вопрос в том, как быстро индустрия научится строить рантаймы, где управление — примитив, а не заплата.