Et websted, der taler snesevis af sprog, uden oversættere
Automatisk oversat fra italiensk · læs originalen
Sådan byggede vi oversættelsessystemet, der kører under disse sider: AI efter behov, altid cache, nul oplevet ventetid.
Problemet med traditionel i18n
I årevis har internationaliseringen af et websted været en lille odyssé af arbejdsgange: .po-filer, menneskelige oversættere, glemte nøgler, forsinkede implementeringer, fordi "tysk mangler stadig". At tilføje et sprog kostede tid og penge; at tilføje ti var udelukket for enhver lille virksomhed.
Med LLM'er af nyeste generation er kvaliteten af maskinoversættelse nået et punkt, hvor den – for et firmabaseret websted, ikke for litteratur – er tilstrækkelig. Spørgsmålet er ikke længere "kan vi oversætte det automatisk", men "hvordan integrerer vi det uden at ødelægge brugeroplevelsen".
Arkitekturen, kort fortalt
Webstedet leveres statisk på italiensk. Når en bruger vælger et andet sprog, træder en lille motor i kraft på tre MongoDB-samlinger:
i18n_base: kildeteksterne i det valgte sprog (i dag italiensk), hver med erklæringen af sit eget sprog, en beskrivelse af hvor og hvorfor det forekommer på webstedet (essentielt for oversættelseskvaliteten), tone og tegnbegrænsning. Denne beskrivelse bliver en del af prompten til LLM'en, så den ved, om den oversætter en knap eller et afsnit.i18n_human: manuelt kuraterede oversættelser, når vi for nogle sider ønsker redaktionel kvalitet i stedet for LLM-output. De har prioritet over den automatiske cache og "afmærkes" automatisk, når kildeteksten ændres.i18n_cache: allerede genererede oversættelser, indekseret efter (felt, sprog). Hver entry gemmer tidsstemplet for basisteksten på tidspunktet for genereringen.articoli_i18n: samme logik anvendt på længere indhold, som denne artikel.
Ved første adgang på et nyt sprog spørger systemet LLM'en kun om de felter, der virkelig mangler, gemmer svaret i cachen og returnerer det til browseren. Ved efterfølgende besøg ankommer det samme sprog øjeblikkeligt, uden yderligere AI-kald.
Invalidering der fungerer
En cache er en ordnet løgn: den siger "min sandhed er denne", indtil nogen modbeviser den. Mekanismen til modbevisning her er simpel: hver cachelagret oversættelse gemmer tidsstemplet for den grundlæggende tekst, der genererede den. Når du ændrer den italienske tekst og øger dens updated_at, bliver alle oversættelser af det felt i alle sprog automatisk forældede og regenereres efter behov. Nul manuelle kaskader, ingen cache, der skal tømmes.
Brugeren der ikke venter
Den mest interessante del er ikke oversættelsen – det er, hvordan den vises. Når sproget ændres, har browseren en italiensk side med små spinner-ikoner ved siden af hver tekstblok, der skal opdateres. Fristelsen er at foretage et enkelt kald, der oversætter alt sammen: simpelt, rent og fordømmer brugeren til at vente, indtil LLM'en er færdig med alt, før de ser nogen ændringer.
Vi tog den modsatte retning. Teksterne er grupperet efter afsnit (navbar, brødtekst, footer) og opdelt i mikro-batches af tre felter hver. Opkaldene starter i sekvens: først de få felter i navbar, som vises på få sekunder – brugeren ser, at der sker noget, og begynder at læse. Mens de læser, kommer den første del af brødteksten, derefter den anden og til sidst footeren.
Nattevagten
En cache har kun én sand fjende: det første besøg. Den første tyske bruger betaler prisen for alle fremtidige oversættelser, og det er den oplevelse, der bliver hængende. For at eliminere (eller næsten eliminere) problemet, vågner en baggrundsopgave hvert minut, vælger det mest efterspurgte sprog blandt dem, der stadig er ufuldstændige, tager en ikke-oversat tekst og lader den passere gennem LLM'en. Det næste minut, den næste. Inden for få dage er de mest udbredte sprog allerede varme.
Nattevagtopgaven udfører også et andet job: den gennemgår automatisk oversættelser af tvivlsom kvalitet og forsøger dem igen med en anden AI-model. Når justeringen mellem sprog er vigtig, forbliver en middelmådig oversættelse ikke sådan.
Hvis du er den første tysker på dagen og ankommer, mens systemet stadig er ved at færdiggøre cachen, har du stadig progressiv indlæsning til at holde dig beskæftiget. Hvis du er den anden, vil du slet ikke bemærke det.
Hvad du får med dig
En flersproget hjemmeside uden oversættere, uden filer at administrere, uden implementering for at tilføje et sprog. Brugeren indtaster en kode – ja, ca, eu, hvad som helst – og siden oversættes. Anden gang er det øjeblikkeligt. Tredje gang er vi sandsynligvis allerede nået dertil, oversat i det rigtige øjeblik af en opgave, der aldrig sover.
Denne side, hvis du læser den på tysk, spansk eller koreansk, er ikke blevet skrevet af en oversætter nogen gang. Den er blevet oversat én gang af en LLM og er siden blevet leveret fra cachen. Det eneste, der er skrevet i hånden, er det, du læser nu, hvis det er på italiensk.
Interesseret i at bringe denne arkitektur til dit websted? Lad os tale om det.
Kontakt os
Har du en kommentar? Skriv til os
Beskeden er kun til os. Hvis din kommentar er interessant, kan vi offentliggøre den nederst i artiklen – dog først efter godkendelse.
Mens du skriver, løser din browser et lille regnestykke – vores måde at holde automatisk spam ude uden brug af tredjepartstjenester eller semafor-genkendelse. Du behøver ikke gøre noget, og ingen data forlader dette site.