今年.NET Conf China 2023技术大会,我给大家分享了 .NET应用国际化-AIGC智能翻译+代码生成的议题,今天整理成博客,分享给所有人。 随着疫情的消退,越来越多的企业开始向海外拓展,应用系统的国际化和本地化是一个巨大的技术挑战,我们今天重点探讨以下内容:
- .NET应用如何实现国际化?不仅仅包含资源文件和文本的替换,还有文本词条抽取、智能翻译、代码替换、本地化处理等各种场景。
- 基于Roslyn进行代码分析,查找中文文本、抽取词条,以及代码替换。
- 机器翻译与GPT的Battle,基于GPT4实现一个智能翻译服务。
- 彩蛋环节:如何使用Github Copilot自动生成代码和单元测试。
上图中: 词条类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
标签:代码生成,翻译,Prompt,-.,充电,词条,NET,Charging From: https://www.cnblogs.com/tianqing/p/17963525