繁體中文(台灣)
  • chatgpt
  • internationalization
  • productivity

使用 ChatGPT 進行高效的國際化

本文分享了使用 ChatGPT API 高效支持產品國際化(i18n)的經驗,提供了整合 API、改善翻譯結果及優化指令的技巧,以達到更好的效果。

Gao
Gao
Founder
Yijun
Yijun
Developer

在當今全球市場中,對產品進行國際化(i18n)是必不可少的。支持多種語言的產品可以吸引並服務全球用戶群,提升用戶體驗,增加忠誠度以及獲得市場份額。然而,支持國際化通常伴隨著高昂成本和複雜的維護:

  • 設置語言支持需要專業團隊和選擇合適的合作夥伴,這需要花費時間和精力。
  • 傳統翻譯過程緩慢且需要人工干預,難以跟上產品的迭代速度。

在本文中,我們將分享 Logto 團隊使用 ChatGPT 及其 API 高效支持產品國際化的經驗,同時將成本降到最低。

我們如何進行國際化

在整合 ChatGPT API 之前,我們遵循傳統的翻譯流程來支持我們產品的國際化。流程如下:

  1. 對於每種語言,我們創建了一個翻譯文件夾,其中包含幾個 TypeScript 文件。每個文件由 TypeScript 對象組成,包含短語鍵值對及其翻譯。
  2. 要添加新短語,我們手動向每種語言的翻譯文件添加一個新的鍵值對。
  3. 在每種語言的根目錄中,我們創建了一個 index.ts 文件,導出該語言的所有翻譯文件。

以下是 zh-HK 語言的 index.ts 文件的一個例子:

要在 UI 中顯示一個短語,我們使用了一個根據當前環境檢索翻譯的函數。我們使用點符號訪問嵌套對象或鍵。

例如,如果用戶使用英文瀏覽器:

面臨的挑戰

我們在這一方法中遇到了兩大挑戰:

  1. 隨著語言和短語數量的增加,維護翻譯文件變得具有挑戰性。手動向每種語言添加新短語既耗時又容易出錯。
  2. 翻譯過程不可靠。由於沒有專門的翻譯團隊,我們主要依賴社區用戶進行翻譯。他們做得很好,但不可避免地翻譯會隨時間推移變得不完整和不一致。

引入 ChatGPT

當 ChatGPT 獲得普及時,我們發現了一個有趣的使用情境。偶然地,我們將一個 TypeScript 短語對象複製到 ChatGPT 中,發現它能夠用保留代碼結構的方法翻譯代碼片段。這一發現令我們激動不已。

例如:

回應如下:

這真是太棒了。在實際操作中,我們還有一些包含未翻譯短語的歷史文件,這些短語用 // UNTRANSLATED 標記:

ChatGPT 甚至能夠“部分” 翻譯這些代碼片段,消除了最後的障礙。然而,它仍然遠未完美。讓我們來看看我們遇到的問題。

提示工程

隨機性回應問題

關於 ChatGPT 的一個廣為人知的事實是它的不可預測性。有時候,結果是準確的,而其他時候,結果可能會很奇怪或不符合我們的預期。在聊天機器人情境中這可能是可以接受的,但在生成翻譯代碼片段時這會變得問題重重。

讓我們再次查看 zh-HK 的例子:

zh-HKNice to meet you. 預期翻譯是 很高興見到你。。然而,有時代碼片段被翻譯成 zh-CN

很高兴见到你。很高興見到你。 不同。

有時,“Please translate the...” 的提示也被翻譯了:

偶爾,結果包含不必要的內容:

第一行 “This is the translation:” 對我們的需求而言是不必要的。

基於上述結果,我們可以識別出 ChatGPT 和我們之間在對話中的幾個差距:

  • 有時僅推斷出語言(zh),而未考慮地區差異(zh-HK)。
  • 無法準確識別需要翻譯的內容。
  • 回應格式不符合我們的期望。

撰寫清晰明確的提示

為了解決上述問題,我們改進了我們的提示:

這個新的提示被證明是有效的。我們指示 ChatGPT:

  • 根據提供的語言代碼推斷地區語言。
  • 翻譯由三個反引號分隔的代碼片段。
  • 確保輸出保持原始格式,沒有任何附加內容。

給模型思考的時間

如前所述,對於現有短語,我們需要翻譯那些標有 // UNTRANSLATED 的短語。這給提示增加了另一層複雜性。例如:

我們得到的結果之一:

它還翻譯(或轉換)了短語 success 並添加了兩個 // TRANSLATED 評論,這都是意料之外的。

儘管前述提示是清晰且具體的,但它相當冗長且難以遵循,即使對人類而言也是如此。為了改善這一點,我們給模型更多的思考時間。我們提供了一個逐步的提示:

結果顯著改善。然而,有時 ChatGPT 會顯示 "思考過程",因為我們明確提供了步驟。

會話中的角色

儘管沒有直接的用戶界面,我們可以通過為每條信息分配不同的“角色”來向 ChatGPT 發送一個互動和動態的對話。角色可以是以下之一:

  • "system":負責引導對話流程和行為,以確保連貫性和目標導向。
  • "assistant":代表 ChatGPT 模型自身,提供答案和回應。
  • "user":代表用戶提問並與模型互動。

通過使用角色,我們可以創造與 ChatGPT 更具吸引力的對話。每條信息在引導對話中扮演特定的角色。

在此,我們可以使用 "system" 角色來引導 ChatGPT 如何完成我們的任務:

用 "user" 角色來要求 ChatGPT 翻譯代碼片段:

用 "assistant" 角色來表示 "標準回答":

最後,將上述三條信息與我們要翻譯的代碼片段結合起來,並向 Chat Completion API 發送單個請求。以下是一個示例:

我們將 languageCode 替換為目標代碼,將 code 替換為要翻譯的代碼片段,並看到了我們期望的準確結果。非常好!

與我們的 CLI 整合

雖然結果是正確且穩定的,但使用 ChatGPT API 的過程仍不太方便。我們必須手動將代碼片段複製並粘貼到請求中,還需要替換 languageCodecode 變量。考慮到需要翻譯超過 10 種語言和 100 個代碼片段,這並不是理想的體驗。

為了解決這一問題,我們決定將 ChatGPT API 整合到我們的命令行介面(CLI)中。我們在 CLI 中添加了兩個命令:

  • logto translate sync:此命令收集包含 // UNTRANSLATED 註釋的所有語言的代碼片段,翻譯它們並用翻譯版本替換原始代碼片段。
  • logto translate create [languageCode]:此命令創建具有指定 [languageCode] 的新語言,並將所有代碼片段從默認語言(英語)翻譯到新語言。

儘管翻譯可能不完美,但這仍是一項巨大的改進。我們現在可以專注於驗證和改善翻譯結果,而不是花時間在實際的翻譯過程上。

結論

將 ChatGPT API 整合到我們的產品國際化工作流程中可以成為強大的工具,但需要精心策劃和明確的指示才能獲得最佳結果。

如果你正在開發 AI 應用程序,用戶認證是必不可少的。Logto 提供一種簡單而安全的方法來認證你的用戶,並在所有應用程序中提供統一的用戶身份系統,還支持 ChatGPT 插件的即需使用。欲了解更多信息,請查看我們的博客文章:

使用 Logto 實現 ChatGPT 插件用戶身份驗證