Se rendre au contenu

Odoo 19 : traduction par IA avec contre-vérification – module ai_translation_consensus, dans lequel plusieurs IA se contrôlent mutuellement

3 novembre 2026 | Odoo 19 Community | Développement interne
3 novembre 2026 par
Odoo 19 : traduction par IA avec contre-vérification – module ai_translation_consensus, dans lequel plusieurs IA se contrôlent mutuellement

Module Odoo 19 ai_translation_consensus : plusieurs IA traduisent, s'évaluent de façon anonyme et un humain valide

Traduire un site web en dix, vingt ou quarante langues est vite fait avec une seule IA. La question de savoir si l'on peut se fier au résultat est plus délicate. Un modèle de langage isolé invente parfois des mots, traduit des noms de produits ou modifie un chiffre, sans s'en apercevoir lui-même. Nous avons donc écrit pour Odoo 19 un module dans lequel plusieurs IA et services de traduction travaillent sur le même texte, évaluent mutuellement leurs résultats de façon anonyme et s'accordent sur la formulation qui sonne à la fois juste et naturelle. Ce qui n'est pas univoque est soumis à la décision d'un humain.

Le module s'appelle ai_translation_consensus et est disponible sur GitHub, en tant que logiciel libre sous licence AGPL-3 :

github.com/Alex0176/odoo-ai-translation-consensus

L'idée : la contre-vérification plutôt que la confiance

Le module sait faire deux choses :

  • Traduire : compléter les traductions manquantes (ou obsolètes) de chaque champ traduisible dans Odoo, donc articles de blog, pages web, menus, produits et tout ce qu'Odoo enregistre en plusieurs langues. Les IA ne voient pas seulement la phrase isolée, mais les blocs voisins et un extrait de la page entière. Ainsi, les mots isolés sont compris dans le bon contexte.
  • Relecture : vérifier le texte dans sa propre langue et proposer de meilleures formulations ou des corrections. L'original est toujours l'un des candidats. Si l'original l'emporte, rien n'est modifié.

Le cœur du dispositif est la vérification mutuelle. Chaque IA est douée pour juger des textes étrangers, même si elle se trompe parfois elle-même. Le module en tire parti : plusieurs fournisseurs écrivent chacun une version, puis ces mêmes fournisseurs évaluent toutes les versions sans savoir de qui elles proviennent. Un fournisseur n'évalue pas sa propre version.

Comment naît une proposition

Déroulement : traduire, vérifier, évaluer, s'accorder, validation par des humains

  1. Traduire. Chaque traducteur écrit une version en parallèle.
  2. Vérifications fixes. Sans IA, on contrôle si les balises HTML, les entités, les espaces réservés comme %s ou {}, les chiffres et les liens sont restés inchangés. Une version qui enfreint cela ne peut jamais l'emporter, aussi fluide soit-elle.
  3. Évaluer. Les autres versions sont mélangées et anonymisées. Chaque examinateur attribue à chacune une note pour la précision et pour le naturel (de 1 à 10), désigne un favori et peut proposer une amélioration.
  4. S'accorder. Le rang d'une version est 0,5 × note moyenne + 5 × part des voix de favori. Il y a accord lorsque la meilleure version obtient au moins 60 % des voix de favori et une note moyenne d'au moins 7,0.
  5. Deuxième tour. Faute d'accord, les meilleures versions, accompagnées des propositions d'amélioration des examinateurs, repassent une fois de plus à l'évaluation.
  6. Humain. Si le résultat n'est toujours pas univoque, la proposition attend une décision.

