.NET Conf China 2023分享-.NET應用國際化-AIGC智能翻譯+代碼生成

今年.NET Conf China 2023技術大會,我給大家分享了

.NET應用國際化-AIGC智能翻譯+代碼生成的議題,今天整理成博客,分享給所有人。
隨着疫情的消退,越來越多的企業開始向海外拓展,應用系統的國際化和本地化是一個巨大的技術挑戰,我們今天重點探討以下內容:
  1. .NET應用如何實現國際化?不僅僅包含資源文件和文本的替換,還有文本詞條抽取、智能翻譯、代碼替換、本地化處理等各種場景。
  2. 基於Roslyn進行代碼分析,查找中文文本、抽取詞條,以及代碼替換。
  3. 機器翻譯與GPT的Battle,基於GPT4實現一個智能翻譯服務。
  4. 彩蛋環節:如何使用Github Copilot自動生成代碼和單元測試。
一、.NET應用如何實現國際化 
目前我們的充電服務平臺包含16大子系統,上千個功能菜單,數十個數據庫... 大部分應用基於.NET技術棧構建,都需要支持國際化&本地化。 如何快速、高效、準確地完成產品國際化&本地化改造是團隊面臨的一個巨大的挑戰! 沒有相關經驗怎麼辦? 好在有了ChatGPT!!! 我們先問一下ChatGPT~ 

   總結:技術方案可行,但是有幾個架構設計上的問題: 1. 重度依賴資源文件 2. 大型分佈式部署,分發、管理成本很高、很複雜 3. 需要大範圍掃描、改造代碼 4. 翻譯、校對工作量巨大 5. 無法批量、動態修改翻譯文本。
   在ChatGPT基礎上,發揮.NET技術棧的能力,創新設計了一個新的解決方案:
   抽象封裝一個詞條服務,根據線程上下文的CurtureInfo,動態獲取對應的多語言文本 注:
   1.1 詞條通常用於標識需要被翻譯文本的唯一標識。

    上圖中: 詞條類I18NTerm:用於存儲詞條數據 詞條管理接口:用於詞條的批量新增、修改 詞條服務接口:支持按詞條查詢對應的翻譯文本。

    2 基於Roslyn,解析代碼中的中文,形成多語言詞條,同時做代碼替換 封裝一個翻譯服務,批量翻譯詞條

    再次找到ChatGPT問一問 Prompt:你是一個.NET資深開發工程師,全面掌握C#語言,請基於Roslyn技術實現一個服務,輸入一個sln解決方案的路徑,掃描各個類中的中文文字,統一替換爲I18nTermService.GetText('詞條ID') 

 

     重新設計一下技術實現方案:

