Gerts.ai
Москва, gerts.ai
Информационные технологии, системная интеграция, интернет... Показать еще
Технический директор (CTO)
Gerts.ai — платформа корпоративного уровня для работы со знаниями на основе Graph RAG (поиск с дополненным контекстом через граф знаний). Построена как монорепозиторий на TypeScript с общим управлением зависимостями через pnpm и Turbo.
Масштаб: около 2 500 000 строк промышленного кода, свыше 50 внутренних библиотек (packages), 8 приложений (apps), более 4 246 автоматических тестов, более 50 утверждённых архитектурных решений (RFC).
Готовность к промышленной эксплуатации: многопользовательский режим (multi-tenant), совместимость с API OpenAI, агенты на основе подхода ReAct, полный набор средств наблюдаемости, безопасность уровня предприятия (OIDC, ReBAC, HSM).
ЧЕМ ЗАНИМАЛСЯ
Архитектура платформы.
Спроектировал и реализовал микросервисную архитектуру на базе Moleculer: 17+ служб за единым брокером сообщений.
Ввёл событийную модель на основе Nats JeStreams вместо обычных событий — это гарантирует сохранность событий при перезапуске. Реализовал шаблоны распределённых систем: Saga, Outbox, Circuit Breaker, Dead Letter Queue, Idempotency Keys.
Построил хранилище событий (Event Sourcing) и проекции поверх PostgreSQL через Prisma.
Ввёл единый стандарт работы с настройками: каскадная конфигурация от уровня тенанта к глобальным значениям по умолчанию, без «магических» чисел в коде. Оформил свыше 50 архитектурных решений в виде RFC с едиными шаблонами, прогресс-барами и журналом реализации.
Искусственный интеллект и поиск по графу знаний (Graph RAG).
Реализовал восемь режимов поиска:
Local, Global, Hybrid, DRIFT, HippoRAG, Think-on-Graph, IRCoT и поиск по подграфам.
Реализовал многосигнальное объединение результатов (Fusion): плотные векторы, разреженные векторы, BM25, графовые сигналы; объединение через Reciprocal Rank Fusion (RRF) с последующим перевзвешиванием через cross-encoder reranker и MMR. Построил Ontology Management Studio с поддержкой OWL 2.0 и SKOS, многоязычных меток (aliases), композиции онтологий из нескольких доменов и трёхуровневого кэширования. Реализовал разрешение сущностей (Entity Resolution) по каскадной схеме: точное совпадение, затем гибридный семантический поиск, затем вызов языковой модели; с поддержкой псевдонимов и кросс-языкового сопоставления. Реализовал инкрементальное выделение сообществ в графе по алгоритмам Louvain и Leiden, генерацию их описаний через LLM и иерархическую агрегацию для глобального поиска.
Реализовал цикл агента по схеме ReAct (Reasoning + Acting): сессии, реестр инструментов, вызовы функций, структурированные ответы через Typia.
Построил многослойную память агентов: пять уровней — разговор, эпизодическая память, DIM, знания, кросс-связи. Интегрировал поставщиков моделей: OpenAI, Anthropic (Claude), Google Gemini, локальные эмбеддинги Infinity (BGE-M3), единый шлюз моделей LiteLLM. Реализовал выбор модели на уровне тенанта и домена и отслеживание стоимости запросов для 2 600+ моделей. Разработал платформу оценки качества (Eval Platform): 20+ метрик, запускатор тестов, хранение результатов в ClickHouse, веб-интерфейс для сравнения версий.
Серверная часть и распределённая обработка.
Построил систему очередей заданий на BullMQ с разделением на секции (partition workers), ключами идемпотентности, изоляцией по тенантам, оркестрацией Saga и потоковой передачей прогресса по Server-Sent Events (SSE).
Реализовал движок ETL на основе направленных ацикличных графов (DAG) с точками восстановления, хранилищем артефактов и событиями жизненного цикла. Реализовал ограничитель частоты запросов (Rate Limiter) на Redis со скриптами на Lua (алгоритмы «скользящее окно» и «корзина токенов») с гранулярностью по тенанту, IP и пользователю.
Разработал собственный потоковый протокол GSP/1.0 для передачи ответов языковой модели: 15 типов блоков, совместимый с OpenAI шим, транспортная независимость (WebSocket и SSE). Реализовал более 17 служб: LLM-прокси, граф, извлечение документов, вектор, файлы, чат, планировщик, конфигурация тенанта, администрирование, OIDC, IAM, ETL, память.
Клиентская часть (веб-приложение).
Разработал веб-приложение на Next.js 15 (маршрутизация App Router) и React 19 с более чем 25 страницами: IAM, консоль Graph RAG, наблюдаемость, площадка для отладки извлечения, Ontology Studio.
Построил генерацию клиента по контракту: TypeScript-типы через Typia генерируют схему OpenAPI 3.1, далее openapi-typescript строит типобезопасный HTTP-клиент, контракты проверяются в CI. Реализовал полный поток аутентификации OIDC через конечные автоматы XState: вход, многофакторная аутентификация, SSO, passkeys, TOTP, поток авторизации устройств, одноразовые ссылки. Использовал современный стек: TailwindCSS, shadcn/ui поверх Radix UI, тема оформления Vercel Geist, Zustand 5 для локального состояния, React Query 5 для работы с API. Встроил Monaco Editor, граф-редактор @xyflow/react, диаграммы Mermaid, таблицы @tanstack/table с виртуализацией, потоковый чат через AI SDK. Применил архитектурный подход Feature-Sliced Design (FSD): shared, entities, features, views, widgets, app.
Безопасность и управление доступом.
Реализовал провайдер OIDC: authorization code, device flow, обновление токенов, introspection, JWKS. Ввёл ротацию ключей JWT в трёх режимах: ephemeral (для разработки), file (для окружения тестирования), Vault (для промышленной среды). Закрыл уязвимости IDOR (CWE-639) через строгое определение тенанта более чем в 130 конечных точках. Построил тонкое управление доступом на основе связей (ReBAC) через OpenFGA по модели Zanzibar. Интегрировал корпоративный вход: SAML, LDAP, SCIM, пять и более поставщиков (Google, Microsoft, Atlassian, Slack, Okta). Реализовал WebAuthn и Passkeys, TOTP, отпечатки устройств, блокировку учётной записи, подписывание сессий HMAC-SHA256. Реализовал сходящееся шифрование содержимого файлов (Convergent Encryption) для дедупликации в хранилище: ключи не покидают HashiCorp Vault (Transit backend); поддержаны запасные провайдеры AWS KMS и Azure Key Vault.
Инфраструктура и наблюдаемость.
Развернул полный стек наблюдаемости: OpenTelemetry Collector собирает данные и направляет в Tempo (трассировка), Loki (логи), Pyroscope (профилирование) и Prometheus (метрики); визуализация в Grafana с пятью готовыми панелями мониторинга. Настроил Kubernetes и Helm с автоматическим масштабированием воркеров через KEDA по длине очереди. Выстроил стратегию контейнеров на docker-compose с профилями (разработка, шлюз API, воркеры) и возможностью горизонтального масштабирования. Реализовал мост Tempo в Claude Code через собственный MCP-сервер — инструмент для прямого анализа трассировок из среды разработки. Настроил CI/CD на GitHub Actions: контроль качества извлечения (extraction quality), шлюз оценки (eval gate) с пороговыми значениями. Настроил git-хуки: Husky, Commitlint, lint-staged. Настроил среду разработки через Devbox (Node.js 22, Python 3.12, Go 1.24, Rust) — воспроизводимо на любой машине.
ИСПОЛЬЗОВАННЫЕ ТЕХНОЛОГИИ
Языки и среда исполнения.
TypeScript 5.9 (строгий режим), Node.js 22, Python 3.12, Go 1.24, Rust. Пакетный менеджер pnpm 10, сборка через Turbo 2.5.
Серверная часть.
Moleculer 0.14, NATS, Redis Streams, BullMQ 5, ioredis, RedLock, Hono, isolated-vm (песочница для пользовательского кода), Typia (валидация на этапе компиляции).
API и протоколы.
REST (OpenAPI 3.1), OIDC и OAuth2, JWT (jose), WebSocket, Server-Sent Events (SSE), JSON-RPC 2.0, Model Context Protocol (MCP), генерация клиента через openapi-typescript.
Базы данных и хранилища.
Реляционная база PostgreSQL 16 с Prisma 6 (Event Sourcing и проекции). Векторные базы: Milvus (с поддержкой BM25 и разреженных векторов), Qdrant, Weaviate, Pinecone, Chroma, pgvector. Графовые базы: FalkorDB, Neo4j. Аналитическая база: ClickHouse. Кэш и потоки событий: Redis 7. Файловое хранилище: MinIO (S3-совместимое).
Искусственный интеллект и машинное обучение.
OpenAI SDK, Anthropic SDK (Claude), Google Generative AI (Gemini), LiteLLM (шлюз моделей), Infinity (локальный сервер для эмбеддингов BGE-M3), Tesseract.js (распознавание текста из изображений), tiktoken, graphology, алгоритмы выделения сообществ Louvain и Leiden, N3 (для RDF и Turtle), OWL 2.0, SKOS.
Клиентская часть.
Next.js 15 (App Router), React 19, TailwindCSS 3, shadcn/ui и Radix UI, Vercel Geist, Zustand 5, XState 5, React Query 5, openapi-fetch, AI SDK (@ai-sdk/react), @assistant-ui/react, @xyflow/react (графовый редактор), Monaco Editor, Mermaid, @tanstack/react-table с react-virtual, Framer Motion, PostHog (аналитика).
Безопасность.
HashiCorp Vault (Transit и AppRole), провайдеры HSM (Vault, AWS KMS, Azure Key Vault), сходящееся шифрование AES-256-GCM, OpenFGA (ReBAC), SAML (samlify), WebAuthn и FIDO2 (SimpleWebAuthn), LDAP (ldapts), SCIM, TOTP, подпись сессий HMAC-SHA256, маскирование персональных данных в трассировках.
Инфраструктура, наблюдаемость, инструменты разработчика.
Docker (многоступенчатая сборка), docker-compose с профилями, Kubernetes и Helm, автоскейлинг через KEDA, GitHub Actions, Husky, Commitlint, lint-staged, OpenTelemetry (трассировка, метрики, логи), Tempo, Loki, Pyroscope, Prometheus, Grafana, OTel Collector, собственный MCP-мост к Tempo.
Тестирование.
Vitest 3, @testing-library/react, Playwright (через MCP), более 4 246 тестов (модульные и интеграционные).
КЛЮЧЕВЫЕ РЕЗУЛЬТАТЫ
Платформа Graph RAG с восемью алгоритмами поиска, объединением сигналов, многослойной памятью агентов и поддержкой OWL-онтологий.
Монорепозиторий на TypeScript: свыше 50 внутренних библиотек, сборка с учётом графа зависимостей (Turbo), сквозная типобезопасность от базы данных до браузера.
Безопасность уровня предприятия: OIDC, ReBAC, HSM, сходящееся шифрование, SSO (SAML, LDAP, SCIM).
Полная наблюдаемость: OpenTelemetry, Tempo, Loki, Pyroscope, Prometheus, Grafana, с собственным мостом MCP для среды разработки.
Промышленная инфраструктура: BullMQ, Saga, Outbox, DAG ETL, автомасштабирование на Kubernetes.
Современная клиентская часть: Next.js 15, React 19, потоки аутентификации на XState, типобезопасный клиент из OpenAPI, архитектура FSD.
Платформа агентов: среда исполнения ReAct, реестр инструментов MCP, межагентное взаимодействие A2A по JSON-RPC, потоковый протокол GSP.