繁體中文(香港)
  • 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-HK 翻譯為 Nice 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 插件用戶身份驗證