Add readme
This commit is contained in:
parent
fef5023d74
commit
debb371c69
|
@ -0,0 +1,239 @@
|
|||
# RuWiki -> SchoolNotes
|
||||
|
||||
Асинхронная система упрощения статей RuWiki для школьного образования с использованием LLM OpenAI.
|
||||
|
||||
## Описание
|
||||
|
||||
Система автоматически:
|
||||
- Загружает статьи из русской Википедии
|
||||
- Упрощает содержимое для учеников 8-11 классов с помощью OpenAI GPT
|
||||
- Сохраняет оригинальный и упрощённый текст в SQLite
|
||||
- Обрабатывает статьи параллельно
|
||||
|
||||
## Архитектура
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[CLI / AsyncRunner] -->|URLs| B[TaskQueue<br>(asyncio + anyio)]
|
||||
B --> C[Worker N<br>(coroutine)]
|
||||
C --> D[RuWikiAdapter]
|
||||
C --> E[TextSplitter]
|
||||
C --> F[LLMProvider]
|
||||
C --> G[WriteQueue]
|
||||
G --> H[(SQLite<br>aiosqlite)]
|
||||
```
|
||||
|
||||
## Установка
|
||||
|
||||
### Требования
|
||||
- Python ≥ 3.10
|
||||
- OpenAI API ключ
|
||||
|
||||
### Установка зависимостей
|
||||
|
||||
```bash
|
||||
# Создание виртуального окружения
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # Linux/Mac
|
||||
# или
|
||||
.venv\Scripts\activate # Windows
|
||||
|
||||
# Установка зависимостей
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Для разработки
|
||||
pip install -r requirements-dev.txt
|
||||
```
|
||||
|
||||
### Конфигурация
|
||||
|
||||
1. Скопируйте `env_example.txt` в `.env`:
|
||||
```bash
|
||||
cp env_example.txt .env
|
||||
```
|
||||
|
||||
2. Настройте конфигурацию в env:
|
||||
```env
|
||||
OPENAI_API_KEY=your_openai_api_key_here
|
||||
...
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
### Основные команды
|
||||
|
||||
```bash
|
||||
# Обработка статей из файла
|
||||
python -m src.cli process input.txt
|
||||
|
||||
# Принудительная обработка (повторная)
|
||||
python -m src.cli process input.txt --force
|
||||
|
||||
# Ограничение количества статей
|
||||
python -m src.cli process input.txt --max-articles 10
|
||||
|
||||
# Настройка количества workers
|
||||
python -m src.cli process input.txt --max-workers 5
|
||||
|
||||
# Проверка здоровья системы
|
||||
python -m src.cli health
|
||||
|
||||
# Просмотр статей в БД
|
||||
python -m src.cli list-articles --limit 20
|
||||
|
||||
# Статистика по файлу с URL
|
||||
python -m src.cli stats input.txt
|
||||
```
|
||||
|
||||
### Формат файла с URL
|
||||
|
||||
```
|
||||
# input.txt
|
||||
https://ru.ruwiki.ru/wiki/Изотопы
|
||||
https://ru.ruwiki.ru/wiki/Вещественное_число
|
||||
https://ru.ruwiki.ru/wiki/Митоз
|
||||
```
|
||||
|
||||
### Примеры
|
||||
|
||||
```bash
|
||||
# Обработка тестовых статей
|
||||
python -m src.cli process input.txt --max-articles 3 --max-workers 2
|
||||
|
||||
# Вывод результатов в JSON
|
||||
python -m src.cli list-articles --format json --status completed
|
||||
|
||||
# Настройка логирования
|
||||
python -m src.cli --log-level DEBUG --log-format json process input.txt
|
||||
```
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Основные параметры в `.env`:
|
||||
|
||||
```env
|
||||
# OpenAI
|
||||
OPENAI_API_KEY=your_openai_api_key_here
|
||||
OPENAI_MODEL=gpt-4o
|
||||
OPENAI_TEMPERATURE=0.0
|
||||
OPENAI_PROXY_URL='socks5h://37.18.73.60:5566' # socks5 recommended
|
||||
|
||||
# База данных
|
||||
DB_PATH=./data/wiki.db
|
||||
|
||||
# Производительность
|
||||
MAX_CONCURRENT_LLM=5
|
||||
OPENAI_RPM=200
|
||||
MAX_CONCURRENT_WIKI=10
|
||||
|
||||
# Логирование
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FORMAT=json
|
||||
|
||||
# Обработка текста
|
||||
CHUNK_SIZE=2000
|
||||
CHUNK_OVERLAP=200
|
||||
|
||||
# Надёжность
|
||||
MAX_RETRIES=3
|
||||
RETRY_DELAY=1.0
|
||||
CIRCUIT_FAILURE_THRESHOLD=5
|
||||
CIRCUIT_RECOVERY_TIMEOUT=60
|
||||
```
|
||||
|
||||
## 📊 Мониторинг
|
||||
|
||||
### Логи
|
||||
```bash
|
||||
# Структурированные логи в JSON
|
||||
python -m src.cli --log-format json process input.txt
|
||||
|
||||
# Отладочные логи
|
||||
python -m src.cli --log-level DEBUG process input.txt
|
||||
```
|
||||
|
||||
### Метрики
|
||||
- Скорость обработки: статей/минуту
|
||||
- Процент успеха
|
||||
- Среднее время обработки
|
||||
- Использование токенов
|
||||
|
||||
### Health Check
|
||||
```bash
|
||||
python -m src.cli health
|
||||
```
|
||||
|
||||
## Тестирование
|
||||
|
||||
```bash
|
||||
# Все тесты
|
||||
python -m pytest
|
||||
|
||||
# С покрытием
|
||||
python -m pytest --cov=src --cov-report=html
|
||||
|
||||
# Без покрытия (быстрее)
|
||||
python -m pytest --no-cov
|
||||
|
||||
# Только unit тесты
|
||||
python -m pytest tests/test_models.py tests/test_adapters.py
|
||||
|
||||
# Интеграционные тесты
|
||||
python -m pytest tests/test_integration.py
|
||||
|
||||
# Конкретный тест
|
||||
python -m pytest tests/test_adapters.py::TestLLMProviderAdapter::test_simplify_text_success -v
|
||||
|
||||
```
|
||||
|
||||
### Статус тестов
|
||||
- ✅ **71 тест** - все проходят
|
||||
- ✅ **Unit тесты** - адаптеры, модели, сервисы
|
||||
- ✅ **Интеграционные тесты** - база данных, файловые операции
|
||||
- ✅ **Системные тесты** - полный цикл обработки
|
||||
|
||||
## Примеры результатов
|
||||
|
||||
### Исходная статья (фрагмент)
|
||||
```wiki
|
||||
'''Изотопы''' (от {{lang-grc|ἴσος}} «равный» и {{lang-grc|τόπος}} «место») — разновидности атомов химического элемента с одинаковым количеством протонов, но различным количеством нейтронов в ядре...
|
||||
```
|
||||
|
||||
### Упрощённая версия
|
||||
```wiki
|
||||
'''Изотопы''' — это разные виды атомов одного элемента.
|
||||
|
||||
== Что такое изотопы ==
|
||||
У атомов одного элемента всегда одинаковое число протонов. Но число нейтронов может быть разным. Атомы с разным числом нейтронов называются изотопами...
|
||||
```
|
||||
|
||||
## Разработка
|
||||
|
||||
### Качество кода
|
||||
```bash
|
||||
# Форматирование
|
||||
black src/ tests/
|
||||
|
||||
# Проверка стиля
|
||||
ruff check src/
|
||||
|
||||
# Типы
|
||||
mypy src/
|
||||
|
||||
# Безопасность
|
||||
bandit -r src/
|
||||
```
|
||||
|
||||
### Структура проекта
|
||||
```
|
||||
ruwiki_test/
|
||||
├── src/
|
||||
│ ├── adapters/ # Адаптеры для внешних API
|
||||
│ ├── models/ # Модели данных
|
||||
│ ├── services/ # Бизнес-логика
|
||||
│ ├── cli.py # CLI интерфейс
|
||||
│ └── runner.py # Основной runner
|
||||
├── tests/ # Тесты
|
||||
├── data/ # База данных
|
||||
└── requirements.txt # Зависимости
|
||||
```
|
Loading…
Reference in New Issue