Об этом проекте
Lexos — это управляемый событиями движок обработки документов на базе ИИ, построенный вокруг самостоятельно размещенных языковых моделей. Он сочетает высококонкурентный шлюз на Go с асинхронными Python-воркерами для выполнения суммаризации документов, генерации с дополненной выборкой (RAG) и транскрипции речи, не блокируя обработку HTTP-запросов и не полагаясь на внешние AI API.
Ключевые возможности, описанные в README:
Самостоятельное размещение и конфиденциальность: разбор документов, эмбеддинги, векторный поиск, транскрипция и вывод LLM выполняются внутри самостоятельно размещенной Docker-среды, без необходимости во внешних AI API.
Асинхронная обработка: клиенты получают немедленный ответ 202 Accepted с идентификатором задачи, пока ресурсоемкая работа продолжается в фоновом режиме.
Потоковая передача ответов в реальном времени: Server-Sent Events передают сгенерированные ответы по токенам от Python-воркера через Redis Pub/Sub и шлюз на Go в браузер.
S3-совместимое объектное хранилище: MinIO для разработки и Cloudflare R2 для продакшена, использующие одну и ту же конфигурацию S3-совместимого клиента.
Обработка с адресацией по содержимому: SHA-256 отпечатки объединяют исходный контент, операцию и параметры для повторного использования завершенных артефактов и подавления одновременной дублирующей обработки.
Многоязычный поиск: многоязычные эмбеддинги, чанкинг с учетом токенизатора и поиск по косинусному сходству FAISS извлекают релевантные доказательства на поддерживаемых языках.
Изолированное автоматизированное тестирование: Go-обработчики используют внедренные зависимости для Redis и хранилища, а Python-тесты имитируют модели, хранилище и сетевые операции с помощью Pytest и pytest-mock.
Архитектура: фронтенд на Next.js предоставляет рабочие процессы для транскрипции, суммаризации и ответов на вопросы, с опросом TanStack Query и рендерингом SSE. Шлюз на Go + Echo обрабатывает прием, валидацию, потоковую загрузку в объектное хранилище, отправку задач, подавление дубликатов и проксирование SSE. Redis выступает в роли брокера, хранилища состояний задач, кэша обработки и распределенного уровня блокировок. Python-воркер опрашивает очереди и запускает три конвейера: Distiller для суммаризации через конвейер Map-Reduce с Qwen3 0.6B, Gleaner для RAG с использованием эмбеддингов FastEmbed и индексов FAISS, и Scriber для транскрипции аудио через Faster-Whisper.
Развертывание: спроектирован для небольшого VPS только с CPU, примерно 4 vCPU и 8 ГБ ОЗУ, с бюджетом памяти AI-воркера около 2 ГБ. Квантованные модели GGUF Q4_K_M, загрузка с отображением в память, эмбеддинги на основе ONNX, индексы FAISS IndexFlatIP для каждого документа, последовательный параллелизм воркеров и внешнее состояние обеспечивают предсказуемое использование ресурсов.
Запуск: Docker и Docker Compose являются обязательными условиями; клонируйте репозиторий и выполните docker-compose up --build -d. Первоначальная загрузка может занять несколько минут, пока файлы моделей загружаются и кэшируются. Продакшен-хранилище использует ту же поверхность конфигурации S3 с конечной точкой R2 и S3_REGION=auto, а правила жизненного цикла можно применять с помощью Wrangler. Сырые объекты истекают через один день, а кэш-объекты — через восемь дней, в то время как метаданные кэша Redis остаются пригодными для повторного использования в течение семи дней.
Тестирование: тесты Go-шлюза используют моки Testify для поведения обработчиков, отпечатков, попаданий в кэш, восстановления устаревших блокировок и доступа к хранилищу; Python-тесты проверяют владение кэшем, индексацию с учетом токенов, очистку потоковой передачи, маршрутизацию воркеров, повторное использование артефактов и восстановление после сбоев; CI фронтенда запускает проверку типов TypeScript, ESLint и продакшен-сборку Next.js.
Лицензия: MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.