ruwiki-test/README.md

242 lines
6.6 KiB
Markdown
Raw Permalink 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.

# RuWiki -> SchoolNotes
Асинхронная система упрощения статей RuWiki для школьного образования с использованием LLM OpenAI.
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
![Coverage](https://img.shields.io/badge/coverage-68%25-yellow)
## Описание
Система автоматически:
- Загружает статьи из русской Википедии
- Упрощает содержимое для учеников 8-11 классов с помощью OpenAI GPT
- Сохраняет оригинальный и упрощённый текст в SQLite
- Обрабатывает статьи параллельно
## Архитектура
```mermaid
graph TD
A[CLI / AsyncRunner] -->|URLs| B[TaskQueue asyncio_anyio]
B --> C[Worker_N coroutine]
C --> D[RuWikiAdapter]
C --> E[TextSplitter]
C --> F[LLMProvider]
C --> G[WriteQueue]
G --> H[(SQLite 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 # Зависимости
```