main
doc-translator
Система автоматического перевода PDF-документов с китайского на русский с использованием LLM.
Архитектура
Стек:
- Worker: FastAPI + PyMuPDF (обработка PDF)
- LLM: Ollama (DeepSeek)
- Оркестрация: n8n (workflow automation)
- БД: PostgreSQL
- Инфраструктура: Docker Compose
Что реализовано
Backend (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)
- PostgreSQL (порт 5432)
- Ollama (порт 11434)
- Worker API (порт 8000)
- n8n (порт 5678)
Промпты (config/prompts/)
zh_ru_tech.v1- базовый промпт для технической документации- Версионирование через БД для A/B тестирования
Что планируется
Evaluation система (src/evaluation/)
- Автоматическая оценка качества переводов (BLEU, LLM-as-judge)
- Сравнение версий промптов на golden examples
- Метрики и дашборды
Frontend (src/app/)
- Web-интерфейс для загрузки документов
- Мониторинг статуса обработки
- Просмотр результатов
Workflow (docker/n8n/)
- Автоматизация пайплайна: загрузка → обработка → оценка
- Интеграция с внешними системами
- Уведомления о завершении
Дополнительно
- Миграции БД (
migrations/) - Тесты (
tests/) - Утилиты и скрипты (
scripts/,src/utils/)
Быстрый старт
# Запуск инфраструктуры
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
Description
Languages
Python
76.9%
JavaScript
17.5%
Dockerfile
5.6%