Система аудит-трейла для AI-агентов
Автономный агент принял решение, которое оказалось неверным. Кто несёт ответственность? Что именно агент видел в момент принятия решения? Какие инструменты вызвал и в каком порядке? Без audit trail эти вопросы не имеют ответа — а значит, нет ни отладки, ни compliance, ни доверия к системе.
Audit trail для AI-агентов принципиально отличается от обычного application logging. Нужно фиксировать не только «что произошло», но и «почему агент это сделал» — входной контекст, reasoning, промежуточные выводы.
Что нужно логировать
Минимальный состав записи аудит-лога для AI-агента:
| Поле | Описание | Пример |
|---|---|---|
trace_id |
Уникальный ID сессии агента | agt-7f3a2b-... |
step_id |
Шаг внутри сессии | step-4 |
timestamp |
ISO 8601 с микросекундами | 2025-03-15T14:23:11.847Z |
agent_id |
Идентификатор агента/роли | procurement-agent-01 |
user_id |
Кто инициировал задачу | user:[email protected] |
action_type |
Тип действия | tool_call, llm_inference, decision |
tool_name |
Вызванный инструмент | query_database |
tool_input |
Аргументы (с маскировкой PII) | {"query": "SELECT ..."} |
tool_output_hash |
Хеш результата | sha256:3f8c... |
llm_prompt_hash |
Хеш промпта | sha256:9a1d... |
decision_reasoning |
Объяснение агента | "Threshold exceeded, escalating" |
latency_ms |
Время выполнения шага | 342 |
Полный вывод LLM и результаты инструментов хранятся отдельно (объём большой), в логе — только хеши для целостности.
Неизменяемость и целостность лога
Audit trail бессмысленен, если его можно изменить постфактум. Используем несколько подходов в зависимости от требований:
Append-only storage. PostgreSQL с RULE ON UPDATE DO INSTEAD NOTHING или ClickHouse с MergeTree в режиме только вставки. Проще всего, достаточно для большинства случаев.
Криптографическая цепочка. Каждая запись содержит хеш предыдущей — как blockchain без распределённости. Позволяет обнаружить вставку или удаление записей.
Внешний журнал. Дублирование событий в AWS CloudTrail, Azure Monitor или иммутабельный S3 bucket с Object Lock. Используется когда регулятор требует хранения логов у третьей стороны.
Практический кейс: финансовый агент под аудитом
Клиент — страховая компания, агент автоматически формирует котировки и принимает решения по стандартным страховым случаям. ЦБ запросил аудит автоматизированных решений за последние 3 месяца.
Без audit trail это означало бы 3 месяца ручной реконструкции. С внедрённым трейлингом:
- Выгрузка всех решений агента за период — 1 SQL-запрос, 40 секунд
- Для каждого решения — полный контекст: входные данные, вызванные инструменты, reasoning
- Автоматический отчёт по паттернам: сколько случаев автоматически одобрено/отклонено/эскалировано, распределение по категориям
- Выявлено 3 системных ошибки в логике агента (неправильная обработка граничных случаев), которые без трейла были бы незаметны
Аудит пройден без замечаний. Три ошибки исправлены до того, как привели к финансовым последствиям.
Интеграция с OpenTelemetry
Современный подход — стандартизировать трейсинг агента через OpenTelemetry. Каждый шаг агента — span с атрибутами. Это позволяет:
from opentelemetry import trace
tracer = trace.get_tracer("ai-agent")
with tracer.start_as_current_span("tool_call") as span:
span.set_attribute("tool.name", tool_name)
span.set_attribute("agent.id", agent_id)
span.set_attribute("user.id", user_id)
result = execute_tool(tool_name, args)
span.set_attribute("tool.output_hash", sha256(result))
Трейсы экспортируются в Jaeger, Tempo или коммерческие APM-системы. Дополнительно — метрики в Prometheus, визуализация в Grafana.
Хранение и retention
Объём логов агента может быть значительным: активный агент генерирует 50–500 МБ структурированных логов в сутки. Рекомендуемая схема:
- Hot storage (последние 30 дней): PostgreSQL или ClickHouse, быстрый поиск
- Warm storage (30 дней – 1 год): S3/MinIO с Parquet-форматом, запросы через Athena/DuckDB
- Cold storage (>1 года): S3 Glacier, только для compliance
Сроки внедрения: 2–4 недели для базового трейлинга, 6–10 недель для полного решения с криптографической целостностью, OpenTelemetry и retention-политиками.







