今年.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

.NET Conf China 2023分享-.NET应用国际化-AIGC智能翻译+代码生成的更多相关文章

  1. 2021 .NET Conf China 主题分享之-轻松玩转.NET大规模版本升级

    去年.NET Conf China 技术大会上,我给大家分享了主题<轻松玩转.NET大规模版本升级>,今天把具体分享的内容整理成一篇博客,供大家研究参考学习. 一.先说一下技术挑战和业务背 ...

  2. 讲师征集| .NET Conf China 2021正式启动

    最近社区小伙伴们一直在为11月即将在武汉举办的 第三届.NET中国峰会而忙碌,社区活动官网设计和开发工作还在进行,我们在国庆节的前一天晚上向社区正式启动了活动的序幕,也就是我们确定好了举办地点.时间, ...

  3. 来啦来啦|开源 * 安全 * 赋能 - .NET Conf China 2022

    大会介绍 .NET Conf China 2022 是面向开发人员的社区峰会,延续 .NET Conf 2022 的活动,庆祝 .NET 7 的发布和回顾过去一年来 .NET 在中国的发展成果,它是由 ...

  4. 【PPT】NET Conf China 2022,主题:C#在iNeuOS工业互联网操作系统的开发及应用

    从技术生态发展过程及理念.产品级解决方案理念.产品系统框架及主要功能介绍.产品系统二次开发和应用案例等5个方面进行了主题发言. 从2003到现在,使用.NET技术生态19年左右.  10多年的煤炭.电 ...

  5. 老李分享: Oracle Performance Tuning Overview 翻译

    老李分享: Oracle Performance Tuning Overview 翻译   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工 ...

  6. Weex Ui - Weex Conf 2018 干货分享

    本文是2018年 Weex Conf 中议题<Weex + Ui>的内容文档整理,主要给大家介绍飞猪 Weex 技术体系从无到有的过程,包括 Weex Ui 组件库的开发和发展,重点分享在 ...

  7. 2019.NET Conf China(中国.NET开发者峰会)活动全纪录:.NET技术之崛起,已势不可挡

    一.微软走向开放与.NET Core的诞生 当今时代,气象更新,技术飞速发展. 当今时代,开发者大概是最优秀的群体.每一位开发者,无不奋勇向前,努力追寻时代的步伐,以大无畏的精神迎接挑战,紧跟大时代成 ...

  8. 福利到~分享一个基于jquery的智能提示控件intellSeach.js

    一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...

  9. 分享原创可复用且非侵入性代码生成工具(for .net)

    入行IT十年了,这是本人第一次网上’献丑‘.迫于工作压力,花了大半年时间写了这个生成器以辅助开发.如有价值请多多给予建议,谢谢 好了,废话少说,开动! QA. 1.为什么要用代码生成器? 当然是为了快 ...

  10. 老李分享: Oracle Performance Tuning Overview 翻译下

    1.2性能调优特性和工具 Effective data collection and analysis isessential for identifying and correcting perfo ...

随机推荐

  1. 一些对dp突然的理解

    突然想到了一些理解,感觉有些模糊,怕忘记,就赶紧记下来就是对于状态的设计 用01背包举例子吧,我们设计状态的时候一定是要保证所有可能在最后优秀的子状态在前面的时候是能够保留下来的也就是我们的状态设计要 ...

  2. Python 作用域:局部作用域、全局作用域和使用 global 关键字

    变量只在创建它的区域内可用.这被称为作用域. 局部作用域 在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用. 示例:在函数内部创建的变量在该函数内部可用: def myfunc() ...

  3. P5404 [CTS2019] 重复 题解

    题目链接 观察题目,我们发现直接计算是困难的,先构造单个合法的 \(T\) 分析其性质. 为了构造出 \(T\),先考虑构造时 \(T\) 时什么时候会出现不合法的情况,此时 \(T\) 会有一段和 ...

  4. IDEA的Maven换源

    打开IDEA安装路径,然后打开下面的文件夹 plugins\maven\lib\maven3\conf 在conf文件目录下出现一个setting.xml的文件.(ps:如果没有,请忽略本文,自行创建 ...

  5. 舵机驱动——STM32F407ZGT6探索者——HAL库

    舵机驱动--STM32F407ZGT6探索者--HAL库 1.材料准备 开发板:正点原子STM32F407ZGT6探索者 舵机:SG90 舵机线材分辨:褐色 / 红色 / 橘黄色 -- GND / V ...

  6. JVM-JAVA基本类型

    1 package javap.fload; 2 3 import static jdk.nashorn.internal.objects.Global.Infinity; 4 5 public cl ...

  7. Qt源码解析——一切从QObject说起

    关键词:Qt 源码 QObject 元对象 属性 事件 信号 槽 状态机 概述 原系列文章地址 学习和理解任何框架或库,官方文档可能都是最权威.最有效的信息.Qt也不例外,https://doc.qt ...

  8. 【学到一个新名词】String interning(字符串驻留/字符串内部化)

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在阅读 VictoriaMetrics v1.95.1 的 ...

  9. Cadence SPB 22.1 --学习基础01Day

    1.电路图设计 ①.原理图设计 原理图符号-->原理图库:代替实际电子元器件的符号,主要就是引脚数目.引脚序号与实物对应: ②.PCB设计 PCB符合-->PCB封装库:电子元器件的各种实 ...

  10. 使用 PyTorch 完全分片数据并行技术加速大模型训练

    本文,我们将了解如何基于 PyTorch 最新的 完全分片数据并行 (Fully Sharded Data Parallel,FSDP) 功能用 Accelerate 库来训练大模型. 动机 随着机器 ...