3. 機器翻譯與GPT的Battle,基於GPT4實現一個智能翻譯服務。

  基於Azure AI services 的 Translator實現機器翻譯

        但是機器翻譯的準確性怎麼樣?機器翻譯有哪些問題

 

    嘗試使用ChatGPT做專業翻譯:先設計Prompt 請把以下詞語列表翻譯爲英文 1. 充電站,2.電站,3.充電樁,4.充電終端,5.終端,每個單詞一行 

 

      依舊不理想,繼續修改Prompt
      Prompt:你是一個美國電動汽車充電服務運營商,精通中文和英文,請使用專業領域術語,把以下詞語列表翻譯爲英文,1. 充電站,2.電站,3.充電樁,4.充電終端,5.終端,翻譯時電站等同於充電站,充電終端等同於充電樁,終端也等同於充電樁,每個單詞一行。

      充電樁的專業翻譯是 Charging point 需要一個專業術語表

      繼續改進Prompt
      Prompt:你是一個美國電動汽車充電服務運營商,精通中文和英文,請使用以下格式的專業術語 {"充電站":"Charging station", "充電樁":"Charging point"},把以下詞語列表翻譯爲英文,1. 充電站,2.電站,3.充電樁,4.充電終端,5.終端,翻譯時電站等同於充電 站,充電終端等同於充電樁,終端也等同於充電樁,每個單詞一行。

  翻譯準確性提升了 我們繼續改進,同時實現工程化
  Prompt:你是一個美國電動汽車充電服務運營商,精通中文和英文,請使用以下格式的專業術語 {"充電站":"Charging station", "充電樁":"Charging point"},把以下詞語列表翻譯爲英文,1. 充電站,2.電站,3.充電樁,4.充電終端,5.終端,翻譯時電站等同於充電站,充電終端等同於充電樁,終端也等同於充電樁,請以JSON格式返回,例如 {"充電站":"Charging station", "充電終端":"Charging point"},不需要做解釋

  更好的Prompt
      請扮演一個美國電動汽車充電服務運營商,精通中文和英文,請使用以下專業術語 {"充電站":"Charging station", "電站":"Charging station", "場站":"Charging station", "充電樁":"Charging point", "充電終端":"Charging point", "終端":"Charging point" , "電動汽車":"Electric Vehicle", "直流快充":"DC Fast Charger","超級充電站":"Supercharger","智能充電":"Smart Charging","交流慢充":"AC Slow Charging"}, 把請將用戶的輸入翻譯爲英文, 請以JSON格式返回 例如 {"充電站":"Charging station", "充電終端":"Charging point"} 不需要做解釋

 

     1.3 Prompt搞定後,使用SK框架,基於GPT4實現翻譯服務, 用於專業翻譯

測試一下:

4. 彩蛋環節:如何使用Github Copilot自動生成代碼和單元測試。

除了國際化翻譯之外,我們還需要做應用的本地化處理。例如: 提供一個公共的本地化組件,支持對數字、時間、度量衡在不同區域下的處理。 接下來分享團隊基於Github Copilot開發副駕,示例完成以上代碼的生成過程。

先看一下Github copilot

Prompt: 請用C#生成一個提供度量衡服務的實現類MeasurementService,它提供了以下方法將長度值轉換爲英寸、長度值轉換爲英尺、 將長度值轉換爲英里、 將長度值轉換爲釐米、 將長度值轉換爲千米、 將重量值轉換爲克、 將重量值轉換爲千克、 將功率值轉換爲瓦特、 將電流值轉換爲安培、 將電壓值轉換爲伏特。 例如將長度值轉換爲英寸的實現方法是public double ConvertToInch(double value, LengthUnit lengthUnit),這個方法中遍歷LengthUnit,做長度轉換。方法請添加標準註釋,使用中文註釋。

這裏你會發現,其他方法未實現,需要繼續告訴Github Copilot繼續生成代碼 Github Copilot生成的代碼不一定全面準確,需要做代碼確認,這個很關鍵 Prompt: MeasurementService類中, 請參考ConvertToInch這個方法的實現方式和註釋要求, 繼續生成ConvertToMile,ConvertToFoot,ConvertToCentimeter, ConvertToKilometer, ConvertToGram,ConvertToKilogram, ConvertToWatt,ConvertToAmpere, ConvertToVolt等方法的具體轉換邏輯, 每個方法都要實現代碼輸出。
我們繼續讓Github Copilot生成單元測試代碼:
首先選擇整個類,然後輸入以下Prompt Prompt: @workspace /tests 請對選中的代碼,使用MSTest單元測試框架,生成單元測試代碼,請爲每個方法都實現單元測試 

 

以上我們共同探討了基於AIGC實現.NET應用國際化 從智能翻譯到代碼生成,
這是LLM時代一個小小的案例,但是 未來: 有LLM加持的智能翻譯將更精準,全面提升用戶體驗。
代碼自動生成將全面釋放開發者創造力。
隨着AIGC的迭代升級,AI將爲我們帶來更多應用創新和價值創造。 
 
 
周國慶
2024/1/5

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章