Архитектура

Публичный обзор архитектуры

Десять срезов архитектуры: изоляция арендаторов, конвейер поиска по документам, абстракция над поставщиком языковой модели, адаптеры каналов, потоковый ответ, поток данных через субпроцессоров, топология развёртывания, аварийное восстановление, конвейер оценки качества и наблюдаемость. Инженерный сигнал доверия в паре с мерами безопасности, готовностью к требованиям регуляторов и списком субпроцессоров.

Изоляция данных между арендаторами

Каждый арендатор получает строгий ключ партиционирования ClientId, применяемый на каждом уровне хранения. Реляционные таблицы и наши коллекции векторного поиска привязаны к ClientId с фильтрами уровня строк и уровня коллекций, применяемыми на уровне запросов. Паттерн репозитория отклоняет любой запрос без ClientId на этапе компиляции через правило статического анализатора. Проекты отслеживания ошибок, журналы аудита и blob-контейнеры - все сохраняют ту же дисциплину партиционирования. Межарендаторские данные - структурная невозможность, а не проверка во время выполнения.

Конвейер извлечения RAG

Приём → фрагментация → векторизация → upsert: документы (PDF, DOCX, извлечённый HTML, пары вопрос-ответ FAQ) разбиваются на фрагменты по 200-500 токенов с перекрытием в 50 токенов. Фрагменты векторизуются через нашу модель эмбеддингов (векторы размерности 1536) и записываются в наш индекс векторного поиска с метаданными (ClientId, sourceUrl, chunkIndex). Путь запроса: вопрос векторизуется, выполняется поиск top-K по косинусному сходству с фильтрацией по ClientId, порог ScoreThreshold по умолчанию 0.5. Извлечённые фрагменты передаются в LLM со структурированными метаданными цитирования, так что ответ содержит Snippet для каждого источника. Сверка выполняется еженощно как фоновая служба Worker (BackgroundService).

Абстракция LLM-провайдера

Все вызовы LLM идут через ILlmProvider - тонкую абстракцию над несколькими провайдерами языковых моделей (основной провайдер и альтернатива уровня Enterprise для резервирования). Выбор провайдера для каждого арендатора задаётся конфигурацией; при превышении лимита запросов или ошибке 5xx трафик автоматически переключается на резервный маршрут. Использование токенов и стоимость сообщаются по каждому вызову в теле ответа - арендаторы могут отслеживать расходы в реальном времени. Смена провайдера не требует миграции на стороне клиента - абстракция изолирует прикладной код.

Паттерн адаптера каналов

Каждый канал (веб-виджет, Telegram, WhatsApp Business, Instagram DM, электронная почта) реализует IChannelAdapter - общий контракт, транслирующий нативные для канала конверты сообщений в единую доменную модель Conversation. Паттерн адаптера позволяет основному конвейеру запросов работать независимо от канала; форматирование под конкретный канал (inline-клавиатуры Telegram, шаблонные сообщения WhatsApp) находится внутри адаптера. Добавление канала не затрагивает конвейер запросов.

Конвейер потоковых ответов

Потоковая передача на основе SSE через эндпоинт /v1/query/ask-stream. Первое событие - sources-early - отправляет метаданные цитирования до начала потоковой передачи ответа LLM (виджеты рендерят всплывающие карточки «по данным», пока ответ ещё стримится). Последующие события - фрагменты токенов; финальное событие - done с агрегированными метаданными (всего токенов, общая стоимость, ID журнала разговора). Сокращает воспринимаемую задержку примерно на 70% по сравнению с синхронным ответом.

Поток данных субпроцессоров

Запрос клиента → входящий трафик по TLS → наш слой API → вызов векторизации к нашему провайдеру модели (США, SCC 2021/914) → векторный поиск в нашем поисковом движке → вызов LLM к нашему провайдеру языковой модели с извлечёнными фрагментами → ответ обратно через слой API → SSE обратно к виджету. Провайдер мониторинга ошибок получает очищенные конверты ошибок (PII вычищается до отправки). Провайдер транзакционной почты обрабатывает транзакционную электронную почту (США, SCC 2021/914). Провайдер CDN и защиты периметра обеспечивает WAF и CDN глобально на границе сети. Субпроцессоры по категориям - на /ru/sub-processors/; полный список с названиями поставщиков предоставляется по запросу - под NDA или в составе нашего соглашения об обработке данных (DPA).