S'il n'existe que de purs services de traduction sans fonction de vérification (par exemple DeepL), un résultat n'est considéré comme convenu que si au moins deux services ont fourni exactement le même texte. Lors de la relecture, les résultats doivent rester reconnaissablement proches de l'original (similarité d'au moins 0,6, mêmes chiffres). Les petits modèles gratuits répondent parfois à un lot par des textes décalés ou étrangers. De telles réponses sont rejetées au lieu d'être soumises au vote. Un glossaire fixe les noms de marques et les termes arrêtés.

Fournisseurs : avec et sans clé

Des services gratuits et payants peuvent figurer dans le même vote. Le module est livré avec des préréglages pour de nombreux fournisseurs ; tous sont désactivés après l'installation.

TypeTraduitVérifie / corrigeExemples
Interface compatible OpenAIouiouiOpenAI, Mistral, DeepSeek, xAI, Groq, Together, OpenRouter, Cerebras, Qwen, Moonshot, GitHub Models, Hugging Face, Ollama, LM Studio, vLLM, llama.cpp
Compatible OpenAI sans cléouiouiOllama sur son propre serveur, Pollinations
AnthropicouiouiClaude
Google Gemini, Cohereouioui
Commande localeouiouiclaude -p ou tout programme qui lit depuis stdin et écrit la réponse
Services de traductionouinonDeepL, Google Translate, Azure Translator, LibreTranslate, MyMemory, Lingva

On saisit la clé (ou le nom d'une variable d'environnement qui la contient), on clique sur Tester la connexion et on active le fournisseur. Les noms de modèles dans les préréglages sont des points de départ ; quiconque les utilise devrait les comparer à la liste actuelle du fournisseur. Avec deux fournisseurs ou plus, il y a une véritable contre-vérification ; avec un seul, personne ne contrôle son travail. L'assistant le signale.

Un site web entier en une fois

Un assistant de démarrage (menu Traduction IA → Démarrer ici) explique les étapes et crée la première règle. Si le module website est installé, le module passerelle ai_translation_consensus_website vient automatiquement avec lui. Il ajoute le périmètre « Un site web entier avec tout ce qu'il contient » : on choisit le site web et on se fait proposer les contenus. Le module examine tous les modèles comportant des champs traduisibles qui appartiennent au site web (pages, menus, blogs, produits, événements, forums, cours et plus encore) et propose une règle par type de contenu, avec les langues du site web pour cible.

Assistant de démarrage avec le périmètre site web entier et les types de contenu proposés

  • Ce qui n'est pas installé (forums, cours, galeries) n'apparaît pas et sera pris en compte plus tard, dès qu'il sera installé.
  • Les modèles de boutique ne sont proposés que si le site web a une boutique. Seuls les enregistrements publiés sont pris en compte.
  • Les contacts, entreprises, fournisseurs de paiement, listes de prix, modes de livraison, programmes de fidélité et filtres de snippets ne sont volontairement pas proposés par le module.
  • Les noms d'adresse des pages (seo_name) ne sont pas traduits.
  • Les types non souhaités peuvent être retirés avant la création.

La création et la recherche ne coûtent rien : la règle se contente de lister les textes qui nécessitent du travail. Ce n'est qu'au traitement que les fournisseurs sont appelés et que des coûts apparaissent.

Tableau de bord, coûts et démarrage automatique

Le tableau de bord montre, pour chaque règle, combien de textes sont terminés, en attente d'une confirmation ou d'un humain, mis en file ou en échec. S'y ajoutent la ventilation par langue et par fournisseur, les coûts déjà engagés et ceux encore à prévoir, le temps restant estimé et l'interrupteur du traitement planifié.

Tableau de bord avec progression, coûts, tokens et langues. Données d'exemple.

Les chiffres de cette illustration sont des données d'exemple et ne disent rien des coûts réels.

  • Les coûts sont calculés à partir de ce que les fournisseurs déclarent réellement : tokens (OpenAI, Anthropic, Gemini, Cohere) ou caractères (DeepL, Google, Azure). Les tokens sont toujours affichés, l'argent seulement si vous avez saisi chez le fournisseur le prix par million de tokens (ou de caractères). Les préréglages ne contiennent aucun prix, car ceux-ci changent. Les services qui ne déclarent pas de tokens sont estimés d'après la longueur du texte et signalés comme estimation.
  • Prévision : coût moyen et temps de travail par texte multipliés par le nombre de textes mis en file. Il s'agit d'une estimation qui s'améliore avec les premiers lots.
  • Démarrage automatique : les règles avec l'option Démarrer d'elles-mêmes lorsqu'un enregistrement change ne recherchent, à chaque exécution de l'action planifiée, que les enregistrements modifiés depuis la dernière recherche. Avec l'action planifiée activée, une page web modifiée est donc retraduite sans aucune intervention.
  • Message de fin : lorsque le dernier texte en attente d’une règle est traité, le message « Toutes les langues traduites » (en relecture : « Tous les textes vérifiés ») apparaît une seule fois dans le canal AI Translation.

Validation par des humains

Par défaut, le module n’écrit rien dans vos enregistrements sans votre accord. Chaque proposition affiche les versions, leurs auteurs, les notes et les remarques des évaluateurs. Vous pouvez accepter la proposition, choisir une autre version, saisir votre propre formulation ou la rejeter.

Proposition avec trois candidats, notes, votes pour les favoris et décision prise par un humain. Texte d’exemple entièrement fictif.

Le texte et les noms de fournisseurs figurant sur cette illustration sont entièrement fictifs et servent uniquement à présenter l’affichage.

Si vous faites confiance à une règle, vous pouvez activer Accepter automatiquement en cas d’accord. Les propositions sans accord attendent malgré tout une personne. Lors de l’acceptation, le module vérifie encore une fois si le texte source a changé entre-temps, contrôle de nouveau les validations du balisage et écrit sans suivi et sans notification aux abonnés.

Sécurité et protection des données

  • Tout est désactivé après l’installation. Les fournisseurs et l’action planifiée sont désactivés. Rien n’est envoyé sans votre intervention.
  • Les textes quittent votre serveur dès qu’un service hébergé est impliqué. Une règle peut être marquée comme Confidentielle ; dans ce cas, seuls les fournisseurs identifiés comme fonctionnant sur votre propre infrastructure voient le texte.
  • Les clés se trouvent dans un champ visible uniquement par les administrateurs ou dans une variable d’environnement dont seul le nom est référencé. Dans les messages d’erreur, elles sont masquées et sont transmises dans les en-têtes. Exception : la clé facultative de MyMemory ne peut y être transmise que comme paramètre de requête.
  • La commande locale exécute un programme et est donc verrouillée tant que le paramètre système ai_translation_consensus.allow_command n’est pas défini sur True. La commande est appelée sans shell et s’exécute dans un répertoire temporaire vide.
  • Injection de prompt : les requêtes désignent le texte comme des données. Les instructions contenues dans le texte traduit ne sont pas suivies, et un résultat qui enfreint les balises ou les espaces réservés est rejeté.
  • Les services gratuits ont des limites. Pollinations autorise, en mode anonyme, une réponse toutes les 45 secondes. L’option de fournisseur min_interval respecte cet intervalle, et les réponses « Veuillez réessayer plus tard » sont prises en compte.

Installation

git clone https://github.com/Alex0176/odoo-ai-translation-consensus.git
ln -s /pfad/odoo-ai-translation-consensus/ai_translation_consensus /pfad/addons/
ln -s /pfad/odoo-ai-translation-consensus/ai_translation_consensus_website /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i ai_translation_consensus --stop-after-init

Odoo 19 et le paquet Python requests sont requis. Une traduction allemande est fournie. Le module passerelle ai_translation_consensus_website est installé automatiquement si website est présent. Après l’installation, le service Odoo doit être redémarré, car le module contient du code Python. Si vous exploitez un système de production, installez d’abord le module sur une copie de la base de données.

Les premières étapes : ouvrir le menu KI-Übersetzung → Anbieter, tester et activer les services, puis cliquer sur Hier starten et créer la première règle. Avec Nach Texten suchen, les propositions sont générées ; avec Einen Stapel verarbeiten, les fournisseurs sont sollicités. Commencez par une petite règle, par exemple un seul article de blog et deux langues, et examinez le résultat et les coûts avant de mettre en file d’attente un site web entier.

limites

  • La qualité dépend des modèles que vous activez. La vérification croisée réduit les erreurs de chaque modèle, mais n’offre aucune garantie. Pour les textes juridiques ou critiques en matière de sécurité, le module ne remplace pas un locuteur natif.
  • Les coûts augmentent rapidement. Un texte coûte un appel par traducteur, un appel de vérification par évaluateur et, en cas de vote partagé, un second tour. Le contexte de la page augmente la saisie de chaque appel. Une règle avec 45 langues cibles multiplie le nombre de textes. Limitez les exécutions avec Datensätze je Suchlauf, Neue Vorschläge je Suchlauf et Vorschläge je Cron-Lauf, et ajoutez des modèles économiques ou locaux comme évaluateurs.
  • Uniquement les champs avec translate=True. Le texte mis en forme est traité bloc par bloc (mécanisme de termes d’Odoo).
  • Les prix et les noms de modèles changent. Les valeurs par défaut ne constituent pas une liste de prix tenue à jour.
  • Conçu pour Odoo 19.0 Community. Les autres versions ne sont pas prises en charge.

Questions fréquentes

Un texte est-il traduit ou écrasé sans mon accord ?

Non, tant que vous n’activez pas Accepter automatiquement en cas d’accord. Même dans ce cas, seules les propositions avec accord sont écrites. Les fournisseurs et l’action planifiée sont désactivés après l’installation.

Ai-je besoin de clés pour les fournisseurs payants ?

Uniquement pour les fournisseurs qui en exigent une. Avec Pollinations, MyMemory ou un modèle exploité en local (par exemple Ollama), on peut s’en passer. Les services gratuits sont souvent limités et lents ; pour un site web entier, ils ne conviennent généralement qu’en complément.

Combien coûte une traduction ?

Cela dépend du fournisseur, du modèle, de la longueur du texte et du nombre de langues ; c’est pourquoi le module n’impose aucun chiffre fixe. Le tableau de bord affiche la consommation et les coûts dès que vous avez saisi les prix, et estime le coût restant des textes en file d’attente.

Puis-je garder des textes confidentiels ?

Oui, avec l’option de règle Confidentielle. Dans ce cas, seuls travaillent les fournisseurs marqués comme fonctionnant sur votre propre infrastructure, par exemple un Ollama local.

Cela remplace-t-il la traduction native d’Odoo ?

Non. Le module utilise le multilinguisme d’Odoo et écrit dans les mêmes traductions que vous gérez autrement à la main.

Sous quelle licence est-il distribué ?

Sous AGPL-3. Les erreurs et améliorations sont les bienvenues sous forme d'issue dans le dépôt GitHub .

Assistance de Biricon IT Services

Nous assurons le suivi d’installations Odoo pour les petites et moyennes entreprises : de la mise en place aux adaptations et migrations, jusqu’à l’exploitation courante. Si vous souhaitez exploiter votre site Odoo en plusieurs langues, fiabiliser vos traductions grâce à l’IA ou déployer un module en toute sécurité dans votre instance de production, nous vous aidons volontiers. Autres développements maison : Archiver une société avec ses utilisateurs du portail, Numéros de pièces composés d'un préfixe, de l'année et d'un compteur et Firmenbuch et vérification d'adresse pour les clients autrichiens.

Nous contacter

Version du 3 novembre 2026. Version du module 19.0.1.0.0. Les illustrations montrent des données d’exemple fictives.