使用 ChatGPT 提升國際化效率
本文分享了使用 ChatGPT API 有效支持產品國際化 (i18n) 的經驗,提供整合 API、改進翻譯結果和優化指令以提升效果的建議。
在當今的全球市場中,為產品進行國際化 (i18n) 是至關重要的。通過支持多種語言,產品可以吸引並服務於全球用戶群體,提升用戶體驗,增加忠誠度,並獲取市場份額。然而,國際化支持通常伴隨著高昂的成本和複雜的維護:
- 設置語言支持需要專業團隊和選擇合適的合作夥伴,這需要時間和努力。
- 傳統的翻譯過程緩慢且需要人工干預,難以跟上產品迭代的步伐。
在本文中,我們將分享 Logto 團隊使用 ChatGPT 及其 API 高效支持我們產品國際化的經驗,同時降低成本。
我們如何實施國際化
在整合 ChatGPT API 之前,我們遵循了傳統的翻譯流程,以支持我們產品的國際化。流程如下:
- 對於每種語言,我們創建了一個翻譯文件夾,其中包含幾個 TypeScript 文件。每個文件由一個 TypeScript 對象組成,包含短語鍵和其翻譯的鍵值對。
- 要添加新的短語,我們手動將新的鍵值對添加到每種語言的翻譯文件中。
- 在每種語言的根目錄中,我們創建了一個 index.ts 文件,導出該語言中的所有翻譯文件。
以下是 zh-HK 語言的 index.ts 文件示例:
要在 UI 中顯示一個短語,我們使用了一個根據當前環境檢索翻譯的函數。我們使用點符號訪問嵌套對象或鍵。
例如,如果用戶使用的是英文瀏覽器:
面臨的挑戰
我們在這種方法中遇到了兩個主要挑戰:
- 隨著語言和短語數量的增加,維護翻譯文件變得具有挑戰性。手動將新短語添加到每種語言中既耗時又容易出錯。
- 翻譯過程不可靠。在沒有專門翻譯團隊的情況下,我們大多數翻譯依賴於社群用戶。他們的工作很出色,但翻譯不可避免地隨時間變得不完整和不一致。
引入 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 的過程仍不太方便。我們必須手動複製代碼片段,粘貼到請求中,並替換 languageCode
和 code
變數。鑑於需要翻譯超過 10 種語言和 100 個代碼片段,這不是理想的體驗。
為了解決這個問題,我們決定將 ChatGPT API 集成到我們的命令行接口 (CLI) 中。我們為 CLI 添加了兩個命令:
logto translate sync
: 此命令會收集所有含有// UNTRANSLATED
注釋的代碼片段,進行翻譯,並用翻譯版本替換原代碼片段。logto translate create [languageCode]
: 此命令會創建指定[languageCode]
的新語言,並將所有代碼片段從默認語言(英語)翻譯為新語言。
儘管翻譯可能不完美,但仍然是巨大的改進。我們現在可以專注於驗證和提升翻譯結果,而不是花時間在實際的翻譯過程上。
結論
將 ChatGPT API 整合到我們的產品國際化工作流程中可以成為一個強大的工具,但需要仔細的策劃和清晰的指示,以獲得最佳結果。
如果你正在開發 AI 應用程序,用戶身份驗證是必不可少的。Logto 為你提供了簡單和安全的用戶身份驗證方法,並提供跨所有應用程序的統一用戶身份系統,還提供了對 ChatGPT 插件的開箱即用支持。欲知更多信息,請查看我們的博客文章: