Overslaan naar inhoud

Odoo 19: AI-vertaling met kruiscontrole – module ai_translation_consensus, waarbij meerdere AI's elkaar controleren

3 november 2026 | Odoo 19 Community | Eigen ontwikkeling
3 november 2026 in
Odoo 19: AI-vertaling met kruiscontrole – module ai_translation_consensus, waarbij meerdere AI's elkaar controleren

Odoo 19-module ai_translation_consensus: meerdere AI's vertalen, beoordelen elkaar anoniem en een mens geeft vrij

Een website in tien, twintig of veertig talen vertalen is met één enkele AI snel gedaan. Lastiger is de vraag of u het resultaat kunt vertrouwen. Een enkel taalmodel verzint af en toe woorden, vertaalt productnamen mee of wijzigt een getal, en merkt het zelf niet. Daarom hebben wij voor Odoo 19 een module geschreven waarbij meerdere AI's en vertaaldiensten aan dezelfde tekst werken, elkaars resultaten anoniem beoordelen en het eens worden over de formulering die tegelijk nauwkeurig en natuurlijk klinkt. Wat niet eenduidig is, krijgt een mens ter beslissing.

De module heet ai_translation_consensus en staat als vrije software onder de AGPL-3-licentie op GitHub:

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

Het idee: kruiscontrole in plaats van vertrouwen

De module kan twee dingen:

  • Vertalen: ontbrekende (of verouderde) vertalingen van elk vertaalbaar veld in Odoo aanvullen, dus blogberichten, webpagina's, menu's, producten en al het andere wat Odoo meertalig opslaat. De AI's zien daarbij niet alleen de afzonderlijke zin, maar ook de naastliggende blokken en een fragment van de hele pagina. Zo worden afzonderlijke woorden in de juiste context begrepen.
  • Proeflezen: de tekst in zijn eigen taal controleren en betere formuleringen of correcties voorstellen. Het origineel is daarbij altijd een van de kandidaten. Wint het origineel, dan wordt er niets gewijzigd.

De kern is de wederzijdse controle. Elke AI is goed in het beoordelen van andermans teksten, ook als zij zelf af en toe ernaast zit. Dat benut de module: meerdere aanbieders schrijven elk een versie, en dezelfde aanbieders beoordelen daarna alle versies, zonder te weten van wie ze komen. De eigen versie beoordeelt een aanbieder niet mee.

Zo ontstaat een voorstel

Verloop: vertalen, controleren, beoordelen, het eens worden, goedkeuring door mensen

  1. Vertalen. Elke vertaler schrijft parallel een versie.
  2. Vaste controles. Zonder AI wordt gecontroleerd of HTML-tags, entiteiten, plaatshouders zoals %s of {}, getallen en links ongewijzigd zijn gebleven. Een versie die dat schendt, kan nooit winnen, hoe vloeiend ze ook klinkt.
  3. Beoordelen. De overige versies worden door elkaar gehusseld en geanonimiseerd. Elke beoordelaar geeft voor elke versie een cijfer voor nauwkeurigheid en voor natuurlijkheid (1 tot 10), noemt een favoriet en kan een verbetering voorstellen.
  4. Het eens worden. De rang van een versie is 0,5 × gemiddeld cijfer + 5 × aandeel favorietenstemmen. Als overeenstemming geldt wanneer de beste versie minstens 60 % van de favorietenstemmen en een gemiddeld cijfer van minstens 7,0 heeft.
  5. Tweede ronde. Zonder overeenstemming gaan de beste versies samen met de verbetervoorstellen van de beoordelaars nog een keer de beoordeling in.
  6. Mens. Wordt het ook dan niet eenduidig, dan wacht het voorstel op een beslissing.

Zijn er alleen zuivere vertaaldiensten zonder controlefunctie (bijvoorbeeld DeepL), dan geldt een resultaat alleen als overeengekomen wanneer minstens twee diensten exact dezelfde tekst hebben geleverd. Bij het proeflezen moeten de resultaten herkenbaar op het origineel blijven lijken (gelijkenis minstens 0,6, dezelfde getallen). Kleine gratis modellen beantwoorden een stapel af en toe met verschoven of vreemde teksten. Zulke antwoorden worden verworpen in plaats van meegeteld in de stemming. Een glossarium legt merknamen en vaste begrippen vast.

Aanbieders: met en zonder sleutel

Gratis en betaalde diensten kunnen in dezelfde stemming zitten. De module levert voorinstellingen voor veel aanbieders mee; alle zijn na de installatie uitgeschakeld.

SoortVertaaltControleert / corrigeertVoorbeelden
OpenAI-compatibele interfacejajaOpenAI, Mistral, DeepSeek, xAI, Groq, Together, OpenRouter, Cerebras, Qwen, Moonshot, GitHub Models, Hugging Face, Ollama, LM Studio, vLLM, llama.cpp
OpenAI-compatibel zonder sleuteljajaOllama op de eigen server, Pollinations
AnthropicjajaClaude
Google Gemini, Coherejaja
Lokale opdrachtjajaclaude -p of elk programma dat van stdin leest en het antwoord uitvoert
VertaaldienstenjaneeDeepL, Google Translate, Azure Translator, LibreTranslate, MyMemory, Lingva

U voert de sleutel in (of de naam van een omgevingsvariabele die hem bevat), drukt op Verbinding testen en schakelt de aanbieder in. De modelnamen in de voorinstellingen zijn uitgangspunten; wie ze gebruikt, moet ze afstemmen op de actuele lijst van de aanbieder. Met twee of meer aanbieders is er een echte kruiscontrole, met slechts één controleert niemand zijn werk. De wizard wijst daarop.

Een hele website in één keer

Een startwizard (menu AI-vertaling → Hier beginnen) legt de stappen uit en maakt de eerste regel aan. Is de module website geïnstalleerd, dan komt de brugmodule ai_translation_consensus_website automatisch mee. Die voegt de reikwijdte “Een hele website met alles wat erop staat” toe: u kiest de website en laat u de inhoud voorstellen. De module bekijkt alle modellen met vertaalbare velden die bij de website horen (pagina's, menu's, blogs, producten, evenementen, forums, cursussen en meer) en stelt één regel per soort inhoud voor, met de talen van de website als doel.

Startwizard met de reikwijdte hele website en de voorgestelde soorten inhoud

  • Wat niet is geïnstalleerd (forums, cursussen, galerijen), verschijnt niet en wordt later opgenomen zodra het is geïnstalleerd.
  • Winkelmodellen worden alleen voorgesteld als de website een winkel heeft. Er worden alleen gepubliceerde records opgenomen.
  • Contacten, bedrijven, betalingsaanbieders, prijslijsten, verzendmethoden, loyaliteitsprogramma's en snippetfilters biedt de module bewust niet aan.
  • De adresnamen van de pagina's (seo_name) worden niet vertaald.
  • Ongewenste soorten kunt u vóór het aanmaken verwijderen.

Het aanmaken en het zoeken kosten niets: de regel somt alleen op welke teksten werk nodig hebben. Pas bij het verwerken worden aanbieders aangeroepen en ontstaan er kosten.

Dashboard, kosten en automatische start

Het dashboard toont per regel hoeveel teksten klaar zijn, op een bevestiging of een mens wachten, in de wachtrij staan of zijn mislukt. Daarbij komen de uitsplitsing per taal en aanbieder, de tot dusver gemaakte en de nog te verwachten kosten, de geschatte resterende tijd en de schakelaar voor de geplande verwerking.

Dashboard met voortgang, kosten, tokens en talen. Voorbeeldgegevens.

De cijfers in deze afbeelding zijn voorbeeldgegevens en zeggen niets over echte kosten.

  • Kosten worden berekend uit wat de aanbieders daadwerkelijk melden: tokens (OpenAI, Anthropic, Gemini, Cohere) of tekens (DeepL, Google, Azure). Tokens worden altijd getoond, geld alleen als u de prijs per miljoen tokens (of tekens) bij de aanbieder hebt ingevoerd. De voorinstellingen bevatten geen prijzen, omdat die veranderen. Diensten die geen tokens melden, worden geschat op basis van de tekstlengte en als schatting gemarkeerd.
  • Prognose: gemiddelde kosten en werktijd per tekst maal het aantal ingeplande teksten. Dat is een schatting die met de eerste stapels beter wordt.
  • Automatische start: regels met de optie Vanzelf starten wanneer een record verandert zoeken bij elke run van de geplande actie alleen records die sinds de laatste zoekrun zijn gewijzigd. Met ingeschakelde geplande actie wordt een bewerkte website dus zonder handeling opnieuw vertaald.
  • Voltooiingsmelding: Zodra de laatste openstaande tekst van een regel is afgehandeld, verschijnt eenmalig het bericht “Alle talen vertaald” (bij het nalezen “Alle teksten gecontroleerd”) in het kanaal AI Translation.

Goedkeuring door mensen

Standaard schrijft de module niets zonder toestemming in uw gegevens. Elk voorstel toont de versies, wie ze heeft geschreven, de beoordelingen en de opmerkingen van de controleurs. U kunt het voorstel overnemen, een andere versie kiezen, een eigen formulering intypen of het voorstel afwijzen.

Voorstel met drie kandidaten, beoordelingen, favorietenstemmen en de beslissing door een mens. Voorbeeldtekst volledig verzonnen.

De tekst en de namen van de aanbieders in deze afbeelding zijn volledig verzonnen om de weergave te tonen.

Wie een regel vertrouwt, kan Overeenstemming automatisch overnemen inschakelen. Voorstellen zonder overeenstemming wachten dan nog steeds op een mens. Bij het overnemen controleert de module nogmaals of de brontekst intussen is gewijzigd, voert de markup-controles opnieuw uit en schrijft zonder tracking en zonder volgers op de hoogte te brengen.

Beveiliging en gegevensbescherming

  • Na de installatie staat alles uit. Aanbieders en geplande actie zijn gedeactiveerd. Zonder uw toedoen wordt er niets verstuurd.
  • Teksten verlaten uw server zodra een gehoste dienst erbij betrokken is. Een regel kan als Vertrouwelijk worden gemarkeerd; dan zien alleen aanbieders die als draaiend op eigen infrastructuur zijn aangemerkt de tekst.
  • Sleutels staan in een veld dat alleen beheerders zien, of in een omgevingsvariabele waarnaar alleen de naam verwijst. In foutmeldingen worden ze gemaskeerd en worden ze in headers verzonden. Uitzondering: de optionele sleutel van MyMemory kan daar alleen als queryparameter worden doorgegeven.
  • Lokaal commando voert een programma uit en is daarom geblokkeerd totdat de systeemparameter ai_translation_consensus.allow_command op True wordt gezet. Het commando wordt zonder shell aangeroepen en draait in een lege tijdelijke map.
  • Prompt-injectie: De opdrachten kenmerken de tekst als gegevens. Instructies in de vertaalde tekst worden niet opgevolgd, en een resultaat dat tags of plaatsaanduidingen schendt, wordt verworpen.
  • Gratis diensten hebben grenzen. Pollinations staat anoniem één antwoord per 45 seconden toe. De aanbiederoptie min_interval houdt dit interval aan, en antwoorden als “Probeer het later opnieuw” worden gerespecteerd.

Installatie

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

Vereist zijn Odoo 19 en het Python-pakket requests. Een Duitse vertaling is bijgevoegd. De brugmodule ai_translation_consensus_website wordt automatisch mee geïnstalleerd wanneer website aanwezig is. Na de installatie moet de Odoo-service opnieuw worden gestart, omdat de module Python-code bevat. Wie een productiesysteem beheert, installeert de module eerst op een kopie van de database.

De eerste stappen: open het menu KI-Übersetzung → Anbieter, test de diensten en schakel ze in, ga dan naar Hier starten en maak de eerste regel aan. Met Nach Texten suchen worden de voorstellen gegenereerd, met Einen Stapel verarbeiten worden de aanbieders aangeroepen. Begin met een kleine regel, bijvoorbeeld één enkele blogbijdrage en twee talen, en bekijk resultaat en kosten voordat u een hele website inplant.

Beperkingen

  • De kwaliteit hangt af van de modellen die u inschakelt. De kruiscontrole vermindert fouten van afzonderlijke modellen, maar geeft geen garantie. Voor juridisch of veiligheidskritische teksten vervangt de module geen moedertaalspreker.
  • Kosten lopen snel op. Een tekst kost één aanroep per vertaler, één controleaanroep per controleur en bij een verdeelde stemming een tweede ronde. Paginacontext vergroot de invoer van elke aanroep. Een regel met 45 doeltalen vermenigvuldigt het aantal teksten. Beperk de runs met Datensätze je Suchlauf, Neue Vorschläge je Suchlauf en Vorschläge je Cron-Lauf, en voeg goedkope of lokale modellen als controleur toe.
  • Alleen velden met translate=True. Opgemaakte tekst wordt per blok verwerkt (het term-mechanisme van Odoo).
  • Prijzen en modelnamen veranderen. De standaardinstellingen vormen geen bijgehouden prijslijst.
  • Gebouwd voor Odoo 19.0 Community. Andere versies worden niet ondersteund.

Veelgestelde vragen

Wordt er iets vertaald of overschreven zonder mijn toestemming?

Nee, zolang u Overeenstemming automatisch overnemen niet inschakelt. Ook dan worden alleen voorstellen met overeenstemming geschreven. De aanbieders en de geplande actie staan na de installatie uit.

Heb ik sleutels nodig voor betaalde aanbieders?

Alleen voor de aanbieders die er een vereisen. Met Pollinations, MyMemory of een lokaal draaiend model (bijvoorbeeld Ollama) kan het zonder. Gratis diensten zijn vaak beperkt en traag; voor een hele website zijn ze meestal alleen geschikt als aanvulling.

Wat kost een vertaling?

Dat hangt af van aanbieder, model, tekstlengte en aantal talen, daarom geeft de module geen vaste bedragen op. Het dashboard toont verbruik en kosten zodra u de prijzen hebt ingevoerd, en schat de resterende kosten van de ingeplande teksten.

Kan ik teksten vertrouwelijk houden?

Ja, met de regeloptie Vertrouwelijk. Dan werken alleen aanbieders die als draaiend op uw eigen infrastructuur zijn gemarkeerd, zoals een lokale Ollama.

Vervangt dit de eigen vertaling van Odoo?

Nee. De module gebruikt de meertaligheid van Odoo en schrijft naar dezelfde vertalingen die u anders met de hand onderhoudt.

Onder welke licentie staat hij?

Onder de AGPL-3. Fouten en verbeteringen zijn als issue in de GitHub-repository welkom.

Ondersteuning door Biricon IT Services

Wij beheren Odoo-installaties voor kleine en middelgrote bedrijven: van de invoering via aanpassingen en migraties tot de lopende exploitatie. Als u uw Odoo-website meertalig wilt laten draaien, vertalingen met AI wilt afdekken of een module veilig naar uw productie-instantie wilt brengen, helpen wij u graag. Overige eigen ontwikkelingen: Bedrijf archiveren inclusief portaalgebruikers, Documentnummers uit prefix, jaar en teller en Firmenbuch en adrescontrole voor Oostenrijkse klanten.

Neem nu contact op

Stand: 3 november 2026. Moduleversie 19.0.1.0.0. De afbeeldingen tonen verzonnen voorbeeldgegevens.