# 🧠 AI Roadmap & TODO: Локальный ИИ-учитель и генератор тестов > **Архитектурный манифест**: Zero Daemon, On-Demand CPU-инференс, строгий бюджет RAM (< 4 ГБ), Dual-Model маршрутизация (Fast 3B & Deep 7B), 0 постоянных фоновых демонов. --- ## 🏛️ 1. Архитектурная концепция: Двухмодельная стратегия (Dual-Model) Так как на диске свободно более **100 ГБ**, а оперативная память ограничена **10 ГБ** (доступно ~7.8 ГБ), хранение двух моделей на накопителе занимает всего **~6 ГБ (< 6% диска)**. При этом модели **никогда не загружаются в ОЗУ одновременно**. ``` [ Задача от пользователя ] │ ┌─────────────────────────┴─────────────────────────┐ ▼ ▼ ┌───────────────────────────────┐ ┌───────────────────────────────┐ │ FAST TIER (3B Model) │ │ DEEP TIER (7B Model) │ │ Llama-3.2-3B-Instruct (GGUF) │ │ Qwen-2.5-7B-Instruct (GGUF) │ ├───────────────────────────────┤ ├───────────────────────────────┤ │ • RAM: ~2.2 ГБ │ │ • RAM: ~3.6 ГБ │ │ • Диск: ~2.2 ГБ │ │ • Диск: ~3.8 ГБ │ │ • Время на CPU: 15–40 сек │ │ • Время на CPU: 1.5–3.5 мин │ │ • Назначение: │ │ • Назначение: │ │ - Тесты по главам (MCQ) │ │ - Грамматический разбор │ │ - Вопросы на понимание │ │ - Оценка эссе и пересказа │ │ - Материалы для аудирования │ │ - Объяснение правил на рус. │ │ - True / False / Not Given │ │ - Разбор "обратного перевода"│ └───────────────────────────────┘ └───────────────────────────────┘ │ │ └─────────────────────────┬─────────────────────────┘ ▼ [ Выгрузка из ОЗУ сразу после ответа ] (В памяти остается только веб-сервер) ``` ### Ключевые правила надежности (Ponytail AI Rules): 1. **Zero Daemon (Нулевой оверхед в покое)**: Никаких висящих в памяти демонов Ollama/vLLM. Инференс вызывается по требованию (`on-demand`) через оптимизированный бинарник `llama.cpp` (`llama-cli`). 2. **Изоляция CPU (`nice -n 19`)**: Фоновый процесс работает с самым низким системным приоритетом Linux. Читалка, веб-интерфейс и база данных отвечают без задержек даже при 100% нагрузке на ядра процессора. 3. **Ограничение контекста (`-c 4096`)**: Контекст строго ограничен 4096 токенами. KV-кэш занимает не более 200 МБ ОЗУ, полностью исключая риск аварийной нехватки памяти (OOM Killer). 4. **Строгий JSON-контракт**: Модель всегда отвечает валидным JSON (через GGUF grammar/schema sampling или строгий системный промпт) для мгновенного парсинга сервером. --- ## 🗄️ 2. Схема данных в SQLite (`data/notes.db`) ```sql -- Квизы и тесты на понимание по главам CREATE TABLE IF NOT EXISTS chapter_quizzes ( id INTEGER PRIMARY KEY AUTOINCREMENT, book_id INTEGER NOT NULL, chapter_index INTEGER NOT NULL, model_used TEXT NOT NULL, -- 'llama-3.2-3b' status TEXT DEFAULT 'pending', -- 'pending', 'processing', 'ready', 'failed' questions_json TEXT DEFAULT '[]', -- Массив вопросов, вариантов, цитат и объяснений created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE ); -- Проверки письменных работ, пересказов и обратного перевода CREATE TABLE IF NOT EXISTS grammar_reviews ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, task_type TEXT NOT NULL, -- 'reverse_translation', 'retell', 'free_writing' book_id INTEGER, chapter_index INTEGER, prompt_text TEXT NOT NULL, -- Исходный вопрос или русский текст для перевода original_reference TEXT, -- Оригинал из книги (для обратного перевода) user_submission TEXT NOT NULL, -- Текст, введенный студентом score INTEGER, -- Оценка от 1 до 5 (или CEFR A1-C2) corrected_text TEXT, -- Исправленный идеальный вариант feedback_json TEXT DEFAULT '{}', -- Ошибки, правила, похвала, зоны роста created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -- Индивидуальный радар грамматических слабостей CREATE TABLE IF NOT EXISTS user_grammar_weaknesses ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, tag TEXT NOT NULL, -- 'articles', 'past-tenses', 'prepositions', etc. rule_name TEXT NOT NULL, mistakes_count INTEGER DEFAULT 1, last_mistake_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(user_id, tag, rule_name), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); ``` --- ## 📋 3. Пошаговый план внедрения (Roadmap) ### Этап 1: Инфраструктура легковесного инференса - [ ] Скомпилировать или установить легковесный бинарник `llama-cli` (без лишних зависимостей, с поддержкой AVX2 процессора). - [ ] Создать изолированную директорию `models/` для GGUF-файлов: - `models/llama-3.2-3b-instruct-q4_k_m.gguf` (~2.2 ГБ). - `models/qwen-2.5-7b-instruct-q3_k_m.gguf` (~3.8 ГБ). - [ ] Написать pure-Python обёртку `app/ai/runner.py`: - Функция `run_model(model_tier: str, prompt: str, schema: dict = None)`. - Запуск через `subprocess.Popen` с аргументами `nice -n 19`, `-c 4096`, `-t `. - Автоматическая выгрузка процесса из ОЗУ сразу после завершения инференса. - [ ] Написать асинхронный воркер фоновых задач (`app/ai/worker.py`) на базе SQLite-очереди задач. --- ### Этап 2: Квизы и тесты по главам (Fast Tier — Llama 3.2 3B) - [ ] **Генератор вопросов по главе**: - Извлечение текста текущей главы книги из читалки. - Формирование 5–8 контрольных вопросов: - 3 вопроса **Multiple Choice (MCQ)** на понимание ключевых событий. - 2 вопроса **True / False / Not Given** по методике IELTS/TOEFL. - 1 вопрос на значение редкого слова или термина в контексте абзаца. - [ ] **Интеграция в интерфейс читалки**: - Кнопка в конце главы: `🧠 Проверить понимание главы`. - Модальное окно или встроенный блок прохождения теста с мгновенным подсвечиванием правильных/неправильных ответов. - Сохранение результата прохождения в профиль книги. --- ### Этап 3: 100% Оффлайн-озвучка и Аудирование (Piper TTS / Neural VITS) - [ ] **Интеграция легковесного автономного движка Piper TTS**: - Скомпилированный статический бинарник `piper` (< 15 МБ, чистый C++/ONNX, без зависимостей). - Загрузка компактных оффлайн-моделей голосов в `models/voices/` (суммарно ~130 МБ): - Английский (Natural US/UK): `en_US-lessac-medium.onnx` (~63 МБ). - Русский (Естественный диктор): `ru_RU-dmitri-medium.onnx` (~65 МБ). - Время генерации на CPU: ~0.5–1.0 сек на предложение (RTF ~0.2, в 5 раз быстрее реального времени). - Потребление ОЗУ: ~150–200 МБ только во время синтеза с мгновенной выгрузкой. - [ ] **Оффлайн-кэширование аудиофайлов (`data/audio_cache/`)**: - Генерация имени по SHA-256 хешу текста и идентификатора голоса (`data/audio_cache/{hash}.wav`). - Повторные запросы одного и того же предложения отдаются мгновенно за 0.05 мс из кэша. - 0 байт сетевого трафика во внешнюю сеть — полная изоляция и автономность. - [ ] **Скрытый режим тестирования (Listening Comprehension)**: - Вопрос и варианты ответов озвучиваются нейросетью Piper. - Текст вопроса скрыт шторкой или кнопкой «Показать текст» (тренировка восприятия беглой речи на слух). - [ ] **Аудио-диктант по ключевым предложениям книги**: - Модель выбирает 3 ярких и грамматически богатых предложения из главы. - Piper озвучивает предложение живым голосом носителя, пользователь вводит его на слух. - Подсветка пропущенных предлогов, окончаний и артиклей при проверке. --- ### Этап 4: Тренажёр «Обратный перевод» (Reverse Translation — Deep Tier Qwen 2.5 7B) - [ ] Извлечение оригинального предложения автора из книги. - [ ] Формирование качественного русского перевода. - [ ] Задание пользователю: *«Напишите перевод на английский язык по памяти»*. - [ ] **Интеллектуальная оценка модели 7B**: - Сравнение с авторским вариантом: - Выделение грубых ошибок (грамматика, времена, согласование). - Выделение стилистических альтернатив (автор выразился идиоматичнее, но вариант студента тоже допустим). - Объяснение разницы на понятном русском языке. --- ### Этап 5: ИИ-учитель свободной речи и пересказа (Retell & Free Writing) - [ ] Поле свободного ответа на вопрос по главе книги (до 200–300 слов). - [ ] Поддержка голосового ввода через нативный Web Speech API (`webkitSpeechRecognition`). - [ ] **Комплексный фидбек по 4 критериям**: 1. *Grammar & Syntax* (порядок слов, времена, предлоги, артикли). 2. *Vocabulary Richness* (использование синонимов и слов из главы). 3. *Coherence & Flow* (связность предложений, логические связки *however, moreover, despite*). 4. *Final Score & Praise* (балл 1–5, похвала за удачные фразы, конкретные рекомендации). --- ### Этап 6: Персональный грамматический профиль и подсказки в читалке - [ ] Таблица слабых мест пользователя в SQLite: - Автоматическая фиксация категорий ошибок (`#articles`, `#past-tenses`, `#prepositions`, `#passive-voice`, `#conditionals`). - [ ] Виджет в личном кабинете: **«Радар грамматики»** (топ-3 тем, в которых чаще всего допускаются ошибки). - [ ] Умная подсветка в читалке: - Если в тексте книги встречается грамматическая конструкция из «зоны роста» пользователя, читалку можно настроить деликатно подсвечивать её с ненавязчивой подсказкой.