Files
notes-qpid-pro/AI_TODO.md
T

160 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧠 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 <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: Режим «Аудирование на слух» (Listening & Dictation)
- [ ] **Скрытый режим тестирования**:
- Вопрос и варианты ответов озвучиваются нативно через браузерный `window.speechSynthesis` (0 сетевых запросов).
- Текст вопроса скрыт шторкой или кнопкой «Показать текст» (позволяет тренировать восприятие беглой английской речи на слух).
- [ ] **Аудио-диктант по ключевым предложениям**:
- Модель выбирает 3 ярких и грамматически богатых предложения из главы.
- Браузер диктует предложение, пользователь вводит его на слух.
- Сравнение ввода со сгенерированным оригиналом (подсветка пропущенных предлогов и окончаний).
---
### Этап 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 тем, в которых чаще всего допускаются ошибки).
- [ ] Умная подсветка в читалке:
- Если в тексте книги встречается грамматическая конструкция из «зоны роста» пользователя, читалку можно настроить деликатно подсвечивать её с ненавязчивой подсказкой.