Контекст
Школьникам и студентам нужен ассистент, который генерирует лекции, домашки, эссе и помогает в подготовке к экзаменам прямо в Telegram. У бота нет графического UI — всё взаимодействие в чате, поэтому любая правка текста кнопки или промпта без админки означала бы релиз. Требовался полный продукт: бот, AI-пайплайн генерации контента, выдача в PDF и control-plane для админов.
Решение
Мы сделали проект целиком. Бот работает в Telegram, ведёт пользователя по сценариям регистрации, профиля, подписки и AI-операций. AI-пайплайн на Spring AI генерирует лекции, домашки, эссе и подготовку к экзаменам через OpenAI, считает расход токенов и стоит на учёте операций. PDF-рендер на Apache pdfbox + jlatexmath отдаёт результат в файле с рукописными шрифтами и поддержкой формул. Админка даёт control-plane: все user-facing строки бота вынесены в коллекцию BotMessage с категориями (Общее / Регистрация / Профиль / Подписка / Лекции / Подготовка к экзамену / …) — тексты, эмодзи, плейсхолдеры и прикреплённые фото редактируются админом без релиза. Аналогично — тарифы, промпты AI-операций и модели с температурой и стоимостью points.
Стек и архитектура
- Backend: Spring Boot, Spring AI (OpenAI: gpt-4o / gpt-4-turbo / gpt-3.5-turbo, embeddings), MongoDB, pengrad Telegram Bot API.
- PDF: Apache pdfbox + jlatexmath для формул и handwritten-шрифтов.
- Admin frontend: Next.js 16 (App Router), отдельная SPA с разделами
messages/plans/prompts/models/users/fonts/tokens/broadcast/generation-actions. - Аналитика: учёт расхода токенов по операциям, USD-ценообразование per MTok.
Роль и результат
Весь проект сделали мы — от Telegram-бота и AI-пайплайна до PDF-генерации и админки live-редактирования. Тестами покрыта доменная логика и BotMessageService, история изменений ключей фиксируется в коллекции и видна в админке. Заказчик получил образовательный продукт «под ключ», в котором контент и тарификацию можно менять без релизов.