Efficiënte internationalisatie met ChatGPT
Dit artikel deelt de ervaring van het gebruik van de ChatGPT API om efficiënte ondersteuning te bieden voor de internationalisatie (i18n) van producten, met tips over het integreren van de API, het verbeteren van vertaalresultaten en het optimaliseren van instructies voor betere resultaten.
In de wereldwijde markt van vandaag is het essentieel om producten te internationaliseren (i18n). Door meerdere talen te ondersteunen, kunnen producten een wereldwijde gebruikersbasis aantrekken en bedienen, gebruikerservaringen verbeteren, loyaliteit vergroten en marktaandeel winnen. Echter, het ondersteunen van internationalisatie brengt vaak hoge kosten en complexe onderhoudskosten met zich mee:
- Het opzetten van taalondersteuning vereist professionele teams en het selecteren van geschikte partners, wat tijd en moeite kost.
- Traditionele vertaalprocessen zijn traag en vereisen handmatige tussenkomst, waardoor het moeilijk is om bij te blijven met productiteraties.
In dit artikel zullen we de ervaring van het Logto-team delen over het efficiënt ondersteunen van internationalisatie voor onze producten met behulp van ChatGPT en zijn API, terwijl de kosten worden geminimaliseerd.
Hoe we internationalisatie benaderden
Voordat we de ChatGPT API integreerden, volgden we een traditioneel vertaalproces om internationalisatie voor onze producten te ondersteunen. Het proces was als volgt:
- Voor elke taal creëerden we een vertaalmap met daarin meerdere TypeScript-bestanden. Elk bestand bestond uit een TypeScript-object met sleutel-waarde-paren die frasensleutels en hun vertalingen vertegenwoordigden.
- Om een nieuwe uitdrukking toe te voegen, voegden we handmatig een nieuw sleutel-waarde-paar toe aan het vertaalbestand voor elke taal.
- In de hoofdmap van elke taal creëerden we een index.ts-bestand dat alle vertaalbestanden in die taal exporteerde.
Hier is een voorbeeld van het index.ts-bestand voor de zh-HK taal:
Om een uitdrukking in de gebruikersinterface weer te geven, gebruikten we een functie die de vertaling ophaalde op basis van de huidige omgeving. We kregen toegang tot geneste objecten of sleutels met behulp van de puntnotatie.
Bijvoorbeeld, als de gebruiker een Engelse browser gebruikte:
Uitdagingen waarmee we werden geconfronteerd
We kwamen twee grote uitdagingen tegen met deze aanpak:
- Naarmate het aantal talen en zinnen toenam, werd het onderhouden van de vertaalbestanden uitdagend. Het handmatig toevoegen van nieuwe zinnen aan elke taal was tijdrovend en foutgevoelig.
- Het vertaalproces was onbetrouwbaar. Zonder een toegewijd vertaalteam vertrouwden we voornamelijk op gemeenschap gebruikers voor de meeste vertalingen. Ze verrichtten uitstekend werk, maar onvermijdelijk werden de vertalingen na verloop van tijd onvolledig en inconsistent.
ChatGPT introduceren
Terwijl ChatGPT steeds populairder werd, ontdekten we een interessante use-case. Per ongeluk kopieerden we een TypeScript-fasenobject in ChatGPT en ontdekten dat het het codesnippet kon vertalen terwijl de structuur van de code behouden bleef. Deze ontdekking maakte ons enthousiast.
Bijvoorbeeld:
En het resultaat:
Dit was werkelijk opmerkelijk. In real-world gevallen hadden we ook historische bestanden die enkele niet-vertaalde zinnen bevatten gemarkeerd met // UNTRANSLATED
:
ChatGPT was zelfs in staat om de codesnippet "gedeeltelijk" te vertalen, waardoor het laatste obstakel werd geëlimineerd. Het was echter nog verre van perfect. Laten we de problemen bekijken waarmee we te maken kregen.
Promptengineering
Het probleem van willekeurige reacties
Een goed bekend feit over ChatGPT is zijn onvoorspelbare aard. Soms zijn de resultaten accuraat, terwijl ze op andere momenten vreemd of niet wat we bedoelden kunnen zijn. Terwijl dit acceptabel is in een chatbotcontext, wordt het problematisch bij het genereren van vertaalcodesnippets.
Laten we het voorbeeld zh-HK
nogmaals bekijken:
De verwachte vertaling voor Nice to meet you.
in zh-HK
is 很高興見到你。
. Er zijn echter gevallen waarin het snippet wordt vertaald naar zh-CN
:
很高兴见到你。
verschilt van 很高興見到你。
.
Soms wordt de prompt "Please translate the..." ook vertaald:
Af en toe bevatten de resultaten onnodige inhoud:
De eerste regel "This is the translation:" is onnodig voor onze behoeften.
Op basis van de bovengenoemde resultaten kunnen we verschillende lacunes identificeren tussen ChatGPT en ons in het gesprek:
- Soms wordt alleen de taal afgeleid (zh), zonder regionale verschillen te overwegen (zh-HK).
- Het slaagt er niet in nauwkeurig te identificeren welke inhoud vertaald moet worden.
- Het antwoordformaat komt niet overeen met onze verwachtingen.
Schrijf duidelijke en specifieke prompts
Om de bovengenoemde problemen aan te pakken, verfijnden we onze prompt:
Deze nieuwe prompt bleek effectief te zijn. We instrueerden ChatGPT om:
- De regionale taal af te leiden op basis van de gegeven taalcode.
- De codesnippet afgebakend door drievoudige aanhalingstekens te vertalen.
- Te zorgen dat de uitvoer het originele formaat behoudt zonder enige extra inhoud.
Geef het model tijd om na te denken
Zoals eerder vermeld, moesten we voor bestaande zinnen die gemarkeerd waren met // UNTRANSLATED vertalen. Dit introduceerde een andere laag van complexiteit aan de prompt. Bijvoorbeeld:
Een van de resultaten die we behaalden:
Het vertaalde of transformeerde ook de uitdrukking success
en voegde twee // TRANSLATED
opmerkingen toe, wat beide onverwacht was.
Hoewel de vorige prompt duidelijk en specifiek was, was deze vrij lang en moeilijk te volgen, zelfs voor mensen. Om dit te verbeteren, gaven we het model meer tijd om na te denken. We boden een stapsgewijze prompt:
De resultaten verbeterden aanzienlijk. Soms zou ChatGPT echter het "denkproces" weergeven omdat we expliciet de stappen hadden gegeven.
Rollen in gesprekken
Hoewel er geen directe gebruikersinterface is, kunnen we een interactieve en dynamische conversatie naar ChatGPT sturen door verschillende "rollen" toe te wijzen aan elk bericht. De rol kan een van de volgende zijn:
- "system": Verantwoordelijk voor het leiden van de stroom en het gedrag van de conversatie om continuïteit en doelgerichtheid te waarborgen.
- "assistant": Vertegenwoordigt het ChatGPT-model zelf, dat antwoorden en reacties verstrekt.
- "user": Vertegenwoordigt de gebruiker die vragen stelt en met het model interacteert.
Door rollen te gebruiken, kunnen we een meer boeiende conversatie met ChatGPT creëren. Elk bericht speelt een specifieke rol bij het sturen van de conversatie.
Hier kunnen we de rol "system" gebruiken om ChatGPT te begeleiden bij het voltooien van onze taak:
Gebruik de rol "user" om ChatGPT te vragen de codesnippet te vertalen:
Gebruik de rol "assistant" om de "standaardantwoord" aan te geven:
Combineer uiteindelijk de drie bovengenoemde berichten met de codesnippet die we willen vertalen en stuur een enkel verzoek naar de Chat Completion API. Hier is een voorbeeld:
We vervingen languageCode
door de doelcode en code
door de codesnippet om te vertalen, en zagen het exacte resultaat dat we verwachtten. Bravo!
Integratie met onze CLI
Hoewel de resultaten correct en stabiel waren, was het gebruik van de ChatGPT API nog steeds niet erg handig. We moesten de codesnippet handmatig kopiëren, in het verzoek plakken en de variabelen languageCode
en code
vervangen. Het vertalen van meer dan 10 talen en 100 codesnippets is in gedachten houdend, was dit geen ideale ervaring.
Om dit aan te pakken, besloten we de ChatGPT API te integreren in onze Command-Line Interface (CLI). We voegden twee opdrachten toe aan onze CLI:
logto translate sync
: Deze opdracht verzamelt codesnippets in alle talen die// UNTRANSLATED
opmerkingen bevatten, vertaalt ze en vervangt de originele codesnippets door de vertaalde versies.logto translate create [languageCode]
: Deze opdracht creëert een nieuwe taal met de opgegeven[languageCode]
en vertaalt alle codesnippets van de standaardtaal (Engels) naar de nieuwe taal.
Hoewel de vertaling misschien niet perfect is, is het nog steeds een grote verbetering. We konden ons nu concentreren op het valideren en verbeteren van de vertaalresultaten in plaats van tijd te besteden aan het eigenlijke vertaalproces.
Conclusie
Het integreren van de ChatGPT API in onze workflow voor productinternationalisatie kan een krachtig hulpmiddel zijn, maar het vereist zorgvuldige planning en duidelijke instructies om de beste resultaten te behalen.
Als je AI-toepassingen ontwikkelt, is gebruikersauthenticatie essentieel. Logto biedt een eenvoudige en veilige manier om je gebruikers te authenticeren en biedt een uniform gebruikersidentiteitssysteem over al je toepassingen heen, en biedt ook kant-en-klare ondersteuning voor ChatGPT-plugins. Voor meer informatie, bekijk onze blogpost:
Implementeer ChatGPT-plugins gebruikersauthenticatie met Logto