在软件开发过程中,随着需求日益复杂,迭代的速度加快,如何高效地进行服务端开发已经成为工程师们亟待解决的问题。需求的业务复杂度不断提升,但是技术复杂度却没有随之增加,在将业务进行单元化拆解之后,很多技术上的工作其实是较为简单的,这方面的工作我们可在引入大模型技术后,交由大模型进行处理,研发人员只需完成代码审查和修正,而通过大模型技术,服务端开发的效率和质量得到了显著提升。本文将分享一个基于大模型提升服务端开发效率的实际案例,从问题的引入到解决的过程,展示如何通过大模型技术帮助开发者提升工作效率。
**
背景
**
在一个典型的微服务架构及前后端分离的项目中,服务端开发者常常面临以下几个挑战:
1、接口文档编写与维护繁琐:每次修改接口或者添加新功能时,文档的编写与维护往往需要投入大量的时间。
2、代码质量与规范问题:在多人协作的环境下,如何确保代码风格一致性和高质量的代码输出,是一个长期困扰开发者的问题。
3、Bug检测与修复:传统的代码审查和测试流程虽然有效,但却容易错过某些隐蔽的错误,特别是在面对复杂的业务逻辑时。
针对这些问题,本文引入了大模型的技术,以提高开发过程中的效率和质量。
**
大模型技术应用
- 自动化文档生成**
传统上,服务端开发的文档工作非常耗时,特别是在开发过程中接口频繁变动时。通过大模型技术,使用自然语言处理(
NLP)生成接口文档变得可能。例如,开发者只需在代码中注释接口的关键部分,系统可以自动识别并生成API文档。大模型能够理解开发者的注释意图,智能地补充接口说明、参数描述等内容,极大减少了人工编写文档的工作量。
实际案例:
1.1、代码注释生成
调用iFlyCode生成代码注释:
点击采纳即可自动将注释加到代码上面,简单修改下即可使用。如果觉得不合理,建议自行撰写
prompt进行,例如同样的代码。可以在iFlyCode中输入
iFlyCode中会根据prompt提供结果
以上是方法级别的注释,除此之外,我们也可以用
iFlyCode非常方便快捷的为行间代码(主要是属性)添加注释,例如下列请求参数:
利用iFlyCode进行解释后得到响应结果
同样,我们可以使用自定义的prompt进行再次解释,以得到我们想要的结果
点击插入即可完成替换,简单修改之后便可使用。通过自定义prompt还可以指定生成其他格式的注释,例如生成swagger的注释
除了常见的方法、属性等注释之外,每次提交
git的时候,我们也需要写不同的commit message,我们一样可以利用iFlyCode生成这些message信息。例如:
结论:通过
iflyCode进行文档生成,提升效率非常明显。同时结合swagger或者lombok,基本上告别了枯燥的复制粘贴,精力主要集中在检查一遍注释即可。2、代码质量检查与自动重构、编写2.1、质效平台已经支持通过大模型自动审查提交的pr,具体的可以见之前的宣贯
,虽然具备一定的局限性,例如和业务的结合性较小,主要集中在对于编程规范方面的解释,但是存在参考价值,根据我的经验,一个是分钟级完成评审,效率极高,且能检查出部分代码问题,例如魔法值,安全性,日志规范等,第二个是
prompt可以自定义,例如之前我设置的:_
请你扮演一个高级
JAVA代码开发和代码设计人员,对代码进行评审,指出严重问题和错误。如果不存在严重问题或者错误,请回NOPROBLEM。请不要回答建议、简单规范问题,或者不明确的问题和错误。_
_
回答样例格式是:
_
1、严格按照markdown语法、表格的格式输出严重问题或者错误;
2、需求疑问表格包含字段:序号、问题描述、问题类型 、问题级别、解决方案。这些字段作为表头显示在第一行;并在后续自动换行;
3、序号为从1开始的阿拉伯数字;
4、问题描述的定义为:xxx代码存在xxx问题。其中xxx为占位符;
4、问题级别定义为:严重缺陷:很严重的问题,一般缺陷:一般错误,建议:建议类的修改;
6、解决方案的定义为:应改为xxx,或者xxx处理 。其中xxx为占位符;
_
评审的维度和方向包括但不限于从
:_
1.相关配置和依赖是否正确使用;
2.代码逻辑、变量定义、方法的调用是否正确;
3.是否存在写死的配置 ;相关循环、递归、判断等结构是否正确 ;
4.相关模块或者函数是否封装完整,能够相对自闭环;
5.线程使用是否确,是否存在性能瓶颈;
6.是否存在死循环、无穷递归、数据越界、空指针内存泄露 ,是否缺少异常处理;
7.敏感信息是否未加密,如密码,身份证信息等;是否存在不安全的请求和数据泄露风险 ;是否存在SQL注入风险 ;是否存在XSS安全威胁 。
_
评审的代码是:
{{code}}。_
效果如下:
2.2、重构
重构也是提高质量的一个途径。我们现在的项目基本上都是
java8以上了,但是由于不同的编程理念和方式,代码风格也不尽相同,而作为一个团队,保证代码风格的统一也是必要的。除了通过例如编码规范的约束之外,通过大模型进行风格转化也是比较好的方式之一。一个比较简单的代码,想从一个list中,首先按照状态分组,然后统计每个分组的个数,我们可以用不同的风格来实现。例如使用fori,foreach等等 命令式的方式编程。也可以使用stream的声明式方式进行编程,我本人比较偏向于后者。比较容易看懂。例如:
通过iFlyCode:
很方便的改写出符合自己想法的代码。
2.3、改写
比如在修改历史代码的逻辑时,由于代码较为古老,里面的逻辑需要请其他同事帮忙解释,尤其是一部分逻辑在前端实现的,所以经常会拿到前端同事的代码,我不会
Swift代码,但是大模型会。所以非常轻松的实现代码转化:例如:
然后同事甩过来一份前端方法,我就可以直接去找大模型帮我改了:
接下来我只需要验证这部分代码是否完成预期功能即可,或者自己实现一份都可以。
2.4、生成代码
生成代码分为编辑器内的自动提示或者我们通过对话进行生成。
**
关于
idea内的自动提示**
,极大的简化了我们编辑代码的效率,尤其是在没有复杂的场景的情况下。例如我们有类似的代码:
而实际上一个类可能包含很多这种属性,挨个判断编写无疑是个麻烦事而大模型可以做到自动生成:
这种高度重复的场景,极其适合大模型的代码生成,包括生成属性等。
**
第二种则是我们通过对话主动获取代码生成
**
。例如我的工作中常常需要编写
python脚本,或者临时性的一些试验功能。这种情况下,选择java编写并实现较为复杂,而使用python或者bash较为方便,在编写代码的时候可以使用iFlyCode进行自动生成,基本是输入问题,然后得到回复,再修改一番即可使用,例如代码实现:
当然这部分可以直接使用星火
desk进行,可以更好的关联上下文,并进行修改。甚至我最近对于锻炼非常感兴趣,但是市面上并没有免费的记录次数的软件,我想搞个小程序出来,但是我不会编写小程序,经过星火的帮助,目前已经成功实现类一个小程序,后期可以将其单独写个案例出来。包括从生成代码到上线,我只是负责了其中审查和串联的,其他代码基本上都是星火实现的。结论:大模型基本上可以完成非常复杂的业务代码的实现,具备常人不具备的知识库,所以通过大模型的帮助,我们可以完成很多之前做不到的事情,或者比较难搞定的事情。