Топология развёртывания

Полностью управляемая облачная платформа запускает публичный API, маркетинговый сайт, платформу администрирования и вертикальные хабы как отдельно масштабируемые службы. Управляемая реляционная база данных держит реляционное хранилище с ежедневным резервным копированием и восстановлением на момент времени в пределах 24 часов. Наш движок векторного поиска работает с коллекциями для каждого арендатора. Управляемый кэш в памяти обслуживает сессии и корзину токенов для ограничения запросов. Объектное хранилище держит blob-объекты документов. Провайдер CDN и защиты периметра стоит впереди для WAF / защиты от DDoS / CDN. Рабочие процессы CI запускают продакшн-развёртывания при слиянии в релизную ветку.

Готовность к аварийному восстановлению

RTO 4 часа, RPO 1 час. Ежедневные резервные копии управляемой базы данных с хранением 35 дней; восстановление на момент времени в пределах последних 24 часов. Наш движок векторного поиска снимается в снапшоты еженощно в объектное хранилище. Многорегиональное переключение при отказе для высокой доступности. Регламент аварийного восстановления тестируется ежеквартально с имитацией отказа региона. Страница статуса на status.slatech.ai показывает аптайм в реальном времени + журнал инцидентов за последние 90 дней.

Конвейер оценки

Ответы, построенные на найденном содержании, оцениваются вторым вызовом модели. LLM-as-Judge оценивает фактологичность, галлюцинации и уверенность по каждому ответу. Агрегированные оценки по каждой вертикали выводятся на публичное табло на /ru/eval/. Регрессии оценки на ≥3 пункта запускают оповещение о ручной сортировке. Сам оценочный набор - открытый и доступен для скачивания как воспроизводимый шаблон - покупатели могут запустить его против своего арендатора SLAtech.

Стек наблюдаемости

Мониторинг ошибок на каждом бэкенд-сервисе с очисткой PII до отправки. Мониторинг синтетических транзакций с периодичностью 5 минут. Инструментированные OpenTelemetry участки трассировки для таймингов конвейера запросов. Журнал аудита для каждого арендатора, экспортируемый на тарифе Enterprise. status.slatech.ai опрашивает 12 боевых компонентов и показывает, отвечает ли каждый из них.

Нужны более подробные схемы архитектуры?

Презентация архитектуры для Enterprise и диаграммы последовательности по каждому компоненту доступны под соглашением о неразглашении.

Инструменты оценки покупателя

Четыре инструмента самообслуживания, чтобы оценить SLAtech (или любого другого поставщика AI-чат-ботов) без звонка с продавцами:

Качество ответов как измеряется качество ответов Калькулятор TCO годовая экономия и срок окупаемости Сравнение вендоров Опубликованные цены 16 вендоров Чек-лист поставщика 30 закупочных вопросов к вендору

Частые вопросы

