Разработчик под ником VDV001 опубликовал на Хабре инженерный разбор Lexis — персонального AI-репетитора английского языка, версия 0.10.0. Повод банальный: Duolingo учит заказывать яблоки, ChatGPT не помнит, что Present Perfect разбирали в среду. Lexis уже живёт в продакшене у автора — MIT-лицензия, репозиторий открыт.
Контекст
Рынок EdTech-приложений переполнен геймификацией. Duolingo, Memrise, Babbel заточены под retention-метрики и стрики, а не под реальный прогресс. Существующие «AI-tutor» — в основном тонкая обёртка над OpenAI API без памяти о предыдущих сессиях и без какой-либо структуры. Это не продукт, а чат с системным промптом.
Lexis архитектурно — модульный монолит: четыре модуля (auth, vocabulary, tutor, progress) с Clean Architecture внутри каждого. Один процесс, один Postgres, один Redis. In-memory EventBus с интерфейсом: события WordLearned, SessionCompleted, StreakBroken летят в модуль progress без прямой связности. При желании любой модуль выносится в отдельный сервис — границы уже нарезаны.
Автор сознательно отверг оба полюса: микросервисы (оверинжиниринг для одного пользователя) и классический монолит (труднее распилить через год). Модульный монолит — осознанная ставка на эволюцию без переписывания. Стек без экзотики: Go 1.24+, chi-роутер, pgx, sqlc, goose, zerolog, viper, testify, gomock.
Аналитика
Три технических решения выбиваются из типичного pet-project. Первое — pluggable AI-провайдеры. Интерфейс с тремя методами, провайдер достаётся из registry по model_id из запроса фронта. Сейчас работают Claude (Anthropic Messages API), OpenAI (Chat Completions + streaming), Gemini. Qwen — заглушка 104 байта, в roadmap. Минимальный интерфейс — принципиальное решение: добавлять специфику каждого провайдера в контракт значит сломаться на четвёртом.
Второе — SSE вместо WebSocket для стриминга AI-ответов. Однонаправленный поток сервер → клиент, нативный реконнект по Last-Event-ID, прозрачная работа через nginx, 30 строк Go-кода вместо 100+ с ping/pong и frame size. Единственный минус HTTP/1.1 — 6 соединений на домен — снимается переходом на HTTP/2.
Третье — JWT rotation + reuse detection. Семейства токенов, SELECT ... FOR UPDATE против race condition, Redis blacklist с TTL равным оставшемуся времени жизни токена. При повторном использовании refresh-токена — полный отзыв всей семьи. Для пет-проекта это production-grade security, которую большинство стартапов не делает даже в реальном проде. 230 строк, один файл.
Кейсы применения в бизнесе
B2B-SaaS стартап, корпоративное обучение. Архитектура Lexis — готовый скелет для продукта обучения сотрудников. Pluggable провайдеры позволяют маршрутизировать запросы по стоимости: Claude Opus для сложного разбора грамматики, Haiku для быстрой проверки перевода. SM-2 из коробки — альтернатива встроенному алгоритму Anki, который иначе пришлось бы писать с нуля. Время от форка до MVP — порядка недели.
Корпорация с legacy-монолитом. EventBus с интерфейсом — паттерн, адаптируемый для замены in-memory шины на Kafka или RabbitMQ без переписывания бизнес-логики. Если стоит задача постепенной декомпозиции монолита — такой подход снижает риски и сохраняет работающий сервис на каждом этапе.
SMB или локальная компания в КР/СНГ. Lexis запускается через docker compose up -d локально, без публичного хостинга. Для HR-отдела, тестирующего AI-ассистента для онбординга на иностранном языке — рабочий прототип за один день развёртывания. MIT-лицензия не накладывает ограничений на коммерческое использование.
Кейсы в личной жизни
Разработчик, изучающий язык. Клонируй репозиторий, подставь один API-ключ в .env, запусти docker compose. Создай сессию с темой, которая интересна прямо сейчас — «архитектура микросервисов», «переговоры о зарплате», «code review на английском» — и получи 15-минутный чат с тремя новыми словами в конце, которые автоматически попадут в SM-2 очередь.
Контент-мейкер или фрилансер с зарубежными клиентами. Режимы Fill in the Blank и письменный перевод с AI-оценкой дают мгновенную обратную связь без ожидания нативного спикера. Статистика прогресса — реальный рост словарного запаса, а не счётчик дней без пропуска.
Студент с колодой Anki. Импорт .apkg в roadmap, но уже сейчас можно вручную добавить ключевые слова курса и использовать четыре режима — от выбора варианта из четырёх до сборки слова из букв. SM-2 сам определит, когда и что повторять, честно отрабатывая quality-оценки.
Как применить сегодня
- Склонируй репозиторий
github.com/VDV001/lexis, добавь ключ любого из трёх провайдеров в.envи запустиdocker compose up -d— AI-репетитор поднимается локально за несколько минут. - Если строишь AI-чат — попробуй SSE вместо WebSocket: однонаправленный стрим, нативный реконнект, 30 строк Go против 100+.
- Используй паттерн pluggable провайдеров в своём проекте: минимальный интерфейс (2-3 метода), map[string]Provider, выбор провайдера через
model_id— защита от vendor lock-in без абстракции ради абстракции. - Добавь JWT reuse detection в свой auth: семейства токенов +
SELECT ... FOR UPDATE+ Redis blacklist с TTL — 230 строк в одном файле, не «потом», а сейчас. - Для корпоративного AI-тутора — форкни Lexis и настрой системный промпт под домен компании: юридическая терминология, технический English, переговорные паттерны.