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

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

Системный промпт: Кэшируется (одинаков для всех пакетов на языке)

Пользовательский промпт: Переменный (специфичен для пакета)

Формат: Нумерованный список

Пример:

Переведите эти 10 текстов:
1. Mini PC
2. Thin Client
3. Compact Desktop
...

Ответ:

1. मिनी पीसी
2. थिन क्लाइंट
3. कॉम्पैक्ट डेस्कटॉप
...

Разбор

Извлечение переводов по номеру строки:

  • Удаление префикса с номером (1., 2. и т.д.)

  • Сопоставление с исходными текстами по позиции

  • Проверка совпадения количества

Обработка ошибок

Сбой API: Повтор с резервным API

Ошибка разбора: Возврат исходных текстов

Частичный успех: Сохранение успешных переводов, повторная постановка неудачных в очередь

Стратегия кэширования

Таблицы фраз

Расположение: JSON-файлы для каждого языка

Формат: {"Английский": "Перевод"}

Загрузка: Загружаются один раз при запуске

Преимущество: Быстрый поиск, отсутствие API-вызовов

Процент попаданий в кэш

Первый запуск: Низкий (все новое)

Последующие запуски: Высокий (большинство текстов в кэше)

Преимущество: Снижение затрат на API

Правила сохранения

Во время перевода сохраняются:

Названия брендов: Thinvent®, Intel®, AMD®

HTML-теги: <p>, <br>, <strong>

URL-адреса: https://www.thinvent.in

SKU: Treo-N100-8-256

Числа: 8GB, 256GB, 4 cores

Реализация: Регулярные выражения в системном промпте

Определение языка

Перед переводом проверка, не переведен ли уже:

Метод: Анализ набора символов

Хинди: Письменность деванагари

Китайский: 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 и повышает качество переводов за счет пакетной обработки и кэширования.


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