Как SLAtech обрабатывает изоляция данных между арендаторами?
Каждый арендатор получает строгий ключ партиционирования ClientId, применяемый на каждом уровне хранения. Реляционные таблицы и наши коллекции векторного поиска привязаны к ClientId с фильтрами уровня строк и уровня коллекций, применяемыми на уровне запросов. Паттерн репозитория отклоняет любой запрос без ClientId на этапе компиляции через правило статического анализатора. Проекты отслеживания ошибок, журналы аудита и blob-контейнеры - все сохраняют ту же дисциплину партиционирования. Межарендаторские данные - структурная невозможность, а не проверка во время выполнения.
Как SLAtech обрабатывает конвейер извлечения rag?
Приём → фрагментация → векторизация → upsert: документы (PDF, DOCX, извлечённый HTML, пары вопрос-ответ FAQ) разбиваются на фрагменты по 200-500 токенов с перекрытием в 50 токенов. Фрагменты векторизуются через нашу модель эмбеддингов (векторы размерности 1536) и записываются в наш индекс векторного поиска с метаданными (ClientId, sourceUrl, chunkIndex). Путь запроса: вопрос векторизуется, выполняется поиск top-K по косинусному сходству с фильтрацией по ClientId, порог ScoreThreshold по умолчанию 0.5. Извлечённые фрагменты передаются в LLM со структурированными метаданными цитирования, так что ответ содержит Snippet для каждого источника. Сверка выполняется еженощно как фоновая служба Worker (BackgroundService).
Как SLAtech обрабатывает абстракция llm-провайдера?
Все вызовы LLM идут через ILlmProvider - тонкую абстракцию над несколькими провайдерами языковых моделей (основной провайдер и альтернатива уровня Enterprise для резервирования). Выбор провайдера для каждого арендатора задаётся конфигурацией; при превышении лимита запросов или ошибке 5xx трафик автоматически переключается на резервный маршрут. Использование токенов и стоимость сообщаются по каждому вызову в теле ответа - арендаторы могут отслеживать расходы в реальном времени. Смена провайдера не требует миграции на стороне клиента - абстракция изолирует прикладной код.
Как SLAtech обрабатывает паттерн адаптера каналов?
Каждый канал (веб-виджет, Telegram, WhatsApp Business, Instagram DM, электронная почта) реализует IChannelAdapter - общий контракт, транслирующий нативные для канала конверты сообщений в единую доменную модель Conversation. Паттерн адаптера позволяет основному конвейеру запросов работать независимо от канала; форматирование под конкретный канал (inline-клавиатуры Telegram, шаблонные сообщения WhatsApp) находится внутри адаптера. Добавление канала не затрагивает конвейер запросов.
Как SLAtech обрабатывает конвейер потоковых ответов?
Потоковая передача на основе SSE через эндпоинт /v1/query/ask-stream. Первое событие - sources-early - отправляет метаданные цитирования до начала потоковой передачи ответа LLM (виджеты рендерят всплывающие карточки «по данным», пока ответ ещё стримится). Последующие события - фрагменты токенов; финальное событие - done с агрегированными метаданными (всего токенов, общая стоимость, ID журнала разговора). Сокращает воспринимаемую задержку примерно на 70% по сравнению с синхронным ответом.
Как SLAtech обрабатывает поток данных субпроцессоров?
Запрос клиента → входящий трафик по TLS → наш слой API → вызов векторизации к нашему провайдеру модели (США, SCC 2021/914) → векторный поиск в нашем поисковом движке → вызов LLM к нашему провайдеру языковой модели с извлечёнными фрагментами → ответ обратно через слой API → SSE обратно к виджету. Провайдер мониторинга ошибок получает очищенные конверты ошибок (PII вычищается до отправки). Провайдер транзакционной почты обрабатывает транзакционную электронную почту (США, SCC 2021/914). Провайдер CDN и защиты периметра обеспечивает WAF и CDN глобально на границе сети. Субпроцессоры по категориям - на /ru/sub-processors/; полный список с названиями поставщиков предоставляется по запросу - под NDA или в составе нашего соглашения об обработке данных (DPA).
Как SLAtech обрабатывает топология развёртывания?
Полностью управляемая облачная платформа запускает публичный API, маркетинговый сайт, платформу администрирования и вертикальные хабы как отдельно масштабируемые службы. Управляемая реляционная база данных держит реляционное хранилище с ежедневным резервным копированием и восстановлением на момент времени в пределах 24 часов. Наш движок векторного поиска работает с коллекциями для каждого арендатора. Управляемый кэш в памяти обслуживает сессии и корзину токенов для ограничения запросов. Объектное хранилище держит blob-объекты документов. Провайдер CDN и защиты периметра стоит впереди для WAF / защиты от DDoS / CDN. Рабочие процессы CI запускают продакшн-развёртывания при слиянии в релизную ветку.
Как SLAtech обрабатывает готовность к аварийному восстановлению?
RTO 4 часа, RPO 1 час. Ежедневные резервные копии управляемой базы данных с хранением 35 дней; восстановление на момент времени в пределах последних 24 часов. Наш движок векторного поиска снимается в снапшоты еженощно в объектное хранилище. Многорегиональное переключение при отказе для высокой доступности. Регламент аварийного восстановления тестируется ежеквартально с имитацией отказа региона. Страница статуса на status.slatech.ai показывает аптайм в реальном времени + журнал инцидентов за последние 90 дней.