Слогер Создать блог
AI

Почему ИИ-агенты делают не то: два слоя, которые важнее фреймворка

Большинство гайдов разбирают, как агент думает. А реальные инциденты — про то, что ему разрешено делать.

Большинство статей об ИИ-агентах разбирают один слой — как агент думает. Промпт-чейнинг, роутинг, оркестратор-воркеры, ReAct, plan-and-execute. Про это написано много и хорошо. Но инциденты, которые реально происходят на практике, — не про неправильно выбранный паттерн оркестрации. Они про то, что агенту позволили сделать то, что никто не разрешал.

Служба поддержки с доступом на чтение к базе заказов перешла с SELECT на DELETE после того, как клиент написал «спишите двойную оплату». Агент оплатил счёт на 4200 долларов, был перезапущен во время выполнения — и оплатил его снова при повторе. Это не сбой рассуждений. Модель в каждом из этих случаев сделала то, что выглядело разумно. Это архитектурные провалы, и живут они в двух слоях, которые обычно лежат под фреймворком.

Три слоя агента

У агента три слоя. Первый — фреймворк: как агент думает. Второй — harness (обвязка): как агент действует. Третий — governance: что агенту вообще разрешено делать. Второй и третий в литературе почти не покрыты.

СлойРешаетПримерыОписано?
Фреймворккак агент думаетLangGraph, CrewAI, Agent FrameworkДа, много
Harnessкак агент действуетцикл, бюджеты, песочницы, уплотнение контекста, ретраиЕдва
Governanceчто агенту разрешенополитики, идентичность, согласования, аудит, редактирование выводаЕдва, и обычно как маркетинг вендора

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

Что такое harness

Если отбросить фреймворк, у агента остаётся несколько точек, в которые можно вмешаться. На практике их пять:

ТочкаЧто вешается
before_modelсжатие контекста, инъекция памяти, проверка бюджета
after_modelзащита вывода, проверка цитат
before_toolброкер привилегий, шлюз согласования, идентичность, бюджеты, песочница — возвращает ALLOW / DENY / PAUSE
after_toolредактирование, карантин недоверенного контента
on_eventаудит, учёт стоимости, предохранители

В продакшене эти стыки уже есть под другими именами: Microsoft Agent Framework называет их middleware, LangGraph — обёртки узлов и interrupt, Claude Code — hooks. Если в вашем фреймворке такие точки существуют, все паттерны переносятся. Если нет — это диагноз.

Пять правил, которые делают почти всю работу

  1. Вызов инструмента — это запрос, а не действие. Модель никогда ничего не исполняет. Если декоратор инструмента в вашем фреймворке вызывает функцию напрямую, у вас нет границы управления. Есть надежда.
  2. Fail closed. Незарегистрированный инструмент, отсутствующая политика, неизвестный токен, исчерпанный бюджет — всё это означает отказ. Регистрация — не авторизация.
  3. Отказ должен быть виден модели. Отклонённый вызов возвращается как результат инструмента: DENIED by policy: причина. Тогда агент может перепланировать: пойти к человеку, попробовать другой путь или честно признать неудачу. Молчаливый отказ превращает агента в стопор или фантазёра.
  4. Политика в коде, а не в промпте. «Ты не должен менять данные клиентов» в системном промпте — это рекомендация. Модель под давлением её игнорирует, а при промпт-инъекции ей прямо приказывают её игнорировать. Детерминированная проверка не подлежит обсуждению.
  5. Самый строгий контроль побеждает, а порядок срабатываний влияет на стоимость, а не на безопасность. Если контроли конфликтуют, DENY побеждает PAUSE, PAUSE побеждает ALLOW. Порядок определяет лишь то, сколько вы потратите до отказа и насколько внятным будет сообщение об ошибке.

18 паттернов: что уже готово

В репозитории проекта — 18 паттернов, разделённых на две группы: governance (11) и harness (7). Каждый оформлен как обычный Python-хук, который монтируется — без изменений — и в LangGraph, и в Microsoft Agent Framework. Тесты проверяют, что сообщения об отказе идентичны байт в байт, потому что они приходят из одного и того же кода. Паттерны портируются. Фреймворк — это сантехника.

ПаттернПредотвращает
Identity Propagationпутаницу ролей, когда один сервисный аккаунт обладает правами всех
Tool Privilege Brokerиспользование разрешённого инструмента неразрешённым способом
HITL Approval Gateнеобратимые действия без согласования с человеком
Cost & Tool Budgetingбесконечный цикл, о котором вы узнаёте из счёта
Durable Executionповторную оплату из-за ретрая
Sandboxed Executionвыход агентского кода за пределы рабочей области

С чего начать

Не нужно внедрять все 18. Для низкорискового бота, который читает документацию, хватит двух. Если агент касается системы записи — начните с Identity Propagation и Privilege Broker. Если у него есть цикл без явного ограничения — с бюджетирования. Это отправные точки, а не обязательный набор.

Где проходит граница

Настоящее корпоративное управление включает управление API, сетевые политики, облачный IAM, управление секретами и центр мониторинга. Ничто из этого не помещается в репозиторий. «Полный AI-гоvernance» как библиотека — это подмножество с уверенным брендом.

То, что реально нужно агенту, — часть, принадлежащая его собственному дизайну: точки, где политика встречается с циклом, решения, которые принимаются на код-ревью, а не в Terraform. Там, где паттерну нужна инфраструктура, это говорится прямо: Python-функция — не изоляция, контейнер — изоляция. Аудит становится доказательством только тогда, когда корень цепочки публикуется там, куда агент не может дотянуться.

Если у вашего агента есть инструменты, есть и архитектурный долг. Он сводится к одному вопросу: кто решил, что агент может выдавать возвраты, и что мешает ему выдать тот, который не должен? Ответ на этот вопрос и есть два недостающих слоя.

По материалам: ai. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.