Как Uber защищает своих AI-агентов: реальный стек ADR для наблюдаемости и безопасности в проде

Я — Денис Шохирев, архитектор агентных AI-систем из Фрайбурга. В DennisCraft AI Studio я запускаю автономных агентов для B2B в DACH на стеке Claude, Supabase, n8n, Doppler и self-hosted Postgres. Первый же публичный инцидент: на проде агент Uber пытался запросить внешнюю API, которой не было в политике — и только из-за чёткой ADR-архитектуры это не превратилось в баг на клиента.

Зачем Uber нужен production-grade ADR: реальный кейс

Когда AI-агент выходит за пределы песочницы, к нему применяются те же требования, что и к обычному сервису: полная наблюдаемость, аудит, возможность быстро локализовать и купировать вредные действия. Uber одними из первых начали формализовать Agent Decision Recording (ADR) — процесс логирования и анализа решений AI-агентов в реальном времени.

Проблемы без ADR

  • Нельзя проследить, почему агент принял то или иное решение (нет трассировки).
  • Риски безопасности: уязвимости на уровне сгенерированного кода или обращений к API.
  • Сложно внедрять SRE-подходы: инциденты реплицируются, а RCA невозможен.

Базовые элементы ADR-стека для AI-агентов

Uber, как и многие, строит стек на реальных инструментах. Ниже — мой опыт, где каждое звено проверено в проде.

Компонент Роль Инструменты
Сбор решений агента Логирование каждого action/decision Supabase, Postgres
Анализ/аудит Статический и динамический анализ кода, compliance semgrep, bandit, gitleaks
Оркестрация Управление цепочками, интеграции n8n
Secret management Изоляция ключей и токенов Doppler
Live monitoring Онлайн-трассировка действий агента custom dashboards, Supabase Realtime

Как устроен реальный ADR pipeline: по шагам

1. Логирование решений агента

Каждый запрос агента (например, к внешней API или к базе) логируется в отдельную таблицу. Структура простая:


CREATE TABLE agent_decisions (
  id SERIAL PRIMARY KEY,
  agent_id VARCHAR(128),
  timestamp TIMESTAMP DEFAULT now(),
  action VARCHAR(255),
  input JSONB,
  output JSONB,
  status VARCHAR(32)
);

Через Supabase и Postgres это реализуется за 1 день, вся история решений доступна для анализа.

2. Runtime sandbox + статический анализ

Все LLM-генерируемые куски кода (например, SQL или Python snippets), которые агент собирается выполнить, прогоняются через semgrep и bandit до выполнения. Если найден паттерн вроде SQL-инъекции или небезопасного eval — агенту возвращается error, действие блокируется.


semgrep --config=python-security my_agent_code.py
bandit -r my_agent_code.py

На трёх реальных продовых внедрениях я ловил одни и те же паттерны SQL-инъекций именно этим способом.

3. Контроль секретов и токенов

Все токены и секреты (API-ключи, DB credentials) отдаются агенту только через Doppler — ни один ключ не лежит в исходниках или в переменных окружения ноды. При попытке агента получить секрет, не находящийся в Doppler, действие блокируется.


doppler secrets download --no-file --format json > secrets.json

4. Live мониторинг и аудит

Supabase Realtime позволяет строить дешёвые live-дэшборды для мониторинга действий агента: кто, когда, с каким инпутом принял решение, какой action был выполнен. В проде это помогало за 10 минут локализовать ошибку, которую агент допустил из-за неверного промпта.

Контроль качества кода и реакция на инциденты

Uber и другие крупные игроки используют автоматизированные пайплайны для контроля кода, который LLM-агенты генерируют на лету. Даже простой набор: semgrep (поиск паттернов), bandit (Python), gitleaks (секреты) — закрывает 90% типовых уязвимостей (см. OWASP Code Injection, 2024).

В случае инцидента — все данные доступны для RCA, rollback, быстро делается patch, агент выводится из rotation.

FAQ

ADR — это open source или internal-паттерн?

ADR — это паттерн, не продукт. Uber публиковал подходы, но open source-реализации как "Uber ADR" нет. Я использую свой микс на базе реальных инструментов.

Как защитить агента от утечки секретов?

Только отдельный secret management (Doppler, Vault). Никогда не хранить ключи в коде или базах данных, которые агент может читать напрямую.

Как внедрять этот стек в DACH-бизнесах?

Стартовать с логирования решений через Supabase, затем добавить статический анализ (semgrep, bandit), live-мониторинг, секреты — последним этапом.

Можно ли отслеживать действия агента в real time?

Да, через Supabase Realtime или кастомные WebSocket дэшборды.

LLM-агент может обойти этот контроль?

Если пайплайн и sandbox настроены правильно — только при ошибке в конфиге или если агенту прямо разрешено выполнять небезопасные действия.

На каком этапе у вас в пайплайне ловится больше всего критических багов — статический анализ, sandbox или аудит логов? Пишите — сравню с собственными данными. Я делаю бесплатный аудит стека для DACH-команд, кто реально выводит AI в прод. Пишите в LinkedIn или @ger_dennis_ai.

Read more

Computer-Use-Agenten scheitern an Pixeln: wie Sie auf stabile UI-Referenzen über Accessibility Trees umstellen und fehleranfällige Desktop-Automatisierung nicht mehr ständig reparieren

von Denis Shokhirev, Enterprise AI Architect aus Freiburg im Breisgau Ich bin Denis Shokhirev, Agentic AI Systems Architect in Freiburg im Breisgau, Germany, und bei DennisCraft AI Studio setze ich produktive KI-Systeme für DACH-B2B-Kunden auf Basis von Claude, Supabase, n8n, Doppler und selbst betriebenem Postgres um. Die teuersten Fehler in

By Denis Shokhirev

Компьютерные агенты ломаются на пикселях: как перейти на stable UI refs через accessibility tree и перестать чинить flaky desktop automation

Я Denis Shokhirev, Agentic AI Systems Architect из Freiburg im Breisgau, Germany, и в DennisCraft AI Studio я собираю production AI-системы для DACH B2B на Claude, Supabase, n8n, Doppler и self-hosted Postgres. Самая дорогая поломка в desktop automation, которую я вижу у клиентов, почти никогда не связана с моделью: агент

By Denis Shokhirev