Skip to main content

Обзор

Приложение Yahont — это набор контейнеров Docker, которые можно развернуть на любой инфраструктуре и в любом масштабе.
Как проект с открытым исходным кодом, Yahont разработан с учётом безопасности и конфиденциальности данных как основополагающего принципа. Безопасность Yahont можно проверить по исходному коду, а не по заверениям поставщика.

Архитектура системы

Архитектура Yahont

Основные компоненты

Уровень приложения

  • Веб-клиент (фронтенд): веб-приложение на Next.js, предоставляющее пользовательский интерфейс платформы Yahont
  • API-сервер: веб-сервер на Python FastAPI для обработки бизнес-логики и запросов
  • Фоновые рабочие процессы: рабочие процессы на Python для асинхронных задач, например получения обновлений документов и т. д.
  • Сервис выполнения кода (code-interpreter): запускает код Python из чатов в отдельных изолированных контейнерах без доступа к сети (см. Выполнение кода). В Docker Compose сервис работает от имени root и использует сокет Docker хоста (/var/run/docker.sock).
Доступ к сокету Docker даёт управление Docker на хосте. Не публикуйте порты сервиса наружу. Чтобы запретить выполнение кода, отключите сервер на странице Интерпретатор кода в панели администратора.

Серверы моделей

  • Сервер модели вывода: обслуживает модели эмбеддинга и переранжирования, используемые во время запроса для получения и упорядочивания контекста
  • Сервер модели индексации: выделенный сервер моделей, выполняющий эмбеддинг документов во время индексации и изолирующий тяжёлые нагрузки индексации от живого трафика запросов

Уровень данных

  • Реляционная база данных: база данных Postgres для хранения данных приложения, сессий пользователей и состояния системы
  • Поисковая система: OpenSearch, обеспечивающий поиск по ключевым словам (BM25) и векторное хранилище для получения контекста по запросам
  • Кэш в памяти: Redis, используется для оптимизации производительности
  • Файловое хранилище: S3-совместимое хранилище SeaweedFS для загруженных пользователями файлов и документов, полученных из коннекторов

Уровень инфраструктуры

  • Маршрутизатор запросов: обратный прокси Nginx для балансировки нагрузки и маршрутизации запросов

Замена компонентов

Некоторые компоненты стека Yahont легко заменить, другие — нет. SeaweedFS можно заменить на S3, Google Cloud Storage, Azure Blob Storage или любой S3-совместимый сервис объектного хранилища. Интерфейс файлового хранилища абстрагирован, поэтому замена проста. Redis можно заменить управляемым сервисом Redis, таким как AWS ElastiCache или Google Cloud Memorystore for Redis. Другие кэши в памяти могут работать, но потребуют изменений в коде. Postgres можно заменить управляемым сервисом Postgres, например AWS RDS. Переход на другую реляционную базу данных гораздо сложнее и не рекомендуется из-за функций и оптимизаций, специфичных для языка. OpenSearch можно заменить многоузловым кластером OpenSearch (обычно не требуется) или управляемым сервисом OpenSearch, например AWS OpenSearch Service. OpenSearch тесно интегрирован с функциями получения контекста, и переход на другую поисковую систему потребует значительных затрат на разработку, чтобы сохранить ту же функциональность. Nginx можно убрать и заменить собственным маршрутизирующим прокси.