AI-помощник на LangChain4j и Spring Boot: учёба, собеседования и RAG
Grok и GPT спорят: без Redis dimension 1024 RAG просто отвалится
В репозитории представлен AI-помощник для изучения программирования и подготовки к собеседованиям, построенный на Spring Boot, LangChain4j, Redis и Vue 3. Проект реализует потоковые ответы через SSE, хранение диалогов в Redis, RAG на векторном поиске Redis, вызов инструментов через Jsoup и MCP, а также простую фильтрацию чувствительных слов. Это готовый учебный пример: показаны конфигурация, переменные окружения, Docker Compose и ограничения безопасности. Разработчику важно знать, что для запуска нужны ключи DashScope и 智谱 MCP, Redis с поддержкой векторов и внешние сервисы.
Проект ai-code-helper — это пример реализации AI-ассистента для обучения программированию и подготовки к собеседованиям. Исходный код написан на Java 21 с использованием Spring Boot 3.5.11, LangChain4j 1.18.0-beta28, Redis и Vue 3. Автор выложил полный стек: от серверной логики и конфигурации до фронтенда и Docker Compose. Такой репозиторий удобен джунам, которые хотят разобраться, как на практике соединяются LLM, память диалогов, векторный поиск и инструменты. Главная особенность — потоковые ответы. Бэкенд отдаёт SSE-поток, а фронтенд на Vue 3 принимает его через нативный EventSource. Пользователь может остановить генерацию, скопировать ответ или начать новую сессию. Для сохранения контекста используется Redis: каждому диалогу присваивается memoryId, хранится до 10 сообщений, по умолчанию данные живут 7 дней. Это показывает, как реализовать краткосрочную память без внешней базы. Ещё одна важная часть — RAG. Документы из classpath загружаются, разбиваются на части и сохраняются в векторный индекс Redis. При поиске возвращаются до 5 фрагментов с минимальной схожестью 0.75. В проекте подчёркивается, что обычный Redis с ключами и значениями не подойдёт: нужна поддержка векторного поиска, а размерность эмбеддингов должна совпадать с переменной APP_REDIS_VECTOR_DIMENSION (по умолчанию 1024). Это частый подводный камень для новичков, и в статье он явно разобран. Для вызова инструментов используются Jsoup (извлечение вопросов с внешних страниц) и MCP-клиент для доступа к поиску через 智谱. Также есть простая проверка чувствительных слов на английском, но автор честно указывает, что это лишь пример, а не полноценная модерация. Перед запуском нужно подготовить ключи DashScope для чата, потокового режима и эмбеддингов, а также ключ 智谱 MCP. Настройки выносятся в .env.example, но при прямом запуске Spring Boot через Maven этот файл не подхватывается автоматически — переменные необходимо передать через окружение или IDE. Приложение при старте подключается к Redis, инициализирует MCP и может обращаться к сервису эмбеддингов, поэтому запуск не ограничивается простым HTTP-сервером и может повлечь платные вызовы. Для локальной разработки backend слушает порт 8081, а frontend на 5173 проксирует API-запросы. Сборка выполняется командами Maven и npm, но тесты требуют реальных внешних сервисов, поэтому в репозитории предложено собирать без тестов. Docker Compose содержит только рантайм-образ: нужно предварительно собрать JAR и статические файлы фронтенда. В Compose нет Redis, его нужно разворачивать отдельно и указывать адрес. Отдельно стоит отметить ограничения, которые делают проект именно учебным: нет аутентификации, ограничения частоты запросов и проверки владельца сессии, CORS открыт, GET-параметры могут попадать в логи, а завершение SSE-потока не имеет явного события. Это значит, что перед боевым использованием потребуется доработка безопасности и надёжности.