Очередь переводов: Система пакетной обработки
Эта статья объясняет, как мы ставим в очередь и пакетно обрабатываем переводы для оптимизации использования AI API.
Проблема: Перевод по требованию обходится дорого
Перевод контента по требованию имеет проблемы:
-
Медленно: Каждый перевод занимает 1-2 секунды
-
Дорого: Стоимость API за каждый запрос
-
Избыточно: Один и тот же текст переводится несколько раз
-
Блокирует: Пользователь ждёт перевода
Нам нужен лучший подход.
Решение: Очередь и пакетная обработка
Очередь: Собираем запросы на перевод
Пакет: Обрабатываем несколько переводов вместе
Кэш: Сохраняем результаты для повторного использования
Расписание: Обрабатываем очередь периодически (не в реальном времени)
Структура очереди
Файл очереди
Расположение: JSON-файл на диске
Формат: Массив запросов на перевод
Поля:
-
text: Английский текст для перевода -
target_lang: Код языка (hi, de, fr и т.д.) -
context: Где появляется текст (product, query, article) -
priority: Высокий/обычный/низкий
Добавление в очередь
Когда перевод отсутствует:
queue_translation(text, target_lang, context="product")
Дедупликация: Проверяем, не стоит ли уже в очереди
Валидация: Отклоняем недопустимые значения
Пакетная обработка
Скрипт
Расположение: scripts/web/process_translation_queue.py
Расписание: Запускается каждые 6 часов через cron
Lock-файл: Предотвращает параллельные запуски
Процесс обработки
1. Загрузка очереди: Читаем все ожидающие запросы
2. Группировка по языку: Объединяем запросы на одном языке
3. Дедупликация: Удаляем дубликаты внутри пакета
4. Проверка кэша: Пропускаем уже переведённые тексты
5. Перевод пакета: Отправляем в DeepSeek API
6. Разбор результатов: Извлекаем переводы из ответа
7. Сохранение в кэш: Сохраняем в таблицы фраз
8. Очистка очереди: Удаляем обработанные запросы
Пакетный перевод
Вызов API
Модель: DeepSeek-V3 (через Together.ai)
Системный промпт: Кэшируется (одинаков для всех пакетов на языке)
Пользовательский промпт: Переменный (зависит от пакета)
Формат: Нумерованный список
Пример:
Translate these 10 texts:
1. Mini PC
2. Thin Client
3. Compact Desktop
...
Ответ:
1. मिनी पीसी
2. थिन क्लाइंट
3. कॉम्पैक्ट डेस्कटॉप
...
Разбор
Извлекаем переводы по номеру строки:
-
Удаляем числовой префикс (
1.,2.и т.д.) -
Сопоставляем с исходными текстами по позиции
-
Проверяем совпадение количества
Обработка ошибок
Сбой API: Повтор с резервным API
Сбой разбора: Возвращаем исходные тексты
Частичный успех: Сохраняем успешные переводы, возвращаем неудачные в очередь
Стратегия кэширования
Таблицы фраз
Расположение: JSON-файлы по языкам
Формат: {"English": "Translation"}
Загрузка: Загружается один раз при запуске
Преимущество: Быстрый поиск, без вызовов API
Доля попаданий в кэш
Первый запуск: Низкая (всё новое)
Последующие запуски: Высокая (большинство текстов в кэше)
Преимущество: Снижение затрат на API
Правила сохранения
При переводе мы сохраняем:
Названия брендов: Thinvent®, Intel®, AMD®
HTML-теги: <p>, <br>, <strong>
URL-адреса: https://www.thinvent.in
SKU: Treo-N100-8-256
Числа: 8GB, 256GB, 4 cores
Реализация: Regex-шаблоны в системном промпте
Определение языка
Перед переводом проверяем, не переведено ли уже:
Метод: Анализ набора символов
Хинди: Письменность деванагари
Китайский: Символы CJK
Арабский: Арабская письменность
Преимущество: Пропуск ненужных переводов
Обработка приоритетов
Высокий приоритет: Названия продуктов, характеристики (обрабатываются первыми)
Обычный приоритет: Описания, статьи (обрабатываются вторыми)
Низкий приоритет: Старый контент, редко просматриваемый (обрабатывается последним)
Преимущество: Важный контент переводится первым
Планирование
Задание Cron
Частота: Каждые 6 часов
Команда: python3 scripts/web/process_translation_queue.py
Lock-файл: /tmp/process_translation_queue.lock
Преимущество: Автоматическая обработка, без ручного вмешательства
Еженедельные задачи
Статьи: Переводим новые статьи еженедельно
Строки Babel: Обновляем переводы шаблонов еженедельно
Скрипт: scripts/web/translate_articles_weekly.sh
Мониторинг
Размер очереди
Отслеживаем ожидающие запросы:
-
Всего запросов
-
Запросов на язык
-
Возраст самого старого запроса
Оповещение: Если очередь становится слишком большой
Статистика переводов
Отслеживаем обработку:
-
Переводов за пакет
-
Процент успешных вызовов API
-
Доля попаданий в кэш
-
Время обработки
Отслеживание затрат
Мониторим использование API:
-
Запросов в день
-
Токенов за запрос
-
Стоимость по языкам
Ссылки
Связанные статьи
-
Система переводов - Гибрид трёх технологий
-
AI-генерация контента - Интеграция с DeepSeek
-
Определение языка - Языковые предпочтения пользователя
Итог
Очередь переводов обеспечивает эффективную пакетную обработку:
Очередь:
-
Сбор запросов на перевод
-
Дедупликация внутри пакета
-
Обработка приоритетов
-
Валидация и фильтрация
Пакетная обработка:
-
Группировка по языку
-
Отправка в DeepSeek API
-
Разбор нумерованных ответов
-
Сохранение в таблицы фраз
Кэширование:
-
Проверка кэша перед переводом
-
Высокая доля попаданий в кэш
-
Снижение затрат на API
Планирование:
-
Каждые 6 часов через cron
-
Lock-файл предотвращает параллельные запуски
-
Еженедельные переводы статей
Сохранение:
-
Названия брендов
-
HTML-теги
-
URL-адреса и SKU
Этот подход снижает затраты на API и повышает качество переводов за счёт пакетной обработки и кэширования.