.NET应用国际化-AIGC智能翻译+代码生成(.NET Conf China 2023分享)

今年.NET Conf China 2023技术大会,我给大家分享了

.NET应用国际化-AIGC智能翻译+代码生成的议题,今天整理成博客,分享给所有人。

随着疫情的消退,越来越多的企业开始向海外拓展,应用系统的国际化和本地化是一个巨大的技术挑战,我们今天重点探讨以下内容:

  1. .NET应用如何实现国际化?不仅仅包含资源文件和文本的替换,还有文本词条抽取、智能翻译、代码替换、本地化处理等各种场景。

  2. 基于Roslyn进行代码分析,查找中文文本、抽取词条,以及代码替换。

  3. 机器翻译与GPT的Battle,基于GPT4实现一个智能翻译服务。

  4. 彩蛋环节:如何使用Github Copilot自动生成代码和单元测试。

一、.NET应用如何实现国际化 

目前我们的充电服务平台包含16大子系统,上千个功能菜单,数十个数据库... 大部分应用基于.NET技术栈构建,都需要支持国际化&本地化。如何快速、高效、准确地完成产品国际化&本地化改造是团队面临的一个巨大的挑战!没有相关经验怎么办?好在有了ChatGPT!!!我们先问一下ChatGPT~ 

4df678338fc0ae409dba84b9ca73331c.png

dde4821b3d56285b7f4c943cc5f8c097.png

   总结:技术方案可行,但是有几个架构设计上的问题:1. 重度依赖资源文件 2. 大型分布式部署,分发、管理成本很高、很复杂 3. 需要大范围扫描、改造代码 4. 翻译、校对工作量巨大 5. 无法批量、动态修改翻译文本。

   在ChatGPT基础上,发挥.NET技术栈的能力,创新设计了一个新的解决方案:

   抽象封装一个词条服务,根据线程上下文的CurtureInfo,动态获取对应的多语言文本 注:

   1.1 词条通常用于标识需要被翻译文本的唯一标识。

63511160c982ffd0189a171a1bba2d55.png

    上图中: 词条类I18NTerm:用于存储词条数据 词条管理接口:用于词条的批量新增、修改 词条服务接口:支持按词条查询对应的翻译文本。

    2 基于Roslyn,解析代码中的中文,形成多语言词条,同时做代码替换 封装一个翻译服务,批量翻译词条

    再次找到ChatGPT问一问 Prompt:你是一个.NET资深开发工程师,全面掌握C#语言,请基于Roslyn技术实现一个服务,输入一个sln解决方案的路径,扫描各个类中的中文文字,统一替换为I18nTermService.GetText('词条ID') 

8cb707803aabac9f750cc477600a8675.png

89cb7373cf6a9c3c431b0e4be8fb3e5f.png

     重新设计一下技术实现方案:

05a9812fe7341ee25ecd05e29db81da8.png

3. 机器翻译与GPT的Battle,基于GPT4实现一个智能翻译服务。

  基于Azure AI services 的 Translator实现机器翻译

b8eafcbdc185d619044b199373ed4e46.png

        但是机器翻译的准确性怎么样?机器翻译有哪些问题

ba526c08d613d3cfe2d035e4d683d740.png

    尝试使用ChatGPT做专业翻译:先设计Prompt 请把以下词语列表翻译为英文 1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,每个单词一行 

c4e7c357eea3bb9c97ff2cfa5a8925b5.png

      依旧不理想,继续修改Prompt

      Prompt:你是一个美国电动汽车充电服务运营商,精通中文和英文,请使用专业领域术语,把以下词语列表翻译为英文,1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,翻译时电站等同于充电站,充电终端等同于充电桩,终端也等同于充电桩,每个单词一行。

