97 lines
4.0 KiB
Markdown
97 lines
4.0 KiB
Markdown
# doc-translator
|
||
|
||
Система автоматического перевода PDF-документов с китайского на русский с использованием LLM.
|
||
|
||
## Архитектура
|
||
|
||
**Стек:**
|
||
- **Worker**: FastAPI + PyMuPDF (обработка PDF)
|
||
- **LLM**: Ollama (DeepSeek)
|
||
- **Оркестрация**: n8n (workflow automation)
|
||
- **БД**: PostgreSQL
|
||
- **Инфраструктура**: Docker Compose
|
||
|
||
## Что реализовано
|
||
|
||
### Backend ([`src/worker/app.py`](src/worker/app.py))
|
||
- Извлечение текста из PDF по блокам с координатами
|
||
- Перевод текстовых сегментов через LLM
|
||
- Сборка переведённого PDF с сохранением структуры
|
||
- API endpoint `/process-document` для обработки документов
|
||
|
||
### База данных
|
||
- **documents** - метаданные загруженных файлов, статусы обработки
|
||
- **translations** - история переводов с метриками
|
||
- **prompts** - версионирование промптов для LLM
|
||
- **golden_examples** - эталонные переводы для оценки качества
|
||
- **prompt_runs** - результаты A/B тестирования промптов
|
||
|
||
### Инфраструктура ([`docker/docker-compose.yml`](docker/docker-compose.yml))
|
||
- PostgreSQL (порт 5432)
|
||
- Ollama (порт 11434)
|
||
- Worker API (порт 8000)
|
||
- n8n (порт 5678)
|
||
|
||
### Промпты ([`config/prompts/`](config/prompts/))
|
||
- `zh_ru_tech.v1` - базовый промпт для технической документации
|
||
- Версионирование через БД для A/B тестирования
|
||
|
||
## Что планируется
|
||
|
||
### Evaluation система ([`src/evaluation/`](src/evaluation/))
|
||
- Автоматическая оценка качества переводов (BLEU, LLM-as-judge)
|
||
- Сравнение версий промптов на golden examples
|
||
- Метрики и дашборды
|
||
|
||
### Frontend ([`src/app/`](src/app/))
|
||
- Web-интерфейс для загрузки документов
|
||
- Мониторинг статуса обработки
|
||
- Просмотр результатов
|
||
|
||
### Workflow ([`docker/n8n/`](docker/n8n/))
|
||
- Автоматизация пайплайна: загрузка → обработка → оценка
|
||
- Интеграция с внешними системами
|
||
- Уведомления о завершении
|
||
|
||
### Дополнительно
|
||
- Миграции БД ([`migrations/`](migrations/))
|
||
- Тесты ([`tests/`](tests/))
|
||
- Утилиты и скрипты ([`scripts/`](scripts/), [`src/utils/`](src/utils/))
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
# Запуск инфраструктуры
|
||
cd docker
|
||
docker-compose up -d
|
||
|
||
# Инициализация БД
|
||
docker exec -i doc_translator_db psql -U doc_user -d doc_translator < db/init.sql
|
||
docker exec -i doc_translator_db psql -U doc_user -d doc_translator < db/prompts.sql
|
||
docker exec -i doc_translator_db psql -U doc_user -d doc_translator < db/documents.sql
|
||
|
||
# Загрузка модели в Ollama
|
||
docker exec -it doc_translator_ollama ollama pull deepseek-r1:1.5b
|
||
|
||
# Обработка документа
|
||
curl -X POST http://localhost:8000/process-document \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"document_id": 1, "original_path": "/data/input/document.pdf"}'
|
||
```
|
||
|
||
## Структура данных
|
||
|
||
```
|
||
data/
|
||
├── input/ # Исходные PDF
|
||
├── output/ # Переведённые PDF
|
||
└── samples/ # Тестовые примеры
|
||
```
|
||
|
||
## Технические детали
|
||
|
||
- Извлечение текста: PyMuPDF `get_text("blocks")` с bbox
|
||
- Перевод: Ollama API (TODO: интеграция DeepSeek)
|
||
- Сборка PDF: наложение переведённого текста на исходные координаты
|
||
- Версионирование промптов: таблица `prompts` с флагом `is_active`
|