File d'attente de traduction : Système de traitement par lots

Cet article explique comment nous mettons en file d'attente et traitons par lots les traductions pour optimiser l'utilisation de l'API d'IA.

Le problème : La traduction à la demande est coûteuse

Traduire du contenu à la demande présente des inconvénients :

  • Lent : Chaque traduction prend 1 à 2 secondes

  • Coûteux : Coûts de l'API par requête

  • Redondant : Le même texte traduit plusieurs fois

  • Bloquant : L'utilisateur attend la traduction

Nous avons besoin d'une meilleure approche.

La solution : File d'attente et traitement par lots

File d'attente : Collecter les demandes de traduction

Lot : Traiter plusieurs traductions ensemble

Cache : Stocker les résultats pour les réutiliser

Planification : Traiter la file d'attente périodiquement (pas en temps réel)

Structure de la file d'attente

Fichier de file d'attente

Emplacement : Fichier JSON sur disque

Format : Tableau de demandes de traduction

Champs :

  • text : Texte en anglais à traduire

  • target_lang : Code de langue (hi, de, fr, etc.)

  • context : Où le texte apparaît (produit, requête, article)

  • priority : Élevée/normale/faible

Ajout à la file d'attente

Lorsqu'une traduction est manquante :

queue_translation(text, target_lang, context="product")

Déduplication : Vérifier si déjà en file d'attente

Validation : Rejeter les valeurs non pertinentes

Traitement par lots

Script

Emplacement : scripts/web/process_translation_queue.py

Planification : S'exécute toutes les 6 heures via cron

Fichier de verrouillage : Empêche les exécutions simultanées

Flux de traitement

1. Charger la file d'attente : Lire toutes les demandes en attente

2. Grouper par langue : Regrouper les demandes de même langue

3. Dédupliquer : Supprimer les doublons dans le lot

4. Vérifier le cache : Ignorer les textes déjà traduits

5. Traduire le lot : Envoyer à l'API DeepSeek

6. Analyser les résultats : Extraire les traductions de la réponse

7. Sauvegarder dans le cache : Stocker dans les tables de phrases

8. Vider la file d'attente : Supprimer les demandes traitées

Traduction par lots

Appel API

Modèle : DeepSeek-V3 (via Together.ai)

Prompt système : En cache (identique pour tous les lots dans la langue)

Prompt utilisateur : Variable (spécifique au lot)

Format : Liste numérotée

Exemple :

Traduisez ces 10 textes :
1. Mini PC
2. Thin Client
3. Compact Desktop
...

Réponse :

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

Analyse

Extraire les traductions par numéro de ligne :

  • Supprimer le préfixe numérique (1., 2., etc.)

  • Associer aux textes originaux par position

  • Valider que le nombre correspond

Gestion des erreurs

Échec de l'API : Nouvelle tentative avec une API de secours

Échec de l'analyse : Retourner les textes originaux

Succès partiel : Sauvegarder les traductions réussies, remettre en file d'attente les échecs

Stratégie de mise en cache

Tables de phrases

Emplacement : Fichiers JSON par langue

Format : {"Anglais": "Traduction"}

Chargement : Chargé une fois au démarrage

Avantage : Recherches rapides, pas d'appels API

Taux de réussite du cache

Première exécution : Faible (tout est nouveau)

Exécutions suivantes : Élevé (la plupart des textes sont en cache)

Avantage : Coûts d'API réduits

Règles de préservation

Pendant la traduction, nous préservons :

Noms de marque : Thinvent®, Intel®, AMD®

Balises HTML : <p>, <br>, <strong>

URLs : https://www.thinvent.in

SKUs : Treo-N100-8-256

Nombres : 8GB, 256GB, 4 cores

Implémentation : Modèles Regex dans le prompt système

Détection de la langue

Avant de traduire, vérifier si déjà traduit :

Méthode : Analyse du jeu de caractères

Hindi : Écriture Devanagari

Chinois : Caractères CJK

Arabe : Écriture arabe

Avantage : Éviter les traductions inutiles

Gestion des priorités

Priorité élevée : Noms de produits, caractéristiques (traités en premier)

Priorité normale : Descriptions, articles (traités en second)

Priorité faible : Contenu ancien, rarement consulté (traités en dernier)

Avantage : Le contenu important est traduit en premier

Planification

Tâche Cron

Fréquence : Toutes les 6 heures

Commande : python3 scripts/web/process_translation_queue.py

Fichier de verrouillage : /tmp/process_translation_queue.lock

Avantage : Traitement automatique, pas d'intervention manuelle

Tâches hebdomadaires

Articles : Traduire les nouveaux articles chaque semaine

Chaînes Babel : Mettre à jour les traductions des modèles chaque semaine

Script : scripts/web/translate_articles_weekly.sh

Surveillance

Taille de la file d'attente

Suivre les demandes en attente :

  • Total des demandes

  • Demandes par langue

  • Âge de la demande la plus ancienne

Alerte : Si la file d'attente devient trop grande

Statistiques de traduction

Suivre le traitement :

  • Traductions par lot

  • Taux de réussite de l'API

  • Taux de réussite du cache

  • Temps de traitement

Suivi des coûts

Surveiller l'utilisation de l'API :

  • Requêtes par jour

  • Tokens par requête

  • Coût par langue

Références

Articles connexes

Résumé

La file d'attente de traduction permet un traitement par lots efficace :

File d'attente :

  • ✅ Collecter les demandes de traduction

  • ✅ Dédupliquer dans le lot

  • ✅ Gestion des priorités

  • ✅ Validation et filtrage

Traitement par lots :

  • ✅ Grouper par langue

  • ✅ Envoyer à l'API DeepSeek

  • ✅ Analyser les réponses numérotées

  • ✅ Sauvegarder dans les tables de phrases

Mise en cache :

  • ✅ Vérifier le cache avant de traduire

  • ✅ Taux de réussite du cache élevé

  • ✅ Coûts d'API réduits

Planification :

  • ✅ Toutes les 6 heures via cron

  • ✅ Le fichier de verrouillage empêche les exécutions simultanées

  • ✅ Traductions d'articles hebdomadaires

Préservation :

  • ✅ Noms de marque

  • ✅ Balises HTML

  • ✅ URLs et SKUs

Cette approche réduit les coûts d'API et améliore la qualité de la traduction grâce au traitement par lots et à la mise en cache.


← Retour à l'index de la documentation