Egy weboldal, amely több tucat nyelven beszél, fordítók nélkül
Automatikus fordítás · olvasd az eredetit
Hogyan építettük fel azt a fordítórendszert, amely ezen az oldalon fut: AI igény szerint, mindig gyorsítótár, nulla érzékelhető várakozás.
A hagyományos i18n problémája
Évekig egy weboldal nemzetközivé tétele egy kis odüsszeia volt a munkafolyamatok terén: .po fájlok, emberi fordítók, elfelejtett kulcsok, késleltetett telepítések, mert "még hiányzik a német". Egy nyelv hozzáadása időt és pénzt igényelt; tíz nyelv hozzáadása pedig bármely kisvállalkozás számára elképzelhetetlen volt.
A legújabb generációs LLM-ekkel a gépi fordítás minősége elérte azt a pontot, ahol – egy vállalati weboldal esetében, nem az irodalom számára – elegendő. A kérdés már nem az, hogy "automatizálható-e a fordítás", hanem "hogyan integráljuk anélkül, hogy tönkretennénk a felhasználói élményt".
Az architektúra röviden
Az oldal statikusan kerül kiszolgálásra olasz nyelven. Amikor egy felhasználó egy másik nyelvet választ, egy kis motor lép működésbe három MongoDB gyűjteményen:
i18n_base: a forrásszövegek a kiválasztott nyelven (jelenleg olasz), mindegyik a saját nyelvának deklarációjával, egy leírással arról, hogy hol és miért jelenik meg az oldalon (a fordítás minőségéhez elengedhetetlen), hangnemmel és karakterlimitrel. Ez a leírás része a LLM-nek küldött promptnak, így az tudja, hogy egy gombot vagy egy bekezdést fordít-e.i18n_human: a kézzel gondozott fordítások, amikor egy adott oldal esetében szerkesztői minőséget szeretnénk az LLM kimenete helyett. Előnyt élveznek az automatikus cache-hez képest, és automatikusan "megjelölik" magukat, ha a forrásszöveg megváltozik.i18n_cache: a már generált fordítások, indexelve (mező, nyelv) szerint. Minden bejegyzés megőrzi az alap szöveg időbélyegét a generálás időpontjában.articoli_i18n: ugyanaz a logika alkalmazható a hosszabb tartalmakra, mint például ez a cikk.
Az első hozzáféréskor egy új nyelven a rendszer csak a ténylegesen hiányzó mezőket kéri a LLM-től, elmenti a választ a cache-be, és visszaadja a böngészőnek. A következő látogatások során ugyanaz a nyelv azonnal elérhető, AI-hívások nélkül.
Az érvénytelenítés, ami működik
A cache egy rendezett hazugság: azt mondja, "az én igazságom ez", amíg valaki meg nem cáfolja. Az itt alkalmazott cáfolási mechanizmus egyszerű: minden gyorsítótárazott fordítás tárolja az alap szöveg időbélyegét, amely alapján készült. Amikor módosítod az olasz szöveget és növeled a updated_at értékét, az adott mező összes fordítása minden nyelven automatikusan elavulttá válik, és igény szerint újra generálódik. Nincs manuális kaszkád, nincs törölni való cache.
Az a felhasználó, aki nem vár
A legérdekesebb rész nem a fordítás maga — hanem az, ahogy azt bemutatjuk. Nyelvváltáskor a böngésző egy olasz oldalt lát, amelyen minden frissítendő szövegrészlet mellett apró betöltőanimációk vannak. A kísértés az, hogy egyetlen hívással lefordítsuk mindent egyszerre: egyszerű, tiszta, és elítéli a felhasználót arra, hogy megvárja, amíg a LLM befejezi az egészet, mielőtt bármilyen változást látna.
Mi az ellenkező irányt vettük. A szövegeket szakaszokba (navbar, tartalom, lábléc) csoportosítjuk, és három mezős mikrotételekre bontjuk. A hívások sorrendben indulnak: először a navbar néhány mezője, amely néhány másodperc alatt megjelenik — a felhasználó látja, hogy valami történik, és elkezdi olvasni. Olvasás közben érkezik a tartalom első része, majd a második, végül a lábléc.
Éjszakai munka
Egy gyorsítótárnak csak egyetlen igaz ellensége van: az első látogatás. Az első német felhasználó fizeti meg a jövőbeli fordítások árát, és az ő élménye ragad meg benne. A probléma (vagy majdnem) megszüntetéséhez egy háttérfeladat minden percen ébred, kiválasztja a leginkább várt nyelvet a még be nem fejezett nyelvek közül, vesz egy lefordítatlan szöveget, és átküldi az LLM-nek. A következő percen a következőt. Néhány napon belül a legelterjedtebb nyelvek már melegek.
Az éjszakai feladat egy második feladatot is végez: automatikusan felülvizsgálja a kétséges minőségű fordításokat, és más AI-modellel megpróbálja újra. Ha a nyelvek közötti illeszkedés fontos, egy gyenge fordítás nem marad az.
Ha te vagy az első német aznap, és éppen a rendszer a gyorsítótár befejezésén dolgozik, akkor is a progresszív betöltés tart el.
Mit viszünk haza
Egy többnyelvű weboldal lefordítók nélkül, fájlok kezelése nélkül, nyelv hozzáadásához nincs szükség telepítésre. A felhasználó egy kódot ír be — ja, ca, eu, bármit, amit szeretne — és az oldal lefordítódik. Második alkalommal azonnal. A harmadikra valószínűleg már mi gondoskodtunk róla, a megfelelő pillanatban lefordítva egy olyan feladattal, ami sosem alszik.
Ez az oldal, ha németül, spanyolul vagy koreaiul olvassa, sosem írta le egy fordító. Egy LLM fordította le egyszer, és azóta a cache-ből szolgálja ki. Az egyetlen dolog, ami kézzel íródott, az az, amit most olvas, ha olaszul van.
Érdekel, hogy ezt az architektúrát a saját weboldaladra vidd át? Beszéljük meg.
Vegye fel velünk a kapcsolatot
Van megjegyzésed? Írj nekünk
Az üzenet csak hozzánk érkezik. Ha a kommented érdekes, közzétehetjük az cikk alján, de csak jóváhagyás után.
Amíg írsz, a böngésződ egy kis számolási feladatot old meg – így szűrjük ki az automatikus üzeneteket harmadik fél szolgáltatás nélkül és anélkül, hogy semaforokat kéne felismerned. Semmit nem kérünk tőled, és semmilyen adat nem hagyja el ezt a weboldalt.