- BrainTools - https://www.braintools.ru -
Есть одна коварная особенность в разработке сложных систем.
Иногда ты месяцами строишь архитектуру. Добавляешь новые возможности, исправляешь ошибки [1]. Всё работает. А потом вдруг понимаешь одну очень неприятную вещь:
Ты больше не понимаешь собственную программу.
Именно это произошло и со мной во время разработки PAD+ AI. После миллионов тестов я осознал, что потерял контроль.
PAD+ AI уже умел многое: работал с памятью [2], пайплайнами, эмоциями [3], Truth Loop и персонами. Результаты становились всё лучше. Но возникла совершенно неожиданная проблема.
Когда система ошибалась, невозможно было понять почему. Она просто отвечала. Иногда отлично, иногда странно, иногда неожиданно. Но всё происходило где-то внутри.
Современные приложения на базе LLM обычно имеют простую архитектуру:
Запрос → Prompt → LLM → Ответ
Но при добавлении памяти, RAG, агентов и дополнительных сервисов система становится существенно сложнее. На уровне результата видно только вход и выход, но не видно:
какие компоненты участвовали в обработке;
в каком порядке выполнялись операции;
где возникла задержка или ошибка;
как изменялось состояние системы.
В сложных системах это приводит к полной потере объяснимости поведения [4]. Я видел только вход. И видел выход. А между ними было абсолютное чёрное пространство.
После очередной серии тестов я задал вопрос, который полностью изменил архитектуру проекта:
«А что, если посмотреть на проблемы изнутри?»
Именно с этого вопроса началась история X-Ray. Название родилось сразу: ведь рентген позволяет увидеть то, что скрыто от глаз.
Я начал смотреть не на отдельные события, а на сам путь выполнения. Каждый пользовательский запрос превратился в отдельную Trace. Внутри неё каждая операция стала отдельным Span. Получилась структура, напоминающая дерево выполнения:
Trace
├── 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-проект. Её задача — не управлять приложением и не принимать решения, а максимально подробно фиксировать ход выполнения.
X-Ray реализует следующие механизмы:
модель Trace / Span;
прозрачное распространение trace_id между сервисами (propagation);
middleware-интеграцию (FastAPI и др.);
persistence — запись трасс на диск с автоматическим восстановлением после перезапуска;
гибкие режимы работы: live, shadow, readonly, disabled;
аудит целостности трасс и поиск нарушений причинно-следственных связей;
инструменты валидации и санитизации повреждённых данных;
REST API для доступа к трассам и результатам аудита.
По своей роли X-Ray можно сравнить с «бортовым самописцем» (чёрным ящиком) самолёта. Он не предотвращает ошибки и не исправляет их автоматически. Он делает гораздо более важную вещь — сохраняет полную картину произошедшего, чтобы инженер мог понять, почему система пришла именно к такому результату.
Каждый завершённый трейс записывается на диск в JSON. При перезапуске все трейсы восстанавливаются автоматически. Активные трейсы становятся interrupted — все спэны сохраняются.
trace_store/
├── traces/{trace_id}.json
├── spans/{trace_id}/span_{id}.json
├── index.json
├── archive/ # Архивы retention
└── quarantine/ # Повреждённые данные
Сегодня для подключения X-Ray к приложению на FastAPI достаточно добавить middleware и передавать идентификатор трассы между вызовами. Базовая интеграция занимает всего несколько минут.
1. Подключение middleware:
from fastapi import FastAPI, Request
from aethon.xray.http_propagation import fastapi_extract_xray
app = FastAPI()
@app.middleware("http")
async def xray_middleware(request: Request, call_next):
headers = fastapi_extract_xray(request)
trace_id = headers.get("trace_id", "")
response = await call_next(request)
if trace_id:
response.headers["X-Trace-Id"] = trace_id
return response
Важно:
fastapi_extract_xrayвозвращает не скаляр, а словарь из 5 полей:trace_id,span_id,parent_span_id,logical_ts,causal_depth. Это нужно для полной поддержки propagation-контекста между сервисами.
2. Обёртка внешних вызовов:
from aethon.xray import start_span, SpanKind
async def call_provider():
span = start_span(kind=SpanKind.EXTERNAL, name="provider_call")
try:
result = await provider.call()
span.end(success=True)
return result
except Exception:
span.end(success=False)
raise
3. Конфигурация persistence (в коде):
from aethon.xray.trace_store import store
# Включение записи трейсов на диск
store.configure_persistence("./data/trace_store")
4. Проверка работоспособности:
GET /health → {"status": "ok", "mode": "live", "trace_store": true}
GET /xray/audit/{trace_id} → {"trace_id": "...", "all_passed": true}
GET /xray/traces → {"traces": [...]}
После этого система начинает автоматически строить полную картину выполнения запросов, сохранять трассы, поддерживать несколько режимов работы, проводить аудит целостности данных и восстанавливать историю после перезапуска.
X-Ray не остался на бумаге. Сегодня он работает в продакшене как часть приложения PAD+ AI, развёрнутого на Render.
Ссылка: https://pad-plus-ai.onrender.com [5]
Что вы можете увидеть в реальном времени
Каждый запрос, который проходит через PAD+, оставляет за собой полную трассу. И вы можете наблюдать за этим в реальном времени:
🔴 Live-режим через WebSocket
Специальный endpoint /api/v1/xray/ws отправляет события trace_event в реальном времени на фронтенд. Вы видите, как запрос проходит через все стадии pipeline:
Safety → Intent → Retrieve → Persona → Generate → Verify → Remember → Emit
Каждая стадия подсвечивается, показывается время выполнения, статус (успех/ошибка). Это как смотреть на ЭКГ в реальном времени.
📊 Визуализация pipeline
Фронтенд-компонент XRayPipeline.jsx показывает:
Активную стадию (мигает)
Завершённые стадии (зелёные)
Время выполнения каждой фазы
Общее время обработки запроса
📜 История трейсов
Через endpoint GET /api/v1/xray/recent?limit=50 можно получить последние 50 завершённых сессий. Каждая сессия содержит:
user_message — что спросил пользователь
start_time — когда начался запрос
events — все стадии выполнения
metadata — дополнительная информация
stage_times — время каждой фазы
total_time_ms — общее время
Компонент TraceHistory.jsx позволяет искать, фильтровать по статусу и детально просматривать каждую сессию.
🔍 Детальный просмотр и экспорт
Через GET /api/v1/xray/sessions/{session_id} можно получить полную информацию о конкретной сессии. Данные можно экспортировать в JSON или CSV для внешнего анализа.

