繁體中文(香港)
  • chatgpt
  • internationalization
  • productivity

使用 ChatGPT 提升國際化效率

本文分享了使用 ChatGPT API 有效支持產品國際化 (i18n) 的經驗,提供整合 API、改進翻譯結果和優化指令以提升效果的建議。

Gao
Gao
Founder
Yijun
Yijun
Developer

Stop wasting weeks on user auth
Launch secure apps faster with Logto. Integrate user auth in minutes, and focus on your core product.
Get started
Product screenshot

在當今的全球市場中,為產品進行國際化 (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 插件用戶身份驗證