Files
notes-qpid-pro/README.md
T

220 lines
24 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.
# Study Qpid (study.qpid.pro)
> **Автономный персональный тренажёр и интерактивная языковая среда английского языка.**
> Создан для быстрого и надёжного расширения активного словарного запаса, автоматизации грамматики и беглого чтения технической и художественной литературы с поддержкой локального искусственного интеллекта (Ollama) и локального синтеза речи (Piper TTS) без внешних платных API.
---
## 🎯 Концепция и философия системы
Традиционное изучение языка разбивается о разрозненность: словарь в одном приложении, карточки в другом, книги в третьем, а грамматика в тетрадке.
**Study Qpid** объединяет весь цикл в единый закрытый контур по принципу **«автомата Калашникова»**:
1. **100% автономность и приватность**: веб-сервис развернут в Docker, защищён строгой авторизацией (сессии HttpOnly, хэширование PBKDF2-HMAC-SHA256, rate limiting). Локальный ИИ (Qwen 2.5 3B) и синтез речи (Piper) работают полностью на собственном сервере без передачи данных сторонним компаниям.
2. **Контекстный якорь и лексический подход**: слова изучаются в готовых блоках (*chunks*) и живых предложениях из прочитанных книг и документации.
3. **Многомодальный интервальный тренажер (SRS SM-2)**: 5 различных режимов работы с карточками (3D Flashcards, умная викторина с дистракторами по частям речи, активный ввод Typing, аудио-диктант, аудирование Q&A).
4. **Интерактивная читалка**: мгновенный перевод кликом по слову, захват предложений в карточки в 1 клик, поддержка форматов EPUB, PDF, TXT, Markdown, спецификаций IETF RFC и статей Wikipedia.
5. **Грамматический трек Murphy & CEFR**: 15 базовых юнитов грамматики с формулами, связка с бумажной рабочей тетрадью, 260 интерактивных тестов Cloze Tap и автоматическая отправка ошибок в активную очередь повторений.
6. **Конструктор комплексного урока**: единый сессионный раннер, собирающий ежедневный урок из слов, грамматики, аудирования, чтения и завершающийся педагогическим разбором ошибок от локальной нейросети.
---
## 🚀 Основной реализованный функционал
### 1. 🔍 Контекстный словарь и поиск
* **Локальная словарная база**: более 140 000 словарных статей в SQLite, дополненных морфологическим анализатором (лемматизация инфлексий `starts` → `start`, `studying` → `study`).
* **Детектор фразовых глаголов и идиом**: при поиске слова в контексте предложения система автоматически определяет устойчивые связки (*look forward to*, *run into*, *figure out*) и предлагает сохранить именно целостное выражение.
* **Каскадный перевод**: офлайн-словарь + транскрипция IPA + толкование на английском + русский перевод.
* **Управление базой**: разбивка по коллекциям (*General*, *IT/Tech*, *Phrasal Verbs* и др.), система тегов, быстрый поиск и фильтрация, пакетные операции (перемещение, тегирование, удаление).
### 2. 🧠 Локальный ИИ (Ollama & Qwen 2.5 3B)
* **Контекстный перевод предложений**: перевод предложения с фокусом на точное значение целевого слова в данном контексте через локальную LLM (`qwen2.5:3b`).
* **Кэширование переводов**: все сгенерированные переводы сохраняются в SQLite (`sentence_translations`) с моментальной отдачей при повторных запросах.
* **Педагогический дебрифинг урока**: анализ ошибок сессии, определение паттернов (путаница времен, предлогов), рекомендации и выставление объективной оценки сессии.
* **Отказоустойчивость**: постоянный пул соединений с Keep-Alive (120s) в FastAPI lifespan; при недоступности Ollama система мгновенно переключается на детерминированный математический отчёт без зависаний.
### 3. 🔊 Автономная нейро-озвучка (Piper TTS)
* **Локальный VITS-инференс**: чистый нативный звук дикторов без внешних запросов к облакам (`en_US-lessac`, `ru_RU-dmitri` + поддержка альтернативных дикторов).
* **Проактивное фоновое пред-кэширование**: при добавлении слова в словарь аудиозапись слова и контекста синтезируется сервером в фоне, обеспечивая нулевую задержку при повторении в тренажере.
* **Аудио в читалке**: озвучивание отдельных слов, целых предложений оригинала и русского перевода.
### 4. 🎓 Тренажёр интервальных повторений (SRS SM-2)
* **Алгоритм SuperMemo SM-2**: адаптивный расчёт интервалов (1, 6, $I \times EF$ дней) на основе оценок пользователя (Снова, Трудно, Хорошо, Легко).
* **5 специализированных режимов повторений**:
1. *3D Flashcards* — классические двусторонние карточки с 3D-анимацией переворота.
2. *Smart Quiz* — множественный выбор из 4 вариантов с автоматическим подбором правдоподобных дистракторов из той же части речи.
3. *Active Typing* — активная продукция: печать английского слова по русскому переводу и контексту с пропуском.
4. *Audio Dictation* — аудиотренажёр: прослушивание произношения через Piper TTS и ввод слова на слух.
5. *Listening Comprehension* — интерактивные аудио-сценарии с вопросами на проверку понимания.
* **Smart Daily Mix**: сбалансированная ежедневная тренировка (10 новых слов + 10 плановых повторений + 5 проблемных слов-личей, перемешанных для интерливинга).
* **Аналитика и визуализация**: GitHub-style календарь активности за 180 дней, подсчёт непрерывного стрика, распределение по статусам (New, Learning, Review, Mastered), расчёт Retention Rate и оценка словарного уровня по CEFR.
### 5. 📚 Интерактивная читалка и библиотека
* **Поддержка форматов**: загрузка книг в форматах EPUB, PDF, TXT, Markdown (`.md`).
* **Импорт RFC-спецификаций**: загрузка технических стандартов IETF RFC по номеру или URL с автоматической разбивкой на структурированные главы.
* **Интеграция с Wikipedia**: автономный импорт статей по названию, теме и доступному бюджету времени на чтение.
* **Интерактивный клик-перевод**: каждое слово кликабельно с показом всплывающей карточки (на десктопе — всплывающее окно у курсора, на смартфоне — удобный Bottom Sheet).
* **Непрерывное чтение**: бесконечный скролл с навигационными карточками завершения глав, автоматическое сохранение позиции чтения (`current_chapter`, `current_position`).
* **Типографика и темы**: 6 цветовых схем (Light, Dark, Sepia, Night, Parchment, Hacker), регулировка ширины страницы, межстрочного интервала и шрифтов (Georgia, Inter, JetBrains Mono).
### 6. 🏆 Тесты CEFR (A1–B2) & Автоматическая Gap-ингестия
* **260 интерактивных заданий Cloze Tap**, распределённых по международным уровням владения языком (A1, A2, B1, B2).
* **Автоматическое устранение пробелов (Gap Ingestion)**: любая допущенная ошибка в тесте мгновенно конвертируется в словарную карточку и отправляется в активную очередь SRS со статусом `learning`.
* **Фоновый майнер тестов из книг**: асинхронный фоновый воркер для автоматического извлечения тестовых заданий из загруженных пользователем книг с фильтрацией по целевому уровню CEFR.
### 7. 📖 Грамматический трек Murphy & Тетрадь
* **15 базовых юнитов** классической методики Raymond Murphy (*Essential Grammar in Use*).
* **Структура каждого юнита**:
- Карточка юнита со статусом освоения и баллом.
- Полноэкранный теоретический модуль с формулами образования, русскими объяснениями и маркерами времени.
- 5 интерактивных упражнений Cloze Tap с мгновенной проверкой.
* **Интеграция с бумажным конспектом**: чекбокс ручной фиксации упражнений в физической тетради для задействования моторной памяти.
### 8. ⚡ Конструктор комплексного урока & Сессионный раннер
* **Гибкая структура занятия**: настройка порядка этапов, переключение тумблеров активности, выбор объема слов и упражнений.
* **Готовые пресеты**:
- ⚡ *Утренний экспресс (10 мин)*
- 🎯 *Сбалансированный урок (20 мин)*
- 📖 *Глубокое погружение (30 мин)*
- 🎧 *Аудио + Чтение (15 мин)*
- Возможность сохранения собственных шаблонов в базу SQLite.
* **Умный подбор грамматики**: адаптивный выбор темы грамматики на основе истории ошибок («Самая слабая тема», «Предыдущая тема» или ручной выбор).
* **Сквозной раннер**: бесшовный интерфейс с таймером, прогресс-баром и финальным ИИ-дебрифингом.
---
## 🛠 Техническая архитектура и стек
```
https://study.qpid.pro
│
┌──────────────────▼──────────────────┐
│ Nginx (Host SSL / Reverse Proxy) │
└──────────────────┬──────────────────┘
│ :8002
┌─────────────────────────────────────────▼────────────────────────────────────────┐
│ Docker Container: study-qpid-pro │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │ FastAPI Application (app/main.py) │ │
│ │ • GZipMiddleware (≥1000B) • Security Headers Middleware │ │
│ │ • Persistent Lifespan Pool • Service Worker Static Precache (v6.7) │ │
│ └─────────────────────────────────────┬────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────▼────────────────────────────────────┐ │
│ │ Модульные APIRouters │ │
│ │ • auth.py • cards.py • dictionary.py • srs.py │ │
│ │ • reader.py • cefr.py • grammar.py • lessons.py │ │
│ │ • listening.py • tasks.py • export.py │ │
│ └─────────────────┬───────────────────┬──────────────────┬─────────────────┘ │
│ │ │ │ │
│ ┌─────────────────▼─────────┐ ┌───────▼────────┐ ┌───────▼─────────────────┐ │
│ │ SQLite WAL (data/notes) │ │ Piper TTS │ │ Seed Datasets (JSON) │ │
│ │ • Memory-Mapped I/O │ │ • Offline VITS │ │ • cefr_questions.json │ │
│ │ • Full Schema Integrity │ │ • Zero-Latency │ │ • grammar_units.json │ │
│ │ • Sub-millisecond reads │ │ • Voice Cache │ │ • phrasal_verbs.json │ │
│ └───────────────────────────┘ └────────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────┬────────────────────────────────────────┘
│ http://ollama:11434
┌─────────────────────────────────────────▼────────────────────────────────────────┐
│ Docker Container: study-ollama │
│ • Model: Qwen 2.5 3B Instruct (GGUF) │
│ • Connection Pool with Keep-Alive (120s) │
└──────────────────────────────────────────────────────────────────────────────────┘
```
* **Backend**: Python 3.12, FastAPI, Uvicorn, Pydantic v2.
* **База данных**: SQLite в режиме `WAL` (Write-Ahead Logging) с `mmap_size = 256MB` и индексами по внешним ключам и выражениям.
* **Frontend**: Vanilla ES6+ модули, HTML5 PWA, CSS-переменные (7 предметных таблиц стилей), поддержка offline через Service Worker.
* **AI & TTS**: Ollama (`qwen2.5:3b`), Piper Neural TTS (локальный бинарник).
* **Тестирование**: Pytest + TestClient (44 автоматических интеграционных теста).
---
## 📁 Структура проекта
```
study.qpid.pro/
├── app/
│ ├── main.py # Лаконичная точка входа FastAPI (lifespan, middleware, роутеры)
│ ├── auth.py # Безопасность, хэширование PBKDF2, сессии, rate limiting
│ ├── config.py # Переменные окружения и системные пути
│ ├── database.py # Инициализация SQLite WAL, индексы, миграции
│ ├── dictionary.py # Поиск в офлайн-словаре, лемматизация, каскадные запросы
│ ├── ai.py # Интеграция с Ollama (Keep-Alive пул, промпты, дебрифинг)
│ ├── tts.py # Синтез речи Piper TTS и управление кэшем аудио
│ ├── srs.py # SM-2 интервалы, викторины, аналитика, тепловая карта
│ ├── reader.py # Парсеры EPUB, PDF, TXT, Markdown, RFC и Wikipedia
│ ├── cefr.py # Уровневое тестирование A1–B2 и gap-ингестия
│ ├── grammar.py # Движок Murphy Grammar и журнал конспектов
│ ├── lessons.py # Конструктор уроков, пресеты, история сессий
│ ├── listening.py # Сценарии аудирования и оценка ответов
│ ├── miner.py # Фоновый майнинг предложений из литературы
│ ├── tasks.py # Управление фоновыми задачами SQLite
│ ├── export.py # Экспорт базы (CSV, JSON, Anki, Markdown)
│ ├── routers/ # Модульные роутеры FastAPI (11 файлов)
│ └── static/ # Статика веб-приложения
│ ├── index.html # Одностраничное приложение (PWA Shell)
│ ├── sw.js # Service Worker (кэширование v6.7)
│ ├── manifest.json # PWA-манифест
│ ├── css/ # Модульная таблица стилей
│ │ ├── style.css # Мастер-файл со структурой и @import
│ │ ├── base.css # Токены, темы, сброс, safe-areas
│ │ ├── components.css # Навбар, меню, кнопки, модалки, таб-бар
│ │ ├── dictionary.css # Поиск, карточки слов, коллекции, теги
│ │ ├── srs.css # Карточки 3D, квизы, ввод, аналитика
│ │ ├── reader.css # Читалка, темы оформления, Wikipedia
│ │ ├── grammar_cefr.css # CEFR и юниты Murphy
│ │ └── lesson.css # Конфигуратор и раннер уроков
│ └── js/ # ES6 модули фронтенда
│ ├── app.js # Точка входа SPA, роутинг, хоткеи
│ └── modules/ # Модули логики (ui, api, dictionary, srs, reader, cefr, grammar, lesson)
├── data/
│ ├── notes.db # Основная база данных SQLite
│ ├── offline_dict.tsv.gz # Локальный словарь (140k+ записей)
│ ├── audio_cache/ # Кэш предсинтезированных WAV-файлов
│ └── seeds/ # Кураторские JSON-датасеты (CEFR, Murphy, Phrasal, Articles)
├── scripts/
│ ├── deploy_beta.sh # Развертывание бета-ветки в 1 клик
│ ├── rollback_to_main.sh # Мгновенный откат на стабильный main
│ └── build_offline_dict.py # Сборщик офлайн-словаря
├── tests/
│ └── test_api.py # Набор интеграционных тестов (44 теста)
├── docker-compose.yml # Декларация контейнеров study-web и ollama
└── Dockerfile # Образ веб-приложения на Python 3.12-slim
```
---
## 🚀 Развёртывание и запуск
### Запуск через Docker Compose (Рекомендуемый)
```bash
# Клонирование репозитория
git clone https://ai.qpid.pro/gitea/Antigravity/notes-qpid-pro.git
cd notes-qpid-pro
# Запуск связки веб-сервера и локальной Ollama
DOCKER_HOST=tcp://127.0.0.1:2375 docker compose up -d
# Запуск тестов внутри контейнера
DOCKER_HOST=tcp://127.0.0.1:2375 docker exec -i -e PYTHONPATH=. study-qpid-pro pytest tests/test_api.py
```
### Управление ветками и откат:
```bash
# Быстрый переход на бета-версию:
./scripts/deploy_beta.sh
# Мгновенный откат на стабильную ветку main:
./scripts/rollback_to_main.sh
```
---
## 📄 Лицензия и статус проекта
* Проект разрабатывается в активной фазе для повседневного практического освоения языка.
* 100% открытый исходный код без проприетарных платных облачных зависимостей.