💾 Персистентность
В памяти хранятся последние 100 сессий (старые автоматически очищаются).
Каждый запрос, который проходит через PAD+, оставляет за собой полную трассу — от Safety-проверки до финальной стадии Verify. Эти трассы сохраняются, аудируются и доступны для анализа в реальном времени.
После отделения от PAD+ AI оказалось, что X-Ray можно использовать для:
микросервисной архитектуры;
AI-приложений с несколькими LLM-провайдерами;
Telegram- и VK-ботов;
систем обработки документов и RAG-приложений;
платёжных шлюзов и сложной бизнес-логики;
распределённых API и агентных систем.
Фактически любая программа, в которой важно понимать не только итог работы, но и путь, которым система пришла к результату, может использовать X-Ray.
После появления X-Ray произошло ещё одно неожиданное открытие. Теперь система действительно умела видеть всё, что происходит внутри. Она фиксировала каждую фазу, каждую ошибку, каждое отклонение и каждую деградацию.
И однажды возник следующий вопрос:
Если система уже умеет видеть собственные проблемы… почему она не может начать исправлять их самостоятельно?
Именно этот вопрос позже привёл к созданию ещё одного независимого проекта — HEALER.
Но это уже совсем другая история.
📖 PAD+ AI v4.0: исследовательская когнитивная архитектура поверх LLM [6] — первая статья о проекте, для которого изначально создавался X-Ray. Если вы ещё не читали, рекомендую начать с неё, чтобы понять контекст. https://habr.com/ru/articles/1055242/ [7]
GitHub: [8]https://github.com/Ovladimirovich/xray-integration-kit [9] — исходный код библиотеки. Репозиторий пока приватный, но если хотите изучить архитектуру, предложить улучшения или просто обсудить трассировку — пишите, открою доступ заинтересованным. https://github.com/Ovladimirovich/xray-integration-kit.git [10]
🔗 PAD+ AI на Render [11] — живое демо, где можно увидеть работу X-Ray в реальном времени через WebSocket-визуализацию pipeline. https://pad-plus-ai.onrender.com/?spm=a2ty_o01.29997173.0.0.a48a55fbXrvt8z [11]
INSTALL.ru.md [12] — полное руководство по установке и настройке X-Ray: минимальная интеграция за 5 минут, описание режимов работы (live, shadow, readonly, disabled), структура persistence и production-чеклист.
Telegram: https://t.me/padplusai [13] — для вопросов, предложений и запросов на доступ к репозиторию.
Автор: ovladim
Источник [14]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/33150
URLs in this post:
[1] ошибки: http://www.braintools.ru/article/4192
[2] памятью: http://www.braintools.ru/article/4140
[3] эмоциями: http://www.braintools.ru/article/9540
[4] поведения: http://www.braintools.ru/article/9372
[5] https://pad-plus-ai.onrender.com: https://pad-plus-ai.onrender.com
[6] PAD+ AI v4.0: исследовательская когнитивная архитектура поверх LLM: https://habr.com/ru/articles/XXXXXX/?spm=a2ty_o01.29997173.0.0.a48a55fbXrvt8z
[7] https://habr.com/ru/articles/1055242/: https://habr.com/ru/articles/1055242/
[8] GitHub: : https://github.com/YOUR_USERNAME/aethon-xray
[9] https://github.com/Ovladimirovich/xray-integration-kit: https://github.com/Ovladimirovich/xray-integration-kit
[10] https://github.com/Ovladimirovich/xray-integration-kit.git: https://github.com/Ovladimirovich/xray-integration-kit.git
[11] PAD+ AI на Render: https://pad-plus-ai.onrender.com/?spm=a2ty_o01.29997173.0.0.a48a55fbXrvt8z
[12] INSTALL.ru.md: http://INSTALL.ru.md
[13] https://t.me/padplusai: https://t.me/padplusai
[14] Источник: https://habr.com/ru/articles/1057236/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1057236
Нажмите здесь для печати.