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
-
Système de traduction - Hybride à trois technologies
-
Génération de contenu par IA - Intégration DeepSeek
-
Détection de la langue - Préférence linguistique de l'utilisateur
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.