docs: add AI_TODO.md with dual-model architecture roadmap
This commit is contained in:
1 parent
9a5d588125
commit
84bbe2031d
2 files changed
+168
No files matched your search
+159
@@ -0,0 +1,159 @@
|
||||
# 🧠 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 тем, в которых чаще всего допускаются ошибки).
|
||||
- [ ] Умная подсветка в читалке:
|
||||
- Если в тексте книги встречается грамматическая конструкция из «зоны роста» пользователя, читалку можно настроить деликатно подсвечивать её с ненавязчивой подсказкой.
|
||||
Reference in new issue
Block a user