Когда нейросеть перестаёт быть понятной: как разработчик создал инструмент «рентгеновского зрения» для ИИ-систем
Сложные системы на базе больших языковых моделей часто превращаются в «чёрный ящик», где результат известен, а причины ошибок скрыты. Разработчик проекта PAD+ AI столкнулся с этой проблемой и создал библиотеку X-Ray, которая позволяет видеть полный путь выполнения запроса — от входа до выхода, включая все промежуточные этапы и их взаимосвязи.
Разработка сложных систем на основе больших языковых моделей (LLM) имеет одну коварную особенность: со временем разработчик перестаёт понимать, как именно работает его собственное творение. Именно это произошло с автором проекта PAD+ AI, который после миллионов тестов осознал, что потерял контроль над поведением системы. PAD+ AI уже умел работать с памятью, пайплайнами, эмоциями, Truth Loop и персонами, результаты становились всё лучше, но когда система ошибалась, невозможно было понять почему. Она просто отвечала — иногда отлично, иногда странно, иногда неожиданно, но всё происходило где-то внутри, в абсолютно чёрном пространстве между входом и выходом.
Современные приложения на базе LLM обычно имеют простую архитектуру: запрос, промпт, модель, ответ. Однако при добавлении памяти, RAG, агентов и дополнительных сервисов система становится существенно сложнее. На уровне результата видно только вход и выход, но не видно, какие компоненты участвовали в обработке, в каком порядке выполнялись операции, где возникла задержка или ошибка, как изменялось состояние системы. В сложных системах это приводит к полной потере объяснимости поведения. После очередной серии тестов разработчик задал вопрос, который полностью изменил архитектуру проекта: «А что, если посмотреть на проблемы изнутри?» Так родилась концепция X-Ray — название пришло сразу, ведь рентген позволяет увидеть то, что скрыто от глаз.
Вместо того чтобы фиксировать отдельные события, разработчик начал смотреть на сам путь выполнения. Каждый пользовательский запрос превратился в отдельную Trace, а каждая операция внутри неё стала отдельным Span. Получилась структура, напоминающая дерево выполнения: Safety, Intent, RAG, Knowledge Graph, Semantic Memory, Persona, Generate, Truth Loop, Response Guard. Теперь можно было увидеть не только последовательность выполнения, но и время прохождения каждой фазы, взаимосвязь между этапами и полный путь обработки запроса. Важно отметить, что X-Ray не является системой логирования — логирование фиксирует события, а X-Ray фиксирует структуру выполнения процесса. Лог говорит: «произошло событие X», а трасса говорит: «вот полный путь, которым система пришла к результату, со всеми зависимостями и временами». Это позволяет восстанавливать полную картину обработки запроса даже спустя дни и недели.
Изначально X-Ray создавался исключительно для PAD+ AI и использовался внутри когнитивного pipeline, но довольно быстро выяснилась неожиданная вещь: он практически ничего не знает о когнитивной архитектуре. Ему безразлично, что именно работает внутри: LLM, REST API, Telegram-бот, микросервис или платёжная система. Любой процесс можно представить как последовательность связанных операций, что означало, что X-Ray можно использовать далеко за пределами исходного ИИ-проекта. Сегодня X-Ray — это production-ready библиотека наблюдаемости на Python, которую можно встроить практически в любой проект. Её задача — не управлять приложением и не принимать решения, а максимально подробно фиксировать ход выполнения. Библиотека реализует модель Trace/Span, прозрачное распространение trace_id между сервисами, middleware-интеграцию для FastAPI, запись трасс на диск с автоматическим восстановлением после перезапуска, гибкие режимы работы (live, shadow, readonly, disabled), аудит целостности трасс и поиск нарушений причинно-следственных связей, инструменты валидации и санитизации повреждённых данных, а также REST API для доступа к трассам и результатам аудита.
По своей роли X-Ray можно сравнить с бортовым самописцем (чёрным ящиком) самолёта. Он не предотвращает ошибки и не исправляет их автоматически, но делает гораздо более важную вещь — сохраняет полную картину произошедшего, чтобы инженер мог понять, почему система пришла именно к такому результату. Каждый завершённый трейс записывается на диск в JSON, и при перезапуске все трейсы восстанавливаются автоматически, а активные трейсы становятся interrupted — все спэны сохраняются. Структура хранилища включает каталоги для трейсов, спэнов, индекс, архив для хранения по политике retention и карантин для повреждённых данных. Для подключения X-Ray к приложению на FastAPI достаточно добавить middleware и передавать идентификатор трассы между вызовами — базовая интеграция занимает всего несколько минут. При этом функция извлечения контекста возвращает не скаляр, а словарь из пяти полей: trace_id, span_id, parent_span_id, logical_ts, causal_depth, что необходимо для полной поддержки propagation-контекста между сервисами.
Появление таких инструментов, как X-Ray, отражает общую тенденцию в индустрии искусственного интеллекта: по мере усложнения моделей и архитектур растёт потребность в наблюдаемости и объяснимости. Если раньше разработчики могли полагаться на простые логи и визуализацию метрик, то сегодня, когда в обработке одного запроса могут участвовать десятки компонентов — от проверки безопасности до семантической памяти и графов знаний, — без инструментов трассировки не обойтись. На рынке существуют коммерческие решения для наблюдаемости AI-систем, такие как LangSmith от LangChain или Weights & Biases, но они часто привязаны к определённым фреймворкам или требуют подписки. X-Ray, напротив, предлагает открытую, лёгкую и независимую альтернативу, которую можно интегрировать в любой Python-проект без дополнительных затрат и привязки к вендору. Это особенно важно для стартапов и небольших команд, которые хотят сохранить контроль над своими данными и архитектурой.
Перспективы развития X-Ray включают расширение поддержки других языков программирования, интеграцию с популярными системами мониторинга и визуализации, а также добавление механизмов автоматического анализа трасс для выявления аномалий и узких мест. Открытым остаётся вопрос стандартизации формата трасс для AI-систем — возможно, в будущем появится универсальный протокол, аналогичный OpenTelemetry для обычных приложений, но адаптированный под специфику LLM и агентов. Пока же такие проекты, как X-Ray, заполняют важную нишу, позволяя разработчикам не просто запускать нейросети, а по-настоящему понимать их поведение. В конечном счёте, способность заглянуть внутрь «чёрного ящика» — это не просто удобство, а необходимое условие для создания надёжных, безопасных и контролируемых AI-систем.