Очередь переводов: Система пакетной обработки

Эта статья объясняет, как мы ставим в очередь и пакетно обрабатываем переводы для оптимизации использования 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:

  • Запросов в день

  • Токенов за запрос

  • Стоимость по языкам

Ссылки

Связанные статьи

Итог

Очередь переводов обеспечивает эффективную пакетную обработку:

Очередь:

  • Сбор запросов на перевод

  • Дедупликация внутри пакета

  • Обработка приоритетов

  • Валидация и фильтрация

Пакетная обработка:

  • Группировка по языку

  • Отправка в DeepSeek API

  • Разбор нумерованных ответов

  • Сохранение в таблицы фраз

Кэширование:

  • Проверка кэша перед переводом

  • Высокая доля попаданий в кэш

  • Снижение затрат на API

Планирование:

  • Каждые 6 часов через cron

  • Lock-файл предотвращает параллельные запуски

  • Еженедельные переводы статей

Сохранение:

  • Названия брендов

  • HTML-теги

  • URL-адреса и SKU

Этот подход снижает затраты на API и повышает качество переводов за счёт пакетной обработки и кэширования.


← Назад к индексу документации