d446f5af2097bdad435860662a219ffa.png

      充电桩的专业翻译是 Charging point 需要一个专业术语表

      继续改进Prompt

      Prompt:你是一个美国电动汽车充电服务运营商,精通中文和英文,请使用以下格式的专业术语 {"充电站":"Charging station", "充电桩":"Charging point"},把以下词语列表翻译为英文,1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,翻译时电站等同于充电 站,充电终端等同于充电桩,终端也等同于充电桩,每个单词一行。

72059d10e07c66a622d36012f875b662.png

  翻译准确性提升了 我们继续改进,同时实现工程化

  Prompt:你是一个美国电动汽车充电服务运营商,精通中文和英文,请使用以下格式的专业术语 {"充电站":"Charging station", "充电桩":"Charging point"},把以下词语列表翻译为英文,1. 充电站,2.电站,3.充电桩,4.充电终端,5.终端,翻译时电站等同于充电站,充电终端等同于充电桩,终端也等同于充电桩,请以JSON格式返回,例如 {"充电站":"Charging station", "充电终端":"Charging point"},不需要做解释

dcbaeb7481614e1c28e494df2e7df869.png

  更好的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"} 不需要做解释

f410730aa3fb9f682a56a4f2ea42f0bd.png

     1.3 Prompt搞定后,使用SK框架,基于GPT4实现翻译服务, 用于专业翻译

af93ef614eab1bc3b0d2bcf11b27998c.png

6010bf6e5488c6137651c6bd40708683.png

08c5c15fa46df1ae491c6ca93d2dcd1f.png

6bf0627a2d4c110c054bddd95786f6cc.png

测试一下:

47a54f977d9789ca6f8e87528e2e7393.png

633a256cd8d4dcf286868da335938d46.png

4. 彩蛋环节:如何使用Github Copilot自动生成代码和单元测试。

除了国际化翻译之外,我们还需要做应用的本地化处理。例如:提供一个公共的本地化组件,支持对数字、时间、度量衡在不同区域下的处理。接下来分享团队基于Github Copilot开发副驾,示例完成以上代码的生成过程。

先看一下Github copilot

5f32a768261b362e224f941eeb409a56.png

Prompt:请用C#生成一个提供度量衡服务的实现类MeasurementService,它提供了以下方法将长度值转换为英寸、长度值转换为英尺、 将长度值转换为英里、 将长度值转换为厘米、 将长度值转换为千米、 将重量值转换为克、 将重量值转换为千克、 将功率值转换为瓦特、 将电流值转换为安培、 将电压值转换为伏特。例如将长度值转换为英寸的实现方法是public double ConvertToInch(double value, LengthUnit lengthUnit),这个方法中遍历LengthUnit,做长度转换。方法请添加标准注释,使用中文注释。

49921a69e035cfe3ad890720fa4bbb94.png

这里你会发现,其他方法未实现,需要继续告诉Github Copilot继续生成代码 Github Copilot生成的代码不一定全面准确,需要做代码确认,这个很关键 Prompt:MeasurementService类中, 请参考ConvertToInch这个方法的实现方式和注释要求, 继续生成ConvertToMile,ConvertToFoot,ConvertToCentimeter, ConvertToKilometer, ConvertToGram,ConvertToKilogram, ConvertToWatt,ConvertToAmpere, ConvertToVolt等方法的具体转换逻辑, 每个方法都要实现代码输出。

我们继续让Github Copilot生成单元测试代码:

首先选择整个类,然后输入以下Prompt Prompt:@workspace /tests 请对选中的代码,使用MSTest单元测试框架,生成单元测试代码,请为每个方法都实现单元测试 

d00734fcee6dad080c49193b22533c3c.png

以上我们共同探讨了基于AIGC实现.NET应用国际化 从智能翻译到代码生成,

这是LLM时代一个小小的案例,但是 未来:有LLM加持的智能翻译将更精准,全面提升用户体验。

代码自动生成将全面释放开发者创造力。

随着AIGC的迭代升级,AI将为我们带来更多应用创新和价值创造。 

 周国庆

2024/1/5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值