17 KiB
17 KiB
🧠 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):
- Zero Daemon (Нулевой оверхед в покое): Никаких висящих в памяти демонов Ollama/vLLM. Инференс вызывается по требованию (
on-demand) через оптимизированный бинарникllama.cpp(llama-cli). - Изоляция CPU (
nice -n 19): Фоновый процесс работает с самым низким системным приоритетом Linux. Читалка, веб-интерфейс и база данных отвечают без задержек даже при 100% нагрузке на ядра процессора. - Ограничение контекста (
-c 4096): Контекст строго ограничен 4096 токенами. KV-кэш занимает не более 200 МБ ОЗУ, полностью исключая риск аварийной нехватки памяти (OOM Killer). - Строгий JSON-контракт: Модель всегда отвечает валидным JSON (через GGUF grammar/schema sampling или строгий системный промпт) для мгновенного парсинга сервером.
🗄️ 2. Схема данных в SQLite (data/notes.db)
-- Квизы и тесты на понимание по главам
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 <cpu_threads>. - Автоматическая выгрузка процесса из ОЗУ сразу после завершения инференса.
- Функция
- Написать асинхронный воркер фоновых задач (
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 МБ).
- Английский (Natural US/UK):
- Время генерации на CPU: ~0.5–1.0 сек на предложение (RTF ~0.2, в 5 раз быстрее реального времени).
- Потребление ОЗУ: ~150–200 МБ только во время синтеза с мгновенной выгрузкой.
- Скомпилированный статический бинарник
- Оффлайн-кэширование аудиофайлов (
data/audio_cache/):- Генерация имени по SHA-256 хешу текста и идентификатора голоса (
data/audio_cache/{hash}.wav). - Повторные запросы одного и того же предложения отдаются мгновенно за 0.05 мс из кэша.
- 0 байт сетевого трафика во внешнюю сеть — полная изоляция и автономность.
- Генерация имени по SHA-256 хешу текста и идентификатора голоса (
- Скрытый режим тестирования (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 критериям:
- Grammar & Syntax (порядок слов, времена, предлоги, артикли).
- Vocabulary Richness (использование синонимов и слов из главы).
- Coherence & Flow (связность предложений, логические связки however, moreover, despite).
- Final Score & Praise (балл 1–5, похвала за удачные фразы, конкретные рекомендации).
Этап 6: Персональный грамматический профиль и подсказки в читалке
- Таблица слабых мест пользователя в SQLite:
- Автоматическая фиксация категорий ошибок (
#articles,#past-tenses,#prepositions,#passive-voice,#conditionals).
- Автоматическая фиксация категорий ошибок (
- Виджет в личном кабинете: «Радар грамматики» (топ-3 тем, в которых чаще всего допускаются ошибки).
- Умная подсветка в читалке:
- Если в тексте книги встречается грамматическая конструкция из «зоны роста» пользователя, читалку можно настроить деликатно подсвечивать её с ненавязчивой подсказкой.
Этап 7: Оффлайн-модуль Мерфи и физическая тетрадь (Murphy Engine & Handwritten Journaling)
- Парсинг и индексация учебников Мерфи в SQLite (
grammar_units):- Извлечение юнитов из Essential Grammar in Use (A1–A2) и English Grammar in Use (B1–B2).
- Хранение названий тем, контрастных пар и примеров в локальной базе.
- Интерактивные микро-уроки (5–7 минут на юнит):
- Ёмкая выжимка теории на один экран (сравнение ситуаций: I do vs I am doing).
- 5 практических упражнений (заполни пропуск, выбери форму) с моментальной проверкой.
- Подробный разбор ошибок на русском языке с отсылкой к правилу.
- Рукописная тетрадь и мышечная память (Handwritten Motor Memory Prompts):
- В конце каждого урока ИИ формирует персонализированное «Задание для бумажной тетради»:
- Золотая формула правила для записи цветной ручкой (например:
did + V1 (без -ed!)). - 2–3 личных примера от руки из собственной жизни (персональный опыт активирует долговременную память гораздо сильнее абстрактных чужих примеров).
- Контрастная пара или мини-схема для зарисовки от руки.
- Золотая формула правила для записи цветной ручкой (например:
- Интерактивный чекбокс:
[✓] Записал от руки в тетрадьдля фиксации физического прогресса. - Аудио-диктант от руки: диктор Piper произносит ключевую фразу урока
\rightarrowстудент записывает её ручкой в тетрадь\rightarrowсверяет с оригиналом.
- В конце каждого урока ИИ формирует персонализированное «Задание для бумажной тетради»: