Gå til indhold

Odoo 19: AI-oversættelse med krydstjek – modulet ai_translation_consensus, hvor flere AI'er kontrollerer hinanden

3. november 2026 | Odoo 19 Community | Egenudvikling
3. november 2026 af
Odoo 19: AI-oversættelse med krydstjek – modulet ai_translation_consensus, hvor flere AI'er kontrollerer hinanden

Odoo 19-modulet ai_translation_consensus: Flere AI-modeller oversætter, vurderer hinandens tekster anonymt og lader et menneske godkende

Med en enkelt AI-model er det hurtigt klaret at oversætte et websted til ti, tyve eller fyrre sprog. Det svære er at vide, om man kan stole på resultatet. En enkelt sprogmodel finder indimellem på ord, oversætter produktnavne eller ændrer et tal uden selv at opdage det. Derfor har vi skrevet et modul til Odoo 19, hvor flere AI-modeller og oversættelsestjenester arbejder med den samme tekst og vurderer hinandens resultater anonymt, så de kan nå til enighed om en formulering, der både er præcis og lyder naturlig. Hvis resultatet ikke er entydigt, bliver afgørelsen overladt til et menneske.

Modulet hedder ai_translation_consensus og er tilgængeligt som fri software under AGPL-3-licensen på GitHub:

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

Idéen: Gensidig kontrol frem for tillid

Modulet kan to ting:

  • Oversætte: tilføje manglende oversættelser eller opdatere forældede oversættelser i alle felter i Odoo, der kan oversættes. Det gælder blogindlæg, websider, menuer, produkter og alt andet, som Odoo gemmer på flere sprog. AI-modellerne ser både den enkelte sætning, de omkringliggende blokke og et udsnit af hele siden. På den måde bliver de enkelte ord forstået i den rette sammenhæng.
  • Læse korrektur: gennemgå teksten på dens eget sprog og foreslå bedre formuleringer eller rettelser. Originalen er altid en af kandidaterne. Hvis originalen vinder, bliver der ikke ændret noget.

Kernen er den gensidige kontrol. Hver AI-model er god til at vurdere andres tekster, selv om den indimellem selv rammer ved siden af. Det udnytter modulet: Flere udbydere skriver hver sin version, og derefter vurderer de samme udbydere alle versionerne uden at vide, hvem der har skrevet dem. En udbyder vurderer ikke sin egen version.

Sådan bliver et forslag til

Forløb: Oversættelse, kontrol, vurdering, enighed og menneskelig godkendelse

  1. Oversættelse. Hver oversætter skriver sin egen version sideløbende med de andre.
  2. Faste kontroller. Uden brug af AI kontrolleres det, om HTML-tags, entiteter, pladsholdere som %s eller {}, tal og links er bevaret uændret. En version, der ikke overholder dette, kan aldrig vinde, uanset hvor flydende den lyder.
  3. Vurdering. De resterende versioner blandes og anonymiseres. Hver bedømmer giver hver version en karakter for præcision og naturlighed (fra 1 til 10), udpeger en favorit og kan foreslå en forbedring.
  4. Enighed. En versions score beregnes som 0,5 × gennemsnitskarakter + 5 × andel af favoritstemmerne. Der er enighed, når den bedste version har mindst 60 % af favoritstemmerne og en gennemsnitskarakter på mindst 7,0.
  5. Anden runde. Hvis der ikke opnås enighed, vurderes de bedste versioner igen sammen med bedømmernes forbedringsforslag.
  6. Menneskelig afgørelse. Hvis resultatet stadig ikke er entydigt, afventer forslaget en afgørelse.

Hvis der kun bruges rene oversættelsestjenester uden vurderingsfunktion (for eksempel DeepL), betragtes et resultat kun som vedtaget, hvis mindst to tjenester har leveret præcis den samme tekst. Ved korrekturlæsning skal resultaterne stadig have en tydelig lighed med originalen (lighed på mindst 0,6 og samme tal). Små gratis modeller svarer indimellem på en bunke tekster med tekster, der er forskudt eller ikke hører til. Sådanne svar kasseres i stedet for at komme til afstemning. En ordliste fastlægger mærkenavne og faste begreber.

Udbydere: med og uden nøgle

Gratis tjenester og betalingstjenester kan deltage i den samme afstemning. Modulet leveres med standardindstillinger til mange udbydere. Alle er slået fra efter installationen.

TypeOversætterKontrollerer / retterEksempler
OpenAI-kompatibel grænsefladejajaOpenAI, Mistral, DeepSeek, xAI, Groq, Together, OpenRouter, Cerebras, Qwen, Moonshot, GitHub Models, Hugging Face, Ollama, LM Studio, vLLM, llama.cpp
OpenAI-kompatibel uden nøglejajaOllama på egen server, Pollinations
AnthropicjajaClaude
Google Gemini, Coherejaja
Lokal kommandojajaclaude -p oder jedes Programm, das von stdin liest und die Antwort ausgibt
OversættelsestjenesterjanejDeepL, Google Translate, Azure Translator, LibreTranslate, MyMemory, Lingva

Indtast nøglen (eller navnet på en miljøvariabel, der indeholder den), tryk på Test forbindelse, og slå udbyderen til. Modelnavnene i standardindstillingerne er udgangspunkter. Hvis du bruger dem, bør du sammenholde dem med udbyderens aktuelle liste. Med to eller flere udbydere får du en reel gensidig kontrol. Med kun én er der ingen, der kontrollerer dens arbejde. Det gør guiden opmærksom på.

Et helt websted på én gang

En startguide (menuen AI-oversættelse → Start her) forklarer trinnene og opretter den første regel. Hvis modulet website er installeret, installeres integrationsmodulet ai_translation_consensus_website automatisk sammen med det. Det tilføjer valgmuligheden »Et helt websted med alt dets indhold«: Du vælger webstedet og får forslag til indholdet. Modulet gennemgår alle modeller med felter, der kan oversættes, og som hører til webstedet (sider, menuer, blogs, produkter, arrangementer, fora, kurser med mere). Derefter foreslår det én regel pr. indholdstype med webstedets sprog som målsprog.

Startguiden med hele webstedet som omfang og de foreslåede indholdstyper

  • Funktioner, der ikke er installeret (fora, kurser, gallerier), vises ikke, men medtages senere, så snart de er installeret.
  • Webshopmodeller foreslås kun, hvis webstedet har en webshop. Kun offentliggjorte poster medtages.
  • Modulet udelader bevidst kontakter, firmaer, betalingsudbydere, prislister, leveringsmetoder, loyalitetsprogrammer og snippetfiltre.
  • Sidernes URL-navne (seo_name) oversættes ikke.
  • Du kan fjerne uønskede indholdstyper, før reglerne oprettes.

Oprettelse og søgning koster ikke noget: Reglen viser blot, hvilke tekster der skal arbejdes med. Først ved behandlingen kaldes udbyderne, og der påløber omkostninger.

Dashboard, omkostninger og automatisk start

Dashboardet viser for hver regel, hvor mange tekster der er færdige, afventer bekræftelse eller menneskelig afgørelse, står i kø eller er mislykkedes. Derudover vises en fordeling på sprog og udbyder, de hidtidige og de forventede resterende omkostninger, den anslåede resterende tid og en knap til at slå planlagt behandling til og fra.

Dashboard med fremskridt, omkostninger, tokens og sprog. Eksempeldata.

Tallene i denne illustration er eksempeldata og siger ikke noget om de faktiske omkostninger.

  • Omkostningerne beregnes ud fra det, udbyderne faktisk rapporterer: tokens (OpenAI, Anthropic, Gemini, Cohere) eller tegn (DeepL, Google, Azure). Tokens vises altid, mens beløb kun vises, hvis du har indtastet prisen pr. million tokens (eller tegn) for udbyderen. Standardindstillingerne indeholder ingen priser, fordi de ændrer sig. For tjenester, der ikke rapporterer tokens, anslås forbruget ud fra tekstlængden og markeres som et estimat.
  • Prognose: De gennemsnitlige omkostninger og behandlingstiden pr. tekst ganges med antallet af tekster i kø. Det er et estimat, der bliver mere præcist, efterhånden som de første portioner behandles.
  • Automatisk start: Regler med indstillingen Start automatisk, når en post ændres søger ved hver kørsel af den planlagte handling kun efter poster, der er ændret siden sidste søgning. Når den planlagte handling er slået til, bliver en redigeret webside altså oversat igen, uden at du skal gøre noget.
  • Abonnementsforbrug: For udbydere, der tilgås via et kommandolinjeprogram, hvor man er logget ind (Antigravity, Codex), kontrollerer modulet hvert tiende minut, hvor meget af kvoten for den aktuelle abonnementsperiode der er brugt, og hvornår den nulstilles. Dashboardet viser forbruget for hver aktiv udbyder som en bjælke med tidspunktet for nulstilling samt forespørgslerne fra de seneste 24 timer og årsagen til en igangværende pause. En knap opdaterer tallene med det samme. På den måde kan man se, at en ugekvote kan være brugt op på få timer, før forespørgsler bliver afvist. Udbydere uden forbrugsoplysninger (for eksempel MyMemory) angiver det udtrykkeligt i stedet for at opfinde et tal.
  • Færdigmelding: Når den sidste udestående tekst i en regel er færdigbehandlet, vises beskeden »Alle sprog er oversat« én gang i kanalen AI Translation (ved korrekturlæsning: »Alle tekster er kontrolleret«).

Menneskelig godkendelse

Som standard skriver modulet ikke noget i dine poster uden godkendelse. Hvert forslag viser versionerne, hvem der har skrevet dem, karaktererne og bedømmernes kommentarer. Du kan acceptere forslaget, vælge en anden version, indtaste din egen formulering eller afvise det.

Forslag med tre kandidater, karakterer, favoritstemmer og en menneskelig afgørelse. Eksempelteksten er opdigtet.

Teksten og udbydernavnene i denne illustration er opdigtede for at vise, hvordan visningen ser ud.

Hvis du har tillid til en regel, kan du slå Anvend automatisk ved enighed til. Forslag uden enighed afventer stadig en menneskelig afgørelse. Når et forslag anvendes, kontrollerer modulet igen, om kildeteksten er ændret i mellemtiden, gentager kontrollen af markup og gemmer teksten uden ændringssporing og uden at sende meddelelser til følgere.

Sikkerhed og databeskyttelse

  • Alt er slået fra efter installationen. Udbyderne og den planlagte handling er deaktiveret. Der sendes ikke noget, før du selv foretager dig noget.
  • Tekster forlader din server, så snart en hostet tjeneste er involveret. En regel kan markeres som Fortrolig. Så er det kun udbydere, der er markeret som kørende på egen infrastruktur, der får adgang til teksten.
  • Nøgler gemmes i et felt, som kun administratorer kan se, eller i en miljøvariabel, som der kun henvises til ved navn. De maskeres i fejlmeddelelser og sendes i headere. Undtagelse: Den valgfrie nøgle til MyMemory kan kun overføres som en forespørgselsparameter.
  • Lokal kommando kører et program og er derfor blokeret, indtil systemparameteren ai_translation_consensus.allow_command sættes til True. Kommandoen kaldes uden en shell og køres i en tom, midlertidig mappe.
  • Prompt-injektion: Opgaverne markerer teksten som data. Instruktioner i den tekst, der oversættes, bliver ikke fulgt, og et resultat, der ændrer tags eller pladsholdere forkert, kasseres.
  • Gratis tjenester har begrænsninger. Pollinations tillader ét anonymt svar pr. 45 sekunder. Udbyderindstillingen min_interval sikrer, at intervallet overholdes, og svar med beskeden »Prøv igen senere« respekteres.

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 og Python-pakken requests er påkrævet. En tysk oversættelse medfølger. Integrationsmodulet ai_translation_consensus_website installeres automatisk, hvis website er installeret. Efter installationen skal Odoo-tjenesten genstartes, fordi modulet indeholder Python-kode. Hvis du har et system i produktion, skal du først installere modulet på en kopi af databasen.

De første trin: Åbn menuen AI-oversættelse → Udbydere, test tjenesterne, og slå dem til. Vælg derefter Start her, og opret den første regel. Med Søg efter tekster oprettes forslagene, og med Behandl en portion kaldes udbyderne. Begynd med en lille regel, for eksempel et enkelt blogindlæg og to sprog, og se på resultatet og omkostningerne, før du sætter et helt websted i kø.

Begrænsninger

  • Kvaliteten afhænger af de modeller, du slår til. Den gensidige kontrol mindsker fejl fra de enkelte modeller, men giver ingen garanti. Ved juridisk vigtige eller sikkerhedskritiske tekster kan modulet ikke erstatte en person med sproget som modersmål.
  • Omkostningerne vokser hurtigt. En tekst kræver ét kald pr. oversætter, ét vurderingskald pr. bedømmer og en anden runde, hvis der ikke opnås enighed i afstemningen. Sidekonteksten øger mængden af input i hvert kald. En regel med 45 målsprog mangedobler antallet af tekster. Begræns kørslerne med Poster pr. søgning, Nye forslag pr. søgning og Forslag pr. cron-kørsel, og tilføj billige eller lokale modeller som bedømmere.
  • Kun felter med translate=True. Formateret tekst behandles blok for blok (Odoos termmekanisme).
  • Priser og modelnavne ændrer sig. Standardindstillingerne er ikke en løbende opdateret prisliste.
  • Udviklet til Odoo 19.0 Community. Andre versioner understøttes ikke.

Ofte stillede spørgsmål

Bliver noget oversat eller overskrevet uden min godkendelse?

Nej, så længe du ikke slår Anvend automatisk ved enighed til. Selv da gemmes kun forslag, der er opnået enighed om. Udbyderne og den planlagte handling er slået fra efter installationen.

Skal jeg have nøgler til udbydere, der tager betaling?

Kun til de udbydere, der kræver en. Med Pollinations, MyMemory eller en lokalt drevet model (for eksempel Ollama) kan du klare dig uden. Gratis tjenester har ofte begrænsninger og er langsomme. Til et helt websted egner de sig som regel kun som supplement.

Hvad koster en oversættelse?

Det afhænger af udbyder, model, tekstlængde og antal sprog, så modulet angiver ingen faste beløb. Dashboardet viser forbrug og omkostninger, når du har indtastet priserne, og anslår de resterende omkostninger for teksterne i kø.

Kan jeg holde tekster fortrolige?

Ja, med regelindstillingen Fortrolig. Så bruges kun udbydere, der er markeret som kørende på din egen infrastruktur, for eksempel en lokal Ollama-installation.

Erstatter det Odoos egen oversættelsesfunktion?

Nej. Modulet bruger Odoos understøttelse af flere sprog og skriver i de samme oversættelser, som du ellers vedligeholder manuelt.

Hvilken licens udgives det under?

AGPL-3. Fejlrapporter og forbedringsforslag modtages gerne som issues i GitHub-repositoriet .

Hjælp fra Biricon IT Services

Vi hjælper små og mellemstore virksomheder med deres Odoo-installationer: fra implementering, tilpasninger og migreringer til den løbende drift. Vi hjælper gerne, hvis du vil drive dit Odoo-websted på flere sprog, kvalitetssikre oversættelser med AI eller installere et modul sikkert i dit produktionsmiljø. Flere af vores egenudviklede løsninger: Arkivér et firma sammen med dets portalbrugere, Bilagsnumre med præfiks, år og løbenummer og Virksomhedsregister og adressekontrol for østrigske kunder.

Kontakt os nu

Status pr. 8. november 2026. Modulversion 19.0.1.2.0. Illustrationerne viser fiktive eksempeldata.