# 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`