Efektywna internacjonalizacja z ChatGPT
Ten artykuł dzieli się doświadczeniem z wykorzystania API ChatGPT do efektywnego wsparcia internacjonalizacji (i18n) produktów, dostarczając wskazówki dotyczące integracji z API, poprawy wyników tłumaczenia i optymalizacji instrukcji dla lepszych rezultatów.
Na dzisiejszym światowym rynku kluczowe jest internacjonalizowanie (i18n) produktów. Obsługa wielu języków pozwala przyciągnąć i obsługiwać globalną bazę użytkowników, zwiększyć doświadczenie użytkownika, lojalność i zdobyć udział w rynku. Jednak wsparcie dla internacjonalizacji często wiąże się z wysokimi kosztami i skomplikowaną konserwacją:
- Ustawienie obsługi języka wymaga profesjonalnych zespołów i wybór odpowiednich partnerów, co wymaga czasu i wysiłku.
- Tradycyjne procesy tłumaczenia są powolne i wymagają ręcznej interwencji, co utrudnia adążanie za iteracjami produktu.
W tym artykule podzielimy się doświadczeniem zespołu Logto w efektywnym wsparciu internacjonalizacji aszych produktów za pomocą ChatGPT i jego API, minimalizując koszty.
Jak podchodziliśmy do internacjonalizacji
Przed zintegrowaniem API ChatGPT, stosowaliśmy tradycyjny proces tłumaczenia do obsługi internacjonalizacji aszych produktów. Proces ten wyglądał astępująco:
- Dla każdego języka tworzyliśmy folder tłumaczeń zawierający kilka plików TypeScript. Każdy plik składał się z obiektu TypeScript z parami klucz-wartość reprezentującymi klucze fraz i ich tłumaczenia.
- Aby dodać ową frazę, ręcznie dodawaliśmy ową parę klucz-wartość do pliku tłumaczenia dla każdego języka.
- W katalogu głównym każdego języka tworzyliśmy plik index.ts, który eksportował wszystkie pliki tłumaczeń w tym języku.
Oto przykład pliku index.ts dla języka zh-HK:
Aby wyświetlić frazę w interfejsie użytkownika, używaliśmy funkcji, która pobierała tłumaczenie a podstawie bieżącego środowiska. Dostęp do zagnieżdżonych obiektów lub kluczy uzyskiwaliśmy za pomocą otacji kropkowej.
Na przykład, jeśli użytkownik korzystał z przeglądarki w języku angielskim:
Napotkane wyzwania
Napotkaliśmy dwa główne wyzwania z tym podejściem:
- Wraz ze wzrostem liczby języków i fraz, utrzymanie plików tłumaczeń stawało się problematyczne. Dodawanie owych fraz do każdego języka ręcznie było czasochłonne i podatne a błędy.
- Proces tłumaczenia był iewiarygodny. Bez dedykowanego zespołu tłumaczeń polegaliśmy a użytkownikach społeczności do większości tłumaczeń. Robili świetną robotę, ale ieuchronnie tłumaczenia stawały się iekompletne i iekonsekwentne z czasem.
Wprowadzenie ChatGPT
Gdy ChatGPT zdobywał popularność, odkryliśmy ciekawe zastosowanie. Przypadkiem skopiowaliśmy obiekt frazy TypeScript do ChatGPT i okazało się, że może tłumaczyć fragment kodu, zachowując strukturę kodu. Odkrycie to as ucieszyło.
Na przykład:
I wynik:
To było
aprawdę
iezwykłe. W przypadkach rzeczywistych mieliśmy również historyczne pliki, które zawierały
iektóre
ieprzetłumaczone frazy oznaczone // UNTRANSLATED
:
ChatGPT był awet w stanie "częściowo" przetłumaczyć fragment kodu, eliminując ostatnią przeszkodę. Jednak ie było to jeszcze doskonałe. Przyjrzyjmy się problemom, a które atrafiliśmy.
Inżynieria promptów
Problem losowego odpowiedzi
Jednym z dobrze znanych faktów o ChatGPT jest jego ieprzewidywalna atura. Czasami wyniki są dokładne, a innym razem mogą być dziwne lub ie takie, jak zamierzaliśmy. Podczas gdy jest to akceptowalne w kontekście czatbota, staje się problematyczne podczas generowania fragmentów kodu do tłumaczenia.
Wróćmy do przykładu zh-HK
:
Oczekiwane tłumaczenie Nice to meet you.
a zh-HK
to 很高興見到你。
. Jednak istnieją przypadki, w których fragment jest tłumaczony
a zh-CN
:
很高兴见到你。
różni się od 很高興見到你。
.
Czasami, polecenie "Please translate the..." jest również tłumaczone:
Czasami wyniki zawierają iepotrzebną treść:
Pierwsza linia "To jest tłumaczenie:" jest iepotrzebna dla aszych potrzeb.
Na podstawie powyższych wyników możemy zidentyfikować kilka różnic między ChatGPT a ami w rozmowie:
- Czasami rozpoznawany jest tylko język (zh), bez uwzględnienia różnic regionalnych (zh-HK).
- Nie jest w stanie dokładnie zidentyfikować, które treści muszą być tłumaczone.
- Format odpowiedzi ie spełnia aszych oczekiwań.
Napisz jasne i konkretne wskazówki
Aby rozwiązać powyższe problemy, udoskonaliliśmy asze propmty:
Ten owy prompt okazał się skuteczny. Instruowaliśmy ChatGPT do:
- Odniesienie regionalnego języka a podstawie dostarczonego kodu języka.
- Tłumaczenie fragmentu kodu ograniczonego potrójnymi cudzysłowami.
- Zapewnienie, że wynik utrzymuje oryginalny format bez dodatkowej treści.
Daj modelowi czas
a myślenie
Jak wcześniej wspomniano, dla istniejących fraz musieliśmy przetłumaczyć te oznaczone // UNTRANSLATED. Wprowadziło to kolejną warstwę złożoności do prompta. Na przykład:
Jeden z wyników, które otrzymaliśmy:
Tłumacząc (lub przekształcając) frazę success
i dodali dwa komentarze / / TRANSLATED
, które obie były
ieoczekiwane.
Mimo, że poprzednia wskazówka była jasna i konkretna, była dość długa i trudna do zrozumienia, awet dla ludzi. Aby to poprawić, daliśmy modelowi więcej czasu a myślenie. Zapewniliśmy krok po kroku wskazówka:
Wyniki znacznie się poprawiły. Jednak czasami ChatGPT wyświetlał "proces myślenia", ponieważ wyraźnie dostarczyliśmy kroków.
Role w rozmowach
Mimo że ie ma bezpośredniego interfejsu użytkownika, możemy wysłać interaktywną i dynamiczną rozmowę do ChatGPT, przypisując różne "role" do każdej wiadomości. Rola może być jedna z astępujących:
- "system": Odpowiedzialny za kierowanie przepływem i zachowaniem rozmowy, aby zapewnić ciągłość i orientację a cel.
- "assistant": Reprezentuje model ChatGPT, dostarczając odpowiedzi i odpowiedzi.
- "user": Reprezentuje użytkownika zadającego pytania i interakcję z modelem.
Za pomocą ról możemy stworzyć bardziej zaangażowaną rozmowę z ChatGPT. Każda wiadomość gra określoną rolę w prowadzeniu rozmowy.
Tutaj możemy użyć roli "system", aby prowadzić ChatGPT, jak wykonać asze zadanie:
Użyj roli "user", aby poprosić ChatGPT o przetłumaczenie fragmentu kodu:
Użyj roli "assistant", aby wskazać "standand answer":
Na koniec połącz trzy wiadomości powyżej z fragmentem kodu, który chcemy przetłumaczyć, i wyślij pojedyncze żądanie do Chat Completion API. Oto przykład:
Zamieniliśmy languageCode
a docelowy kod, a code
a fragment kodu do tłumaczenia, i zobaczyliśmy dokładnie taki wynik, jakiego oczekiwaliśmy. Bravo!
Integracja z
aszą CLI
Choć wyniki były poprawne i stałe, proces korzystania z API ChatGPT był
adal
iezbyt wygodny. Musieliśmy ręcznie kopiować fragment kodu, wkleić go do żądania i zamienić zmienne languageCode
i code
. Biorąc pod uwagę potrzebę przetłumaczenia ponad 10 języków i 100 fragmentów kodu, to
ie był idealny doświadczenie.
Aby to rozwiązać, postanowiliśmy zintegrować API ChatGPT z aszym interfejsem wiersza poleceń (CLI). Dodaliśmy dwa polecenia do aszego CLI:
logto translate sync
: To polecenie zbiera fragmenty kodu we wszystkich językach, które zawierają komentarze// UNTRANSLATED
, tłumaczy je i zastępuje oryginalne fragmenty kodu przetłumaczonymi wersjami.logto translate create [languageCode]
: To polecenie tworzy owy język o określonym[languageCode]
i przekłada wszystkie fragmenty kodu z domyślnego języka (angielskiego) a owy język.
Choć tłumaczenie może ie być idealne, to jest to ogromna poprawa. Mogliśmy teraz skupić się a sprawdzaniu i poprawianiu wyników tłumaczenia, zamiast tracić czas a sam proces tłumaczenia.
Wniosek
Integracja API ChatGPT do aszego przepływu pracy dla internacjonalizacji produktów może być potężnym arzędziem, ale wymaga starannego planowania i jasnych instrukcji, aby uzyskać ajlepsze wyniki.
Jeśli tworzysz aplikacje AI, uwierzytelnianie użytkowników jest iezbędne. Logto zapewnia prosty i bezpieczny sposób a uwierzytelnianie użytkowników i oferuje zjednoczony system tożsamości użytkowników we wszystkich twoich aplikacjach, a także oferuje wsparcie out-of-the-box dla wtyczek ChatGPT. Więcej informacji znajdziesz w aszym wpisie a blogu:
Implementacja uwierzytelniania użytkowników wtyczek ChatGPT z Logto