Глава 4. Auditability & Reproducibility: полный аудит и трассировка решений
Через полгода после запуска в «Ковчег» приходит запрос от регулятора: клиент обжалует отказ по кредиту, датированный 12 мая. Вопрос простой и убийственный: «Почему ИИ рекомендовал отказать?» Если у вас нет ответа — не «модель так решила», а восстановимая цепочка: какой был системный промпт, какие данные клиента подтянулись, какая версия модели отвечала, какие guardrails и политики сработали, — то high-risk-система недоказуема, а значит несоответствна.
Эта глава — про audit plane: слой, где каждое решение ИИ оставляет неизменяемый след, достаточный, чтобы его воспроизвести и объяснить регулятору, аудитору или при разборе инцидента. Без него все предыдущие плоскости контроля недоказуемы: guardrails, которые нельзя предъявить в логе, для регулятора не существуют.
Бизнес-цель клиента
Возможность по любому решению «Ковчега» восстановить полную цепочку рассуждений и воспроизвести контекст. Обещания бизнесу:
- По
trace_idвосстанавливается всё, что определило решение. - Лог неизменяем — его нельзя переписать задним числом (иначе он бесполезен как доказательство).
- Retention и защита лога сами соответствуют GDPR (лог содержит ПДн — гл. 1).
Драйвер: угроза или регулятор
- EU AI Act: Art. 12 — автоматическое ведение логов на весь срок жизни high-risk; Art. 13 (прозрачность); Art. 86 (право на объяснение отдельного решения).
- GDPR: ст. 22 — объяснимость автоматизированных решений.
- Инцидент-разбор: без трейса не отличить баг промпта от дрейфа модели (гл. 7) от атаки (гл. 3) — три разные причины, три разных ответа.
Архитектурный паттерн
Immutable AI Trace Log Pipeline на базе OpenTelemetry GenAI Semantic Conventions — сквозной трейсинг стандартными спанами, экспорт в неизменяемое хранилище с retention-политикой.
Почему именно OTel SemConv, а не проприетарный формат: экосистема observability фрагментирована (Langfuse, Helicone, Traceloop, LangSmith — несовместимые форматы = vendor lock-in). GenAI Semantic Conventions (под эгидой CNCF) задают единый словарь: спан от LangChain-агента выглядит так же, как от голого вызова OpenAI. Оговорка честности: на середину 2026 конвенции всё ещё в статусе Development — на проде включают OTEL_SEMCONV_STABILITY_OPT_IN для двойной эмиссии (legacy + новые атрибуты), чтобы пережить переход к stable.
Инженерный стек & провайдеры
- Трейсинг/стандарт: OpenTelemetry + GenAI Semantic Conventions (спаны LLM-вызовов, ретрива, tool-calls; конвенции для MCP-инструментов и мульти-агентов в активной разработке).
- Бэкенды: Arize Phoenix, Langfuse, LangSmith (принимают OTel).
- Транспорт: Kafka / NATS.
- Хранилище: ClickHouse (аналитика) + immutable/WORM-слой под юридический аудит.
Инженерная реализация
### Шаг 1. Сквозной trace_id
Единый id через всю цепочку: gateway (гл. 1) → RAG + FGA (гл. 2) → input guardrails (гл. 3) → модель → tools (гл. 9) → output guardrails → ответ. Тот же id — ключ mapping ПДн (гл. 1) и бюджета (гл. 5).
### Шаг 2. Что именно фиксируем в спанах
По GenAI SemConv + расширения под аудит:
- версия системного промпта (хэш + ссылка на версию);
- точные RAG-чанки с их distance-скорами и
source_doc_id; - raw request/response (уже с маскированными ПДн — гл. 1);
- аргументы вызванных функций (Tool Calling) и вердикт policy-гейта (гл. 9);
- версия модели/провайдера, температура, seed;
- вердикты guardrails (что сработало, что заблокировано — гл. 3).
### Шаг 3. Экспорт в неизменяемое хранилище
app (OTel SDK) → OTLP → collector → Kafka → ┬→ ClickHouse (аналитика/дашборды)
└→ WORM/append-only (юр. аудит, retention)
Append-only слой — не «база, куда договорились не писать», а хранилище с технической невозможностью перезаписи (object-lock / WORM).
### Шаг 4. Воспроизводимость
По trace_id пересобираем полный вход. При фиксированной версии модели и seed можно переиграть решение — с оговоркой из failure modes.
### Шаг 5. Приватность самого лога
Аудит содержит ПДн и секреты → шифрование, доступ по ролям, отдельный TTL, который балансирует Art. 12 (хранить) против GDPR (не хранить лишнее).
Где ломается
- Недетерминизм LLM. Даже с seed воспроизводимость неполная: провайдер меняет модель «под капотом», семплинг варьируется. «Объяснение» — реконструкция контекста решения, а не буквальная причинность.
- Post-hoc рационализация. Chain-of-thought в логе — это то, что модель написала, а не обязательно то, почему она так решила. Не выдавайте CoT за причинный механизм.
- Объём и стоимость. Полный трейс с чанками — терабайты; retention под Art. 12 против бюджета ClickHouse против минимизации GDPR — тройной конфликт, решается сэмплингом детализации (полный трейс для high-risk решений, усечённый для остального).
- Лог как поверхность атаки. Аудит с ПДн и секретами — лакомая цель; его утечка хуже исходной. Защита лога — часть периметра, не афтерсот.
- Стандарт ещё не stable. SemConv в Development — атрибуты меняются; отсюда dual-emission.
Стандарты и маппинг
- EU AI Act: Art. 12 (record-keeping), Art. 13 (transparency), Art. 86 (объяснение).
- ISO/IEC 42001: логирование, мониторинг, управление инцидентами.
- NIST AI RMF: Measure/Manage — traceability.
- GDPR: ст. 22.
Лаба и артефакт
Внедрить OTel GenAI SemConv в «Ковчег», экспорт через Kafka в ClickHouse + object-lock слой; по заданному trace_id восстановить полный контекст решения из вступления; настроить retention и шифрование лога. Артефакт: схема трейс-события (атрибуты SemConv + аудит-расширения) + дашборд «разбор одного решения» + retention/защита-политика (доказательство для гл. 6).
Чеклист зрелости
- L1: логируются raw запрос/ответ и версия модели.
- L2: OTel-трейс (SemConv) с чанками, промпт-версией и tool-аргументами в append-only хранилище.
- L3: воспроизведение решения по
trace_id, retention под AI Act, шифрование и RBAC на аудит, dual-emission на переходный период стандарта.
Источники
- [OpenTelemetry GenAI Semantic Conventions (MLflow docs)](https://mlflow.org/docs/latest/genai/tracing/opentelemetry/genai-semconv/)
- [OpenTelemetry for AI Systems: LLM & Agent Observability 2026 (Uptrace)](https://uptrace.dev/blog/opentelemetry-ai-systems)
- [How OTel traces LLM, agent reasoning, MCP tools (Greptime)](https://greptime.com/blogs/2026-05-09-opentelemetry-genai-semantic-conventions)
- [OpenTelemetry for LLMs: SRE guide 2026 (OpenObserve)](https://openobserve.ai/blog/opentelemetry-for-llms/)
Как это устроено — инженерные разборы
Отдельные howto из практики, где плоскость контроля показана на работающем коде и артефакте.
- Почему отправка сообщения в Kafka — это двухфазный коммит, а не fire-and-forgetСемантика доставки в Kafka — надёжность транспорта для immutable trace-лога.
- Агент строит исполняемые детерминированные workflow: автоматизация, которая работает одинаковоАгент строит детерминированные воспроизводимые workflow.
Читать дальше
Ставите ИИ в продакшен под регуляторным риском?
Проектирование control plane под вашу систему: приватность, доступ, guardrails, аудит, соответствие EU AI Act / ISO 42001 — как работающая архитектура, а не политика в PDF.
Написать на почтуДвижок перехода
Next Move Engine — система, которая доводит команду до автономного цикла доставки.
Next Move Engine →