一、前言:
最近公司有一个项目需求需要使用到AI智能识别的功能《垃圾智能AI识别系统》,之前也没接触过这个赛道,刚好前段时间参加过“Baidu Comate智能编码助手”的活动,在公司的项目也是一直在使用,在很多地方帮助程序员开发人员更好地理解和优化代码,提高软件的可维护性和可靠性、安全性。
今天刚好也是接触新的技术领域,经过“Baidu Comate智能编码助手”的几个月的使用的经验,来帮助我从0到1来实现这个《垃圾智能AI识别系统》的项目。
以下是通过“Baidu Comate智能编码助手”从硬件到软件、模型的应用,再到最后工作中的最佳实践,通过本人测试了Vue、Js、Taro、Python、Go等语言的实际场景,“Baidu Comate智能编码助手”提供了智能代码补全、单元测试生成、问题修复等多项AI驱动的功能,使开发者能够专注于创造性工作而非繁琐的设置。
在实际使用中,我深刻体验到“Baidu Comate智能编码助手”的便利,特别是在代码质量的提升方面展现了其独特优势,自动代码注释、智能问题解决建议,以及对话式AI视图的应用,不仅简化了日常开发中的繁琐任务,还显著提高了代码的可读性和可维护性。这些功能不仅仅在我忙碌的开发过程中节省了大量时间,还让我的开发工作更加高效和愉悦。
总的来说,“Baidu Comate智能编码助手”不仅仅是一个工具,更是现代软件开发中不可或缺的助手。它的出现不仅推动了开发工具的技术进步,更为开发者们带来了全新的开发体验和工作方式。期待未来“Baidu Comate智能编码助手”在AI驱动开发领域持续创新,为全球开发者提供更多实用且强大的功能。
【可以来看看我在B站录的一个视屏】:
1.1 项目需求描述:
客户有一个自动化垃圾分拣设备,需要装一个开发板,在AI技术加持下,作业单位可以通过识别不同的生活垃圾图片进行实时分析处理,来决定这个垃圾将要分拣到哪个区域,将AI识别技术用于垃圾分类质量来提高人工的效率,以实现对湿垃圾分类品质的智能管理和监督。
1.2 技术挑战:
与之前接触的Web领域不同,这次的项目是几个部门一起联合协作,IT、AE(自动化工程)、ME(机械工程)等几个部门,IT部门需要做的事情就是通过开发板将垃圾的图片识别出来进行分类,将结果的数据传给AE部门,再通过机械手臂来分拣到对应的区域,因为也是刚刚接触硬件相关的开发,所以,下面大概列举一下这次挑战的技术点:
- 硬件开发板(基于香橙派的OrangePi AIpro(8-12T))
- 图片智能识别领域(基于Python)
- 环境部署(Linux Ubuntu)
因为本人一直在使用PHP进行开发,接下来,就由“Baidu Comate智能编码助手”边问边做,来一步一步的实现完成《垃圾智能AI识别系统》的项目。
二、Baidu Comate智能编码助手,让开发更轻松:
Baidu Comate智能编码助手是基于文心大模型,结合百度积累多年的编程现场大数据和外部优秀开源数据,为你生成更符合实际研发场景的优质代码,它为开发者提供了一种全新的编程体验,使用Baidu Comate插件,无缝融入 IDE,一网打尽GPT-4、Claude等知名大模型 ,帮助开发者提高开发效率,告别脏活累活!
过去一年多,Baidu Comate 智能编码助手走入上万家企业,生成的代码采纳率达 46%。Baidu Comate 智能编码助手支持 100 多种语言和多种 IDE(集成开发环境)平台,可以推荐代码、生成代码注释、查找代码缺陷、给出优化方案,还能深度解读企业与个人私域代码库等。
Baidu Comate 智能编码助手可以使开发人员能够更有效地将人工智能集成到代码生成和文档中,为开发人员提供了一种非常实用和有效的方式来与大型语言模型(LLM)进行交互和协作。
本文是基于Vscode的IDE进行使用“Baidu Comate 智能编码助手”的使用,可以打开官网安装指南进行插件的安装,过程也是比较简单,只需要简简单单的四步操作即可将IDE武装到牙齿,不惧怕各种需求、各种Bug、各种语言,接下来,让我们一起来体验一下“Baidu Comate 智能编码助手”。
三、基于“Baidu Comate 智能编码助手”实现《香橙派垃圾识别的AI项目》的最佳落地实践:
开发板的主要目的是帮助开发人员快速搭建嵌入式系统原型,进行软硬件联合调试和测试,从而提高开发效率和减少开发成本。
本人也是刚刚接触开发板,从“Baidu Comate 智能编码助手”给出的解释是:开发板(Demo Board)是一种用于嵌入式系统开发的硬件平台,它通常包含了一系列必要的硬件组件,如中央处理器(CPU)、存储器、输入设备、输出设备、数据通路/总线和外部资源接口等。
在我个人的理解中是相当于一个小型的主机,由于成本比较低、体积比较小,可以在智能家居、物联网、机器人等项目中,开发板作为核心硬件平台,支持项目的快速开发和部署,本文中我们使用香橙派的OrangePi AIpro(8-12T)开发板来开发运行的环境。
3.1 上传OrangePi手册打造私有在线“AutoWork”知识库:
刚刚接触这个开发板,有点无从下手,需要准备什么样的东西,如何开机使用等问题,从官网下载了一个 使用手册,有近12M的一个PDF,而且有近170页,从头看到尾,估计要花费很长的一段时间,从上个文章了解到“Baidu Comate 智能编码助手”有一个“AutoWork”功能,让我们将这个使用手册上传到在线知识库,让AI来帮助我们使用和理解PDF手册。
在VsCode中的“Baidu Comate 智能编码助手”中,点击“知识模块 -> 知识集 -> 新增知识集”即可在VsCode中打开知识集管理列表,新增一个“OrangePi手册”的知识集,保存后可以在列表中查看,此时,知识集里面是没有文档的,可以⽀持 上传.pdf、.md、.txt、.docx、.doc、.zip、.gz等格式的文件,⼤⼩要小于100M。
将PDF手册上传时,发现有一个错误“包含xss脚本代码”,上传不了,在之前的体验是没有的,只能将PDF手册通过百度的工具转化为可编辑的wrold文档,去掉相关的xss代码即可上传成功。
可以看到在官方这次更新迭代中,增加了不少安全方面的验证,如在编码阶段发现安全问题:通用漏洞、供应链漏洞、机密防泄漏。
这里需要注意一下,刚刚上传的world会显示一个“未激活”的tag,表示当前知识集是否已完成向量化,即上传的文档左上角未出现『未激活』字样,需要等待向量构建,如果构建完成的话,搜索的结果都会优先查找上面的world。
3.2 开发板开机准备:
上面看到可以使用“AutoWork”搭建完成知识库,从知识库问一下,开发板如果需要开机的话,需要使用到哪些配件,需要准备哪些配件:
- Type-C电源线、插头
- SD卡、SD卡读卡器
- HDMI插头
- 散热风扇
通过上面提到的准备的配件后,我们组装在一起,可惜知识库没有提供图片,这里建议后面AI能够生成图片,比如“OrangePi板子如何进行组装配件”,回答的文案跟上面也是接近,无奈这部分只能去看看官方提供的PDF文档,可以看到如下图所示,基本上使用了4个位置的地方:键盘和鼠标USB插头、显示器HDMI插头、电源Type-c插头、SD卡插槽。
插入USB的鼠标和键盘、显示器HDMI线、自带的type-c电源线后,即可以去插上电源了,经过上面配件的组装后,一插入就自动启动了,没有什么开机键,即一通电就自动启动了。
但是有一个问题,等了5分钟除了风扇一直响外,只有一个灯在闪,但是显示器不显示画面,因为开发板肯定是刚买的,大概率问题不大,而且显示的线也是在当副屏幕在使用,所以,硬件坏掉的可能性比较低,让“Baidu Comate 智能编码助手”帮我分析一下是有什么原因导致的?从哪些方面入手处理?
结合“Baidu Comate 智能编码助手”给出的原因与定位的问题点,我们可以使用排除法来确认不能开机的原因:
序号 | 可能存在问题点 | 解决方案 | 难度 |
---|---|---|---|
1 | 检查一下控制启动设备的两个拨码开关,要想从TF卡启动,需要都是右 | 检查无问题 | 1星 |
2 | 可能烧录的时候出现上面异常,导致无法亮灯 | 可以尝试重新烧录一下 | 2星 |
3 | 手里是否有备用TF卡,不过最好使用容量大点的,32G以上,推荐64G | 需要买一张备用卡 | 3星 |
4 | 可能开发板子存在问题 | 这个需要专业人员来解决 | 4星 |
因为手里没有备用的TF卡,只能通过第二种方案重新进行烧录试试。
在询问“如何进行烧录系统”时,可以看到下载操作系统的镜像并没有给出下载的地址,这里也是为了演示,“AutoWork”私有库如何的进行迭代维护,将几个重要的下载地址,通过编辑一个txt文档,上传到对应的知识库中。
首先打开balena烧录工具地址,因为个人办公是Mac电脑,借用了同事的Windows电脑来进行此次的测试,我们选择OS为“WINDOWS”的X86|X64版本下载。
打开下载的balena烧录工具,不用安装,直接就打开了,非常的方便,不用在电脑上安装软件:
- 点击“从文件烧录”选择好我们提前下载的Linux镜像(百度云真的慢)
- 点击“选择目标磁盘”选中我们插入的TF卡(我提前格式化了)
- 点击“现在烧录”就可以开始进行烧录了
经过2个阶段,一个是验证阶段,一个是烧录阶段,最后烧录提示“出了点问题”,这里不用管,下面会解释为什么。
小细节:
- 烧录时,提示U盘找不到,需要重新插入,此时,不用管他的提示。
- 在烧录完成后,提示要格式化,也不需要管,因为在烧录时,就已经开始写成Linux的启动镜像盘了,此时,在windows系统是无法识别的,是正常的。
通过重新烧录系统之后,我们的系统就可以正常启动了,但是界面显示需要输入一个用户名和密码,才能进入系统。
通过使用“Baidu Comate 智能编码助手”查找知识库,马上给我们得到了结果,并且经过测试,输入以下这组用户名与密码之后,即可正常进入系统的桌面。
- 用户名:HwHiAiUser
- 密码:Mind@123
以上就是通过“Baidu Comate 智能编码助手”的“AutoWork”私有库,我需要面对冗长复杂的技术手册,往往需要花费大量时间阅读和理解,占用了开发者大量精力,也会拖慢项目开发进度,只需要简单的将pdf、world、txt等之类的文件,上传到知识库中,能够无缝链接团队的私域知识,即可以挂载各种开发文档、需求文档、API文档等。
通过挂载这些文档,开发者不再需要花费大量时间去翻阅文档、理解新业务逻辑,AutoWork能够直接利用这些现有文档资源,完成理解和分析,加速代码生成,快速实现开发需求。
3.3 开发版本远程链接:
远程连接就是在远程连接另外一台计算机,当某台计算机开启了远程桌面连接功能后,就可以在网络的另一端控制这台计算机了,通过远程桌面功能就可以实时的操作这台计算机,在上面安装软件,运行程序,所有的一切都像是直接在该计算机上操作一样。
一般来说,像开发板的话,会使用使用远程连接来提高工作效率、促进团队协作和资源共享,在询问“Baidu Comate 智能编码助手”如何进行开发板的远程链接,也给出了方案:
- 由于办公环境没有网线,用的是Wifi,所以,先将开发板连上Wifi
- 查看IP地址,使用ip addr命令来查看eth0网卡的IP地址,因为在同一个Wifi中,算是同一个局域内网,可以进行通信
- 开发板上的环境是Linux环境,所以我们使用SSH进行登录
- 登录上开发板环境
上面通过“Baidu Comate智能编码助手”的“AutoWork”构建私有库可以加快对文档的搜索,更好的帮助我们检索想要的答案,而且可以通过不断的更新文件来弥补垂直领域的空缺,将开发板从组装、烧录、开机等阶段的辅助,当然,其中,也会存在一些问题,只有一些文案的描述,如果里面能生成图片就更好了。
3.4 准备开发环境:
因为本人一直是使用PHP和vue在开发项目,没有接触过其它的语言,这次首先使用“Baidu Comate 智能编码助手”帮助查询一下用什么语言开发一个垃圾识别的项目,以下在“Baidu Comate 智能编码助手”的输入框中,输入需要搜索的问题,点击“发送”即可轻松的完成检索。
序号 | 功能 |
---|---|
1 | 活动栏中打开“Baidu Comate智能编码助手”,可以打开一个Baidu Comate窗口。 |
2 | 在问题输入区域,输入我们想要搜索的问题,回车或者点击“发送”按钮。 |
3 | “Baidu Comate智能编码助手”交互式返回答案。 |
从“Baidu Comate智能编码助手”的回答提示来看,可以看到基于当前AI和机器学习领域的流行趋势,推荐使用Python语言。
“Baidu Comate智能编码助手”搜索一下,如何进行python版本的查看,可以判断一下我当前的环境中是否有python环境,给我推荐了一条shell命令行“python –version”,经过在开发板中查看,发现确实没有python运行环境,需要进行手动安装一下环境。
搜索“怎么在Ubuntu安装ptyhon环境”,根据提示的在开始安装之前,建议先更新一下Ubuntu软件包列表,以确保安装的最新的版本的软件包,需要输入shell命令“sudo apt update”,可以看到命令执行,开始下载和更新软件列表,但是在这个过程中,更新很缓慢,等了10几分钟也没更新完,在我的笔记中有更新镜像源的方法,但是查找的过程比较多,让“Baidu Comate智能编码助手”来几秒回答我。
“Baidu Comate智能编码助手”给出的答案,可以分为4步来进行手工来操作切换镜像源:
- 需要备份源文件,因为怕误操作,还可以还原回来,备份/etc/apt/sources.list文件
- 编辑sources.list源文件,但是给出的答案是使用gedit来操作,不过,我个人比较常用vi来进行编辑文件(不过,看个人的喜好)
- 复制清华大学的镜像源,不过,在实际的生产,我个人比较倾向于阿里云的镜像源
- 保存文件后,再使用apt-get update命令进行更新Ubuntu软件包列表,来获取最新的版本的软件包
更新完软件包列表后,继续进行安装python环境,因为现在都是使用python3的版本了,所以,建议使用python3的环境,安装完成后,使用python3 –version查看版本为3.8.0,表示python3的环境是安装成功了。另外,也更新安装一下pip的包管理工具的安装,最终也是安装成功了。
【新知识扩展】:
这里不得不学到一个新的知识,就是虚拟环境,按照理解,就相当于docker一样,会启动一个隔离项目依赖的轻量级环境,非常适合刚入门的开发者,避免环境的问题导致排错困难,弄坏了一个环境,再新建一个虚拟环境即可。
小提示:如果刚接触Python的同学,可以参考一下,Python相当于Node是一个开发语言的环境,而Pip相当于Npm是一个包的管理工具,可以通过pip来安装一些包。
3.5 AI项目智能调试工具 – Jupyter:
在以前跟朋友交流的时候,了解到python有一个Jupyter的在线调试工具,非常的方便,只需要装个软件,就能以web的方式进行访问,然后,可以在web页面进行调试工具,而不需要每个人登录到命令控制台,这样可以减少服务器登录的次数,并且提高了安全的风险,接下来,就让我来使用“Baidu Comate智能编码助手”来了解并使用Jupyter。
Jupyter是一个开源的、基于Web的交互式计算环境,它允许用户创建和共享包含实时代码、数学方程、可视化和文本的文档。Jupyter最知名的组件是Jupyter Notebook,它是一个允许用户编写、运行和分享包含实时代码、方程、可视化和文本的交互式笔记本的Web应用程序。
Jupyter是一个功能强大、易于使用的交互式编程环境,它非常适合数据科学家、研究人员和教育工作者等人群使用。
3.5.1 安装Jupyter:
安装Jupyter Notebook通常很简单,用户可以通过Python的包管理器pip来安装。不过,在安装过程中可能会遇到一些常见问题,如网络连接问题或版本兼容性问题等。为了解决这些问题,用户可以尝试使用国内的镜像源来加速下载,或者更新pip到最新版本。
使用“pip3 install jupyter”命令后,等待几分钟后,提示报错:“pip install jupyter时,提示HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443): Read timed out.”,网络超时了,使用Comate搜索的答案,给了7种方案,可以根据自己的情况来逐一排查,在我这里我觉得第2个方案是最适合的方案。
pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple -vv
前面3个步骤,因为在上面安装Python3环境时,已经更新过软件包列表和安装过Pip3了,这里可以直接省略不需要再次重复安装一遍,在安装Jupyter时,使用“pip3 install jupyter”时,发生了报错Timeout超时的情况,我们可以看到上面通过后面加镜像源解决了这个问题。
当然,这里其实还是推荐上次“Baidu Comate智能编码助手”提到的python3虚拟环境,这样可以隔离安装的环境依赖。
3.5.2 使用Jupyter:
如果想要运行Python,通常有两种方式,第一种方式就是在Python或者IPython的解释器环境中进行交互式运行,还有一种方式就是程序员最喜欢的编写.py文件,在文件中编写python代码,然后运行。
Jupyter是一个基于网页的交互式计算环境,主要用于Python开发,适合数据分析和机器学习,上面已经安装了 Jupyter软件,接下来就让我们来就启动Jupyter软件,根据上面的问答,直接使用以下命令,启动一个Web的服务:
jupyter notebook
在浏览器中进行代码编辑,从浏览器执行代码的能力,并将计算结果附加到生成它们的代码上,打开如下图的“Python 3”,就可以得到一个网页形式的“Python环境”,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示,同时,如果想要在编程过程中编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。
Jupyter提供了一个环境,可以在其中记录代码,运行代码,查看结果,可视化数据并在查看输出结果。这些特性使其成为一款执行端到端数据科学工作流程的便捷工具 ,可以用于数据清理,统计建模,构建和训练机器学习模型,可视化数据以及许多其他用途,详细的功能可以自己摸索一下。
四、“Comate”最佳实践方案 – 基于“MobileNet”的模型的训练:
上面通过“Baidu Comate智能编码助手”,从开发板子的组装到开机、再到安装环境,已经基本上具备了项目的开发,接下来,再接再厉,让“Baidu Comate智能编码助手”继续给我们生成基于“MobileNet”的模型的训练模型。
为了在香橙派的开发板子上,先体验一下图像识别的项目,让“Baidu Comate智能编码助手”帮我们推荐一款适合香橙派Python的垃圾识别图像分类的模型,可以看到推荐了一个“MobileNet”的模型,通过“数据准备”、“模型训练”、“模型部署”和“图像分类”4个大块,可以完成一个垃圾识别系统的开发。
顺藤摸瓜,上面“Baidu Comate智能编码助手”推荐了一个适合嵌入式设备loT设备使用模型 – “MobileNet”模型,通过上下文有效的结合后,帮我生成一个“MobileNet”模型垃圾分类的项目,大概分为5个步骤来实现:“数据准备” -> “数据预处理” -> “模型搭建” -> “模型训练” -> “模型测试”。
同时,“Baidu Comate智能编码助手”也给了一些注意事项与建议,就是在垃圾图片识别中需要图片样本数量最好都一样,而且图片的质量也要比较高,否则容易受到光照、遮挡、角度等多种因素的影响,从而导致模型识别准备率下降。
上面通过“Baidu Comate智能编码助手”生成的《基于MobileNetv2的垃圾分类》的代码,可以看到生成的代码是根据上下文环境来关联的,将代码复制到JupyterLab中执行,发现报错:
ModuleNotFoundError: No module named 'torchvision'
提示’torchvision’模块没有找到,通过“Baidu Comate智能编码助手”的分析是开发板中的Python环境中没有安装torchvision这个模块。
torchvision是PyTorch的一个扩展库,它提供了很多用于计算机视觉的常用数据集、模型架构和图像转换工具。
解决方案:可以通过Python的包管理工具pip来安装torchvision模块,安装成功后,会显示“Successfully installed torchvision-0.19.0”,表示安装成功了。
pip install torchvision
安装模块后,再将生成的代码,复制到Cell中,再进行执行,发现提示“NameError: name ‘train_dataset’ is not defined”,这个问题还是比较简单的,就是说明变量或名字没有被定义,可以自行解决,不需要进行AI询问了。
将修改的代码,再复制到Cell中,再次执行,会提示“FileNotFoundError: [Errno 2] No such file or directory: ‘path_to_train’”,如上,这个提示也是比较简单的,就是找不到对应的文件与目录,此时,需要去找一下需要的数据集,包括2个部分:
- 需要训练的数据集
- 需要测试的数据集
从“Baidu Comate智能编码助手”中,找了不少的方案也没有提供相关的现成的数据集(垃圾图片相关的),没有办法,只能通过在网上和群里询问大家,最后得到了一个公开的垃圾分类相关主题的数据集,里面包含训练和测试的数据集,一共有25个分类的样本图片。
将这些图片直接拖动到JupyterLab中即可上传到开发板中,还是比较方便的,否则只能靠FTP的工具来进行上传了,顺便将以下代码修改为对应正确的路径:
# 假设你已经有了train_dataset和test_dataset
train_dataset = datasets.ImageFolder(root='/home/xxx/data_en/train', transform=transform)
test_dataset = datasets.ImageFolder(root='/home/xxx/data_en/test', transform=transform)
将修改的代码,再复制到Cell中,再次执行,发现又报错了“参数从0.13开始就被弃用,将来可能会被删除。请使用关键字参数”,从英文的警告说明来看,是在0.13版本已经移除了属性,可以使用其它关键字参数来代替。
warnings.warn(
f"Using {sequence_to_str(tuple(keyword_only_kwargs.keys()), separate_last='and ')} as positional "
f"parameter(s) is deprecated since 0.13 and may be removed in the future. Please use keyword parameter(s) "
f"instead."
)
kwargs.update(keyword_only_kwargs)
同样,将错误直接复制到“Baidu Comate智能编码助手”中搜索,可以自动分析错误的原因,并且给出了解决方案“注意到了pretrained参数已经被弃用,并且应该使用weights参数来替代”,然后,通过上下文的环境关系,自动生成修复代码,这个功能非常强大:
- 将pretrained=True更改为weights=’imagenet’来加载预训练的MobileNetV2模型。
- 修正了计算epoch_loss和epoch_acc时的分母,使用len(dataloader.dataset)而不是len(train_dataset),以确保在验证阶段也能正确计算这些指标。
models.mobilenet_v2 并不直接接受一个名为 weights 的参数来加载预训练权重。通常,使用 pretrained=True 来加载预训练的权重,或者不想加载预训练权重,则使用 pretrained=False。不过,这个参数在0.13版本就已经被废弃了,应该使用新的参数,即将 weights=‘imagenet’ 替换为 pretrained=True。
再次执行修正后的代码,还是提示报错“Target 25 is out of bounds”,表示目标的索引值超过了范围,在执行train_model的方法里出现错误,在Criterion这个方法已经开始出现错误了。
通过“Baidu Comate智能编码助手”分析,是因为训练集或者测试集包含了超过4个不同的文件夹名称,才会导致目标标签的索引超出了模型输出类别的范围,同时,给了3个排查问题的方案,可以看到第一个方案“检查数据集文件夹”就描述了train或test文件夹中是否只包含了4个子文件夹,经过查看文件夹,确实有23个子文件夹,找到问题发生的原因了。
通过最后修改后的代码,经过了九九八十一难,可以看到就可以进行模型的正常训练了,代码中进行了循环10次,每一次完整的迭代称为一轮(epoch),通过对数据的观测,loss的值在不断的下降,accuracy在不断的提高。
五、“Comate”最佳实践 – 基于“MobileNet”的模型的推理:
> 基于MobileNet的模型进行推理测试主要涉及几个关键步骤,包括模型加载、预处理输入数据、执行推理以及结果输出。
模型加载:首先,需要加载预训练的MobileNet模型。这通常涉及使用适当的库(如PyTorch、TensorFlow等)从文件中加载模型。例如,在PyTorch中,可以使用torch.load()函数加载模型,并使用model.eval()将模型设置为评估模式,关闭dropout等层在训练和评估间的切换。
预处理输入数据:在将输入数据送入模型之前,通常需要进行一些预处理,如调整图像大小、归一化等。这有助于确保输入数据符合模型的预期输入格式。
执行推理:将预处理后的数据输入到模型中,并执行推理。这通常涉及将数据转换为张量格式,并可能将其转移到GPU上进行加速(如果可用)。
结果输出:模型推理完成后,会得到一些输出。这些输出可能是分类结果、检测到的物体的位置和类别等。需要将这些输出转换为易于理解的格式,如打印到控制台或保存到文件中。
上面通过“Baidu Comate智能编码助手”给出的代码,可以正确的识别到图片是什么垃圾分类,思考一下,能不能识别图片后在上写上对应分类的文字信息描述,说明一下这张图片是哪种垃圾分类呢?是哪种类型的垃圾呢?
本人开发过小程序的图片写字,主要是使用canvas来画图,python因为也是刚接触,使用“Baidu Comate智能编码助手”来搜索一下“python如何将图片写上文字”,给出一些答案,使用PIL来进行画图,通过在网上查到simsun.ttc字体的下载路径,下载解压之后,上传到Jupyter进行测试,可以看到把图片可以写上文字。
最后通过修改的相关修改,增加了垃圾的类型,找了几张图片,通过上面的实验,可以看到在香橙派OrangePi AIpro上运行基于MobileNetV2垃圾分类项目,可以看到有一个电池的图片没有识别正确,识别的结果为“牙刷”,这样表示模型还是不够完美,还需要可以增加多一点的test图片,再自己训练一下模型,以达到更加精确的效果。
以上就是通过“Baidu Comate智能编码助手”,使开发人员能够更有效地将文言大模AI集成到代码生成和文档中,通过对基于“MobileNet”的模型垃圾图片的识别项目,打破传统的以代码为中心的范式,利用“Baidu Comate智能编码助手”为开发人员提供了一种非常实用和有效的方式来与大型语言模型(LLM)进行交互和协作,可以看到在超越简单的代码自动完成和对代码片段的有限操作。
六、企业项目“帮我想”的最佳落地实践 – 精确的分析代码上下文能力:
上面我们体验了“Baidu Comate智能编码助手”强大的搜索与回答功能,可以让开发的效率变的事半功倍,那在平时的企业项目中,如何来最佳实践使用呢。
大家会不会跟我一样,在公司是负责好几条产品业务线,经常会遇到同事请假、代码评审、员工交接、核心模块业务等情况:
- ①. 不得不去阅读别人的代码
- ②. 有时候没有太多的注释,只能是先理解再去加功能修改
- ③. 线上紧急Bug修复,往往只能依托测试需要怎么改就怎么改?
虽然,我在公司也导入了不少代码检查工具,如各种lint插件、sonarQube平台,来尽量减少代码的容错性、增加代码的健壮性。
但是,这些解决方案只能解决一些基本、简单的一些错误,比如一些语法错误、格式错误,遇到一些非语法性的错误,比如进行逻辑分析明显就比较吃力了,今天给大家来介绍一下“Baidu Comate智能编码助手”的上下文控制,你就知道有多么方便和高效了。
6.1 代码分析解释功能:
以下是我们下单流程中,比较核心的代码,一大堆代码,看着都头晕,那我们如何使用“Baidu Comate智能编码助手”来进行代码的逻辑分析呢?在方法或者函数上会出现“解释代码”,选择即可进行Baidu Comate会话分析。
使用“Baidu Comate智能编码助手”可以直接在代码中的函数或方法上面有“代码解释”的按钮,直接复制当前代码并在Comate中进行搜索给出代码的相关注释,再也不用像GPT4一样,复制一段代码到网页上,再进行搜索,大大的节省了来回切换的操作时间。
6.2 代码Review与优化:
随着业务的增长和开发团队的成员快速增加,其中很多团队成员来自各个门派,在编码的风格和习惯中也出现各异,而且团队成员的技术水平和知识储备量也是会不一样,根据项目工期的时间产出的结果也是不一样,所以,公司会进行代码Review这个环节,通常在相互 codereview 时发现很多代码上的问题,久而久之代码出现了代码难以维护的问题,甚至还会出现低级错误,以下是在给团队成员提出的建议。
经常进行代码Review的同学会发现,这是一个比较耗时又费力的过程,即要了解当时的业务逻辑,又要去排查是否存在逻辑问题,是否有Bug的存在,接下来让我们使用“Baidu Comate智能编码助手”的调优建议来尝试一下,AI帮我们优化代码。
先给一个实际项目中使用的代码块,主要作用是用于微信H5的链接进行分享,需要先进行微信的API相关授权才能使用,代码如下:
setShareConfig() {
// 当前网页的URL,不包含#及其后面部分(带分销码)
const currentUrl = window.location.href.split('#')[0]
// const currentUrl = ''
//分享链接(不带分销码)
const baseUrl = window.location.href.split(/?|#/)[0]
// const shareUrl = baseUrl + 'redirect.html?app3Redirect=' + encodeURIComponent(currentUrl)
// const baseUrl = ''
// const shareUrl = baseUrl + 'html/redirect.html?app3Redirect=' + encodeURIComponent(currentUrl)
console.log('currentUrl', currentUrl)
// 微信公众号数据
const appId = this.proData.appId || ''
api.signature({ appId, url: encodeURIComponent(currentUrl) }).then(res => {
const configInfo = (res && res.result) || {}
wx.config({
debug: false,
appId: configInfo.appId,
timestamp: configInfo.timestamp.toString(),
nonceStr: configInfo.nonceStr,
signature: configInfo.signature,
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']
})
wx.ready(() => {
wx.updateAppMessageShareData({
title: this.proData.shareTitle, // 分享标题
desc: this.proData.shareDesc, // 分享描述
// imgUrl: this.proData.shareImgUrl, // 分享图标
imgUrl: baseUrl + 'logo.png', // 分享图标
link: currentUrl, // 分享链接
success(res) {
console.log( "jssdk success:"+this.title+","+this.desc+","+this.imgUrl+","+this.link);
console.log(res)
},
fail(res){
console.log( "jssdk error:"+this.title+","+this.desc+","+this.imgUrl);
console.log( "jssdk error");
console.log( res)
}
})
wx.updateTimelineShareData({
title: this.proData.shareTitle, // 分享标题
desc: this.proData.shareDesc, // 分享描述
// imgUrl: this.proData.shareImgUrl, // 分享图标
imgUrl: baseUrl + 'logo.png', // 分享图标
link: currentUrl, // 分享链接
success(res) {
console.log( "jssdk success:"+this.title+","+this.desc+","+this.imgUrl+","+this.link);
console.log(res)
},
fail(res){
console.log( "jssdk error:"+this.title+","+this.desc+","+this.imgUrl);
console.log( "jssdk error");
console.log( res)
}
})
})
wx.error((res)=>{
console.log( "jssdk error");
console.log( res)
})
})
},
点击“调优建议”即可将这段代码自动添加到Baidu Comate中,可以发现会自动进行分析,然后给出结果,可以看到结果也是会很快就出来了,给文言大模型点赞。
“Baidu Comate智能编码助手”根据上下文进行AI分析后,类似大家来找碴的功能,很快就帮我们分析出存在4个问题点,如下:
①.重复的代码块:wx.updateAppMessageShareData和wx.updateTimelineShareDa ata 两个方法的调用中,存在重复的代码块,如imgUrl和 link的赋值,以及success和 fail的回调函数内容。
②.未使用的变量:currentUrl变量被打印到控制台,但在后续代码中并未被使用。
③.可能的逻辑错误:在fail回调中,this.title、this.desc和this.imgUrl可能能是未定义的,因为this在回调函数中可能不指向预期的上下文。
④.代码风格:注释掉的无效代码行应该被完全移除,以保持代码的整洁。
接下来就是“Baidu Comate智能编码助手”根据存在的问题点进行代码的优化,以下为优化后的代码Code:
最下面会把做了哪些优化的说明进行了描述,可以让我们自己去比对一下,哪些功能是否真的需要被优化。
通过上面的问题点以及优化说明,我们可以对源代码进行一个分析,哪些确实是可以被优化,可以看到基本上给出的98%是分析正确的,只有一个“未使作的变量”,可以看到在项目中确认有在使用,猜测可能是因为console.log进行了误判断。
之前需要花费10分钟才能完成的Code Review工作,现在交给“Baidu Comate智能编码助手”进行AI分析后,只需要3秒就能生成结果,再根据结果进行分析一下,效率可以提高90%,而且还有一些建议是自己没想到的功能优化,非常适合在团队中使用,有利于软件工程最佳实践落地,新手也能写出成熟代码。
以下为“Baidu Comate智能编码助手”进行代码优化之后的Code:
setShareConfig() {
const baseUrl = window.location.href.split(/?|#/)[0];
const currentUrl = window.location.href.split('#')[0];
const appId = this.proData.appId || '';
api.signature({ appId, url: encodeURIComponent(currentUrl) }).then(res => {
const configInfo = (res && res.result) || {};
wx.config({
debug: false,
appId: configInfo.appId,
timestamp: configInfo.timestamp.toString(),
nonceStr: configInfo.nonceStr,
signature: configInfo.signature,
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']
});
wx.ready(() => {
const shareData = {
title: this.proData.shareTitle,
desc: this.proData.shareDesc,
imgUrl: baseUrl + 'logo.png',
link: currentUrl
};
wx.updateAppMessageShareData(shareData).then(res => {
console.log("jssdk success:", shareData.title, ",", shareData.desc, ",", shareData.imgUrl, ",", shareData.link);
console.log(res);
}).catch(res => {
console.log("jssdk error:", shareData.title, ",", shareData.desc, ",", shareData.imgUrl);
console.log("jssdk error");
console.log(res);
});
wx.updateTimelineShareData(shareData).then(res => {
console.log("jssdk success:", shareData.title, ",", shareData.desc, ",", shareData.imgUrl, ",", shareData.link);
console.log(res);
}).catch(res => {
console.log("jssdk error:", shareData.title, ",", shareData.desc, ",", shareData.imgUrl);
console.log("jssdk error");
console.log(res);
});
});
wx.error((res) => {
console.log("jssdk error");
console.log(res);
});
});
}
6.3 失之东隅收之桑榆 – 不要为了优化而优化:
有一句古话说的是“物极必反”,描述指事物发展到极端;必定会向相反方向转化。有些代码的优化可能要看当时的场景与上下文,觉得是否需要进行优化,以下面的例子来看,从我们IT开发的软件角度来看,经常需要使用一些设计模式来帮忙解耦,非常推荐这种做法。
但是在上述的场景中,个人的角度来看,就有点优化过头了,2行代码,从阅读代码来看,可以一目了然,所以,需要看实际的场景来决定是否需要优化,个人觉得对于复杂度高、很大块的函数结构体,使用“调优建议”非常推荐。
七、企业项目“帮我改”的最佳落地实践 – 写好Prompt,更懂、更知、更精准:
原来需要2小时的工作,用“Baidu Comate智能编码助手”只需要几分钟就能完成,剩下的时间摸鱼不香吗?Prompts到底是个什么东西?提示词?指令?是不是感觉很拗口,很陌生?
大家都看过《龙珠》吧,Prompts其实就相当于咒语,召唤时只需要大喊:“出来吧,神龙。”,就可以召唤出不同的“神龙”, “Baidu Comate智能编码助手”就是扮演这样的角色,用来更好的回答你的问题。
使用中文提示词可能会得到不错的结果,但是当你再次输入相同的中文提示时,结果可能与之前大相径庭。因为“Baidu Comate智能编码助手”背后的文言大模型对中文的理解每次都不同,以保证输出效果。
Prompt,也称为指令或提示语,是人工智能和自然语言处理领域中常用的术语。它指的是输入到计算机系统中的一段文本,用来激活代码模型对用户问题进行回答或执行某些任务。Prompt的作用是把用户的问题或需求转换为模型可以运行的指令。
下面结合一个我当时在公司项目中,花费了1天半时间搞出来的身份证校验功能,当时,也是各种网上百度搜索,找各种相关的例子进行测试,迭代了好几个版本,才符合公司的项目业务要求,以下为目前的代码。
/**
* 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]
* 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]
* 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )
* i为身份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置
*/
export function idCardValidate(idCard) {
idCard = trim(idCard);
// 检验身份证格式(包含15和18位,但未校验长度)
if (!/^[1-9]d{5}(18|19|20)?d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]?$/.test(idCard)) {
return false;
}
if (idCard.length == 18) {
if (isTrueValidateCodeBy18IdCard(idCard)) {
return true;
} else {
return false;
}
} else if (idCard.length == 15) {
return true;
} else {
return false;
}
}
/**
* 判断身份证号码为18位时最后的验证位是否正确
* @param idCard 身份证号码
* @return
*/
function isTrueValidateCodeBy18IdCard(idCard) {
var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子
var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 身份证验证位值.10代表X
var a_idCard = idCard.split(''); // 得到身份证数组
var sum = 0; // 声明加权求和变量
if (a_idCard[17].toLowerCase() == 'x') {
// 如果是小写x是校验失败
// if(a_idCard[17] == 'x') {
// return false
// }
a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作
}
for (var i = 0; i 17; i++) {
sum += Wi[i] * a_idCard[i]; // 加权求和
}
var valCodePosition = sum % 11; // 得到验证码所位置
if (a_idCard[17] == ValideCode[valCodePosition]) {
return true;
} else {
return false;
}
}
我们通过不同的Prompt来询问“Baidu Comate智能编码助手”,来询问得到的是不一样的结果,越详细的描述,就会越得到接近你理想的结果:
- ①. 方案1:使用vue2写一个识别是否为身份证的函数
- ②. 方案2:js生成一个验证身份证是否合法的函数
- ③. 方案3:js生成一个验证身份证是否合法的函数,包括15位的身份证
【第1种方案】个人感觉比较原始和初级,只是对于身份证的长度做了一些校验,而且数字与X做了校验,平时大家也写过正则吧,这样的正则,如果可以使用的话,可以在几秒钟就能生成一个,相对于我们自己写,还需要测试,方便了许多,但是,在这里如果是项目中使用的话,可能要求还要需要提高一下。
【第2种方案】可以看到与我们项目的正则非常贴近了,但是这里没有对老的身份证15位进行校验,为了严谨性,项目还是需要对15位的身份证进行校验,而且这里生成了不同的身份证类型(含有X字母)的示例,相信有一部分同事在开发过程中,可能还不知道有这个“X”字母的场景,继续优化一下。
【第3种方案】可以直接在项目中使用,可以发现代码,比我们目前的还要精简,可以看到,我们总共花费了不到3分钟,就写出了一个符合真实项目需求的身份证正则校验函数,可以让我们节省大量的时间来花费在业务上,在项目中替换上面对应的代码,可以看到如下,是没有问题的。
八、企业项目“帮我写”的最佳落地实践 – 一键生成单元测试,提高代码健壮性:
还有一个最直观的提效功能,就是可以利用“Baidu Comate智能编码助手”的能力写代码、写注释、写单元测试、检测及修复bug、解释代码含义、提高代码可读性,以及对代码进行性能检查、安全性检查、代码风格检查,问各种技术问题等,可显著提高开发效率。
常常我们的工具库,一般会复用到很多的项目中,一般来说,基本上都需要写单元测试,保证基础服务的一个稳定性,“作为最底层的类库,测试管不了的我要管,开发不管的我也要管”,在实际工作中,都知道单元测试的重要性,写单元测试也是比较占开发工作量的。
- ①. 开发因为项目周期的原因是不会写单元测试的。
- ②. 开发工程师写的单元测试用例也不够全面。
- ③. 软件测试工程师很多时候因为技术能力达不到。
今天,这些条件统统都不存在了,我们可以利用“Baidu Comate智能编码助手”来进行单元测试,只需要在函数上将需要生成单元测试的代码使用“生成单测”,即可直接上传代码,并生成了单元测试的代码,非常的快速,比人为的开发效率还要高,可以点击“采纳”将会自动创建一个文件,保存即可。
需要注意一下,将头部的两个js函数(isTrueValidateCodeBy18IdCard, idCardValidate)修改为引用js工具类中的函数即可。
import {isTrueValidateCodeBy18IdCard, idCardValidate} from '../src/IdCard-Validate'
function trim(str) {
return str.replace(/^s+|s+$/g, '');
}
describe('idCardValidate', () => {
test('正确的18位身份证应返回true', () => {
const validIdCard18 = '110105199007067890'; // 示例身份证号,实际校验码可能不正确
expect(idCardValidate(validIdCard18)).toBe(false);
});
test('正确的15位身份证应返回true', () => {
const validIdCard15 = '110105900706789'; // 假设的15位身份证号
expect(idCardValidate(validIdCard15)).toBe(true);
});
test('错误的身份证格式应返回false', () => {
const invalidIdCard = '123456789012345678'; // 格式错误,长度不对
expect(idCardValidate(invalidIdCard)).toBe(false);
});
test('包含空格的身份证应返回false(在trim函数正确实现的情况下)', () => {
const idCardWithSpaces = ' 110105199007067890 '; // 前后有空格
expect(idCardValidate(idCardWithSpaces)).toBe(false); // 假设trim函数已经正确移除了空格
});
test('18位身份证校验码错误应返回false', () => {
// 假设我们将isTrueValidateCodeBy18IdCard替换为返回false的函数来模拟校验码错误的情况
const originalValidateCodeFunc = isTrueValidateCodeBy18IdCard;
const invalidIdCardWithWrongCheckDigit = '11010519900706789X'; // 假设校验码错误
expect(idCardValidate(invalidIdCardWithWrongCheckDigit)).toBe(false);
});
// 可以添加更多测试用例,覆盖更多的边界情况和异常情况
});
import {isTrueValidateCodeBy18IdCard, idCardValidate} from '../src/IdCard-Validate'
function trim(str) {
return str.replace(/^s+|s+$/g, '');
}
describe('idCardValidate', () => {
test('正确的18位身份证应返回true', () => {
const validIdCard18 = '110105199007067890'; // 示例身份证号,实际校验码可能不正确
expect(idCardValidate(validIdCard18)).toBe(false);
});
test('正确的15位身份证应返回true', () => {
const validIdCard15 = '110105900706789'; // 假设的15位身份证号
expect(idCardValidate(validIdCard15)).toBe(true);
});
test('错误的身份证格式应返回false', () => {
const invalidIdCard = '123456789012345678'; // 格式错误,长度不对
expect(idCardValidate(invalidIdCard)).toBe(false);
});
test('包含空格的身份证应返回false(在trim函数正确实现的情况下)', () => {
const idCardWithSpaces = ' 110105199007067890 '; // 前后有空格
expect(idCardValidate(idCardWithSpaces)).toBe(false); // 假设trim函数已经正确移除了空格
});
test('18位身份证校验码错误应返回false', () => {
// 假设我们将isTrueValidateCodeBy18IdCard替换为返回false的函数来模拟校验码错误的情况
const originalValidateCodeFunc = isTrueValidateCodeBy18IdCard;
const invalidIdCardWithWrongCheckDigit = '11010519900706789X'; // 假设校验码错误
expect(idCardValidate(invalidIdCardWithWrongCheckDigit)).toBe(false);
});
// 可以添加更多测试用例,覆盖更多的边界情况和异常情况
});
之前一直是vue2中开发,也没有使用过vue3,所以,在comate中搜索“vue3如何使用jest”,看看是如何回答的?生成的shell命令是可以直接点击“插入到终端中”,就可以直接将命令复制到了控制台中,非常的方便,不用再来回进行复制了。
安装完成相关依赖后,进行第二步“配置Jest”,需要创建一个配置文件,这里不能用采纳了,因为会在原来的文件复制以下代码,可以使用“新建文件”,不过,这里的文件名可以自动处理成“jest.config.js”最好了。
第三步不用编写了,因为上面我们已经生成了单元测试的文件,可以直接进行第四步运行测试文件。
在根目录下添加配置文件后,使用“yarn test”来执行单元测试,发现报错了,原因是因为没有安装@vue/vue-jest的相关依赖,可以使用“yarn add @vue/vue3-jest”来安装相关的依赖。
再使用“yarn test”执行一下,可以看到上面花了1分钟不到写的单元测试,已经全部通过测试,以前我们写单元测试的话,感觉最少也要10几分钟,而且还是需要不停的进行调试。
此外,还有还可以进行安全检查、代码风格检查、清洁代码等功能,可以看到利用此插件可显著提高开发效率和代码质量,感兴趣的程序员们赶快试试吧。
“Baidu Comate 智能编码助手”在自动化编写和执行单元测试方面具有巨大的潜力,通过使用文心大模型,可以提高测试效率和代码质量,解放开发人员的生产力。在未来,随着人工智能技术的不断发展和完善,相信AI大模型在软件开发领域的应用将越来越广泛。
九、企业项目“帮我学”的最佳落地实践 – AutoWork打造“私人研发助理”:
AutoWork可以帮助企业根据个性化需求,定制智能研发能力,通过对接私域知识让Comate更理解业务,也可以用自有代码库来对模型精调,打造更适合每家企业自己的智能代码助手。
AutoWork可以能够深入理解本地代码库和企业内部的一些垂直私域的知识,开发者只需要明确开发“目标”和“意图”,AutoWork 便能自动检索必要的背景知识、独立分析产品需求,通过“智能问答”与“结合私域知识生成代码”匹配最佳解决方案并生成代码,能够更好地完成开发指令。
大多数公司都有自己的私有化仓库,比如,组件库、UI库、工具Utils库,但是这些都需要配置大量的说明文档,比如像Ant Design的官网,需要提供非常详细的API相关说明文档、代码示例、场景Demo,如果需要记录组件所有的特性,这不是一个小的工程量:
- ①. 支持非常丰富的组件,包括按钮、表格、弹框等
- ②. 组件中包含大量的API接口、属性、事件、样式变量
- ③. 组件不同场景的代码,如输入框、带搜索的输入框、带图标输入框
- ④. 复合高组组件,通常将不同的一级组件相互组合成一个大的复合组件
虽然公司内部也是有类似相关的在线知识文档,但是由于内容篇幅较多,新人使用起来也是需要花费大量时间来理解的,但是接触过“Baidu Comate智能编码助手”的AutoWork就会发现,在需要掌握新的知识体系时,无需开发者翻阅大量文档去理解复杂逻辑,只需直接要求 AutoWork 梳理代码架构,便会给出清晰完整的解释,实现“哪里不懂问哪里”。
打开官方首页,点击头像出现的弹框,选择“知识中心”,跳转到知识中心页面,也可以直接访问知识中心,可以发现官方默认有3个知识库体系,“Paddle团队官方知识集”、“千帆官方开发文档”、“BOS官方开发文档”。
点击“新增知识集”,将我们其中一个联合组件(由Field和ActionSheet 两个组件组合而成)的文档上传到知识集中,让AutoWork来帮助帮助回答,如下为在公司内部的Wiki文档关于下拉选组件的描述:
## 天玑下拉选组件
由Field和ActionSheet 两个组件组合而成。
### 组件属性
属性包括Field(除readonly、clickable之外)的所有属性,和本组件特定属性
[Field的官方属性](https://youzan.github.io/vant/#/zh-CN/field#props)
**本组件特定属性如下:**
|参数 |说明 |类型 |默认值|
|--|--|--|--|
|options| 选项列表数据,与[actionSheet组件的actions属性](https://youzan.github.io/vant/#/zh-CN/action-sheet#props)一致 | array | [] |
|keyMap| 设置数据项中分别与“标签”和“值”对应的key, 如 ['name', 'id'] | array | ['label', 'value'] |
| optionsTitle | 选项列表的标题,实际是actionSheet组件的description属性 | string | '' |
| actionSheetProps | 组件内actionSheet组件(除actions、description)的所有属性的对象集合 | object | {} |
br/>
keyMap实例说明
如:现有一个项目列表,我们想选择对应项目,绑定值为项目的id。可以如下设置。
let items = [
{
id: 001,
name: '项目一',
desc: '项目一描述',
addr: '上海'
},
{
id: 002,
name: '项目二',
desc: '项目二描述',
addr: '北京'
},
];
cx-field-select
label = "所属项目:"
placeholder = "请选择所属项目"
v-model = "itemId"
:options = "items"
:keyMap = "['name', 'id']"
optionsTitle="请选择所属项目"
/>
这样子列表显示的内容为列表名称(name),绑定的值为项目ID(id)
通过上面的形式,将组件的markdown的说明文档上传到知识中心,可以看到能支持很多文件格式,非常的强大,不需要对源文件进行转格式,通过挂载指定的开发文档、需求文档、API文档等,并应用文心大模型的能力,对这些私域研发知识进行快速理解、分析和应用,实现从需求到代码全部自动生成。作为研发人员,不再需要花费大量时间去翻阅文档,实现“一键式”高效编程。
在“知识中心”添加后,需要在IDE中使用的话,可以在“知识 -> 新增知识集”中,选择刚刚新增的知识集,即可添加所需的知识集,这里建议可以直接自动同步一下。
上面,我们通过“Baidu Comate智能编码助手”的AutoWork,通过上传的pdf、markdown、world等资料,轻构构建私域的“智能问答”体系,让IT开发人员与代码库直接“聊天”,无论是了解整体架构、探索特定的实现逻辑,还是梳理代码间的复杂依赖关系,AutoWork 都能实时给出清晰准确的反馈,使开发者能够迅速把握项目的全貌。
9.1 “网页 – 知识集” AutoWork:
上面演示了如何使用自己的储备库搭建在线AutoWork知识集,比如开发PHP的Laravel文档,之前都是去看一些在线的文档,这个需要有办法也能集成到AutoWork知识集中吗?
当然,官方早就支持,输入一个页面的url,即可得到这个页面相关的信息,我们可以针对性的进行这个网页生成AI的智能问答,再也不用看这种全屏、半屏,到处充斥着广告信息,最主要的是专注某个垂直的知识领域。
接下来我们使用“网页知识集”搜索一下“https://laravel.p2hp.com/”,并且我们咨询一下问题“如何安装Laravel”,可以看到会给我们从网页中分析并得出一些结论,速度非常的快。
如果本地是没有compose这个PHP的依赖管理工具的,接着进行问答“Linux如何安装composer”,可以看到这里是可以进行多轮对话的,针对同一个问题。
通过上面进行问题搜索的答案,可以在Linux本地环境中,快速进行安装体验一下,可以发现完美安装上了,这样以后就可以在IDE中一问一答的方式解决大量阅读在线文档的痛点,直接让Comate去大量的阅读,给我们想要的结果即可。
9.2 小结:
“Baidu Comate智能编码助手”实现了从单一生成代码进化到系统化处理复杂研发任务的新阶段,开发者仅需明确目标和意图,AutoWork便能深度解读代码库,制定执行计划并智能生成代码,实现了从需求解析到代码实现的端到端自动化。
“Baidu Comate智能编码助手”基于⽂⼼大模型超强的思维链能力, AutoWork能够像一个智能体一样来思考和执行任务,能够听懂人的需求,然后顺序执行需求拆解、制定计划、生成代码、调试运行等步骤。
十、思考工作中传统模式团队开发的痛点:
随着AI人工智能、机器学习的不断发展,开发者的编程领域也在经历着一场前所未有的变革,在这个过程中,AI智能编程工具的出现为开发者们提供了一种全新的编程方式,AI辅助代码编程也已经成为了一个十分备受关注的领域。
作者也是经过了以上几个阶段的软件开发历程,从Web时代编程、到云时代分布式编程,到如今的AI时代,传统编程是人类程序员手动编写代码来实现特定的功能,而通过使用AI辅助代码编程可以半自动化或全自动化的生成代码,从而提高编程效率和代码和质量,此外,AI辅助编程还可以帮助开发人员更好地理解和优化代码,提高软件的可维护性和可靠性、安全性。
接下来分析一下我们在工作中会遇到有哪些问题点,以及这些问题点如何的使用“Baidu Comate 智能编码助手”来优化解决?
10.1 公司团队管理痛点:
如下为公司团队管理工作过程中,在开发的过程中,会存在很多团队管理的问题,比如接手不熟悉的业务代码、紧急处理其它业务的Bug、大量的命名、写大量的注释、有限的时间周期完成新技术的开发、代码阅读比较困难、代码无法做优化处理、文档与项目需求丢失。
以下是在多年开发中,遇到的团队管理问题,你是否也会跟我一样也会遇到呢?
- ①. 同事临时请假,领导安排我接替同事的任务继续开发。
- ②. 一个好几年不维护的项目,突然系统出Bug了,领导安排我紧急处理。
- ③. 只给了半个工作日时间,一个中等模块的功能需求紧急上线。
- ④. 很多项目因为工期给的少,导致缺失大量的单元测试,容易线上出Bug。
- ⑤. 突然项目需要使用地图功能,之前没有接触过,需要紧急上线,查阅大量的资料,很多都是错误的、过时的。
- ⑥. 某个项目经过几波人离职,没有任何文档、项目需求,继续开发新功能。
10.2 技术开发痛点:
以下是本人在技术开发中,遇到的一些主要问题点,很多重复的工作,其实可以使用AI的工具来代替。
【场景一】:当需要重复地编写相似的代码,很容易出错。
- ①. Java开发,为了符合DDD领域驱动,写大量的Bean、Dao、Pojo、Service、Controller、Mapper、BO、VO、PO、Domain、Entity、Repository等比较重复的命名文件。
场景二:无法使用自然语言描述生成代码。
- ①. 只需要写一句注释,简单描述自己的需求,就能让Baidu Comate贴合上下文的编程语言习惯,生成相应的代码,参考这个注释、贴合上下文的编程语言习惯,自动生成相应的代码,程序员只需稍作修改就可以满足需求。
- ②. Baidu Comate根据注释来续写生成新代码的能力,大大提高了程序员的开发质量与效率,减少了重复编写代码所需的时间以及会遇到的错误。
场景三:当进行代码Review或者接手离职人员、请假临时对接功能,无法快速接入。
- ①. 面临很多缺乏注释的复杂代码时,理解代码逻辑非常困难。
- ②. 特别是有些写if狂的人,或者有些为了秀技术的,把简单的代码复杂度增加N倍的人,代码的调试变的非常难以阅读。
- ③. 大部分人会重写该模块,增加重构的时间成本,还可能会产出额外的Bug。
- ④. 选中某段复杂的代码片段,让 Baidu Comate 帮你解释、生成注释、拆分函数优化代码和生成单元测试等多种操作,帮助理解代码逻辑,提高代码的可读性和可维护性。
- ⑤. 新入职的实习生也能进行软件工程最佳实践落地,新手也能写出成熟代码,让Baidu Comate成为新人成长路上的好助手。
10.3 比较团队中已有的AI方案痛点:
团队中也有人在使用GPT-4,但是在技术整个团队的普及率比较低,推行也比较困难的,因为使用的成本较高,需要接收海外的短信、海外的银行卡(如VISA卡)、访问OpenAI网站(需要访问外面),而且使用不当还非常容易封号,并且是重要的一点是ChatGPT 4.0是收费的,必须开通plus会员才可以用。
而现在Baidu Comate 智能编码助手公测阶段,背后对接文心大模型,只需要简单的手机号注册,就能把Baidu Comate嵌入到VsCode IDE(还支持JetBrains IDEs、XCode)中,就可以突破上面这些限制,即可在团队中免费无缝体验上GPT-4辅助编程,还在犹豫啥?
十一、“Baidu Comate智能编码助手”推动企业降本增效SWOT分析:
“Baidu Comate智能编码助手”更贴合软件研发现场,通过易用的研发平台、丰富的插件基础能力、自主定制能力以及企业接入私域知识与自有能力等,可以更好地满足企业定制化开发需求,助力企业低成本打造更加适合组织的自有智能代码助手,进一步大幅提升软件研发体验和效率。
“Baidu Comate智能编码助手”持续深化对企业客户需求的关注,在已有的数据安全、交互迅速、部署灵活等优势基础上,更通过此次最新推出的两大重磅能力,实现了对企业私域知识连接和个性化需求的深层次满足。
在企业项目中也实际使用起来了,完全可以满足业务的开发,而且门槛也比较低,基本也没有太多的风险点,下面是个人总结的SWOT,可仅大家参考一下。
值得一提的是,通过AutoWork可以将“智能问答”与“结合私域知识生成代码”相结合,能够深入理解本地代码库和组织内部的私域知识,开发者只需要明确开发“目标”和“意图”,AutoWork便能自动检索必要的背景知识、独立分析产品需求,匹配最佳解决方案并生成代码,能够更好地完成开发指令,通过“知识中心”,这不仅可以减少了开发者需要手动阅读和理解大量文档的时间,也极大降低了由于理解偏差导致的错误和返工,大幅提升开发者体验和效率。
上面通过对“Baidu Comate智能编码助手”的最佳实践体验的过程中,基于文心大模型,提供代码智能生成、研发智能问答能力,可以让代码智能生成,完成工作更高效,特别是可根据当前代码文件及跨文件的上下文,预测出可能的代码走向,给出合适的代码片段,极大地提高了编程效率,让你更专注在技术设计,高质高效地完成编码工作,如下是个人在体验中比较直观的感受:
11.1 “Baidu Comate智能编码助手”全链路、全流程辅助:
“Baidu Comate智能编码助手”是一款AI值得信赖的编程助手,使用起来简单方便。“Baidu Comate智能编码助手”能够帮助开发者更快速、更高效地进行编程工作,是一款非常值得推荐的工具,在IDE之外的其他研发环节,还可通过生成自动化用例、在CLI中智能获取所需命令等能力,帮助开发者全面提升研发效率。
11.2 “Baidu Comate智能编码助手”版本选择:
个人版本提供业务代码与测试代码的生成、代码优化与修复、自然语言对话式技术问答等多维度辅助编码能力,同时支持 100+ 语言与多种主流 IDE,让你的编码更快、更好、更简单,个人推荐使用“人个专业版本套餐”。
当然,企业版本在个人版本的基础之上,同时提供完备的数据报表能力,助力企业分析应用效果、定位效能瓶颈,一站式赋能研发过程降本提效,私有化部署版本涵盖企业版本全部能力,同时支撑大型企业规模化部署与应用,保障使用效果,维护数据安全。
11.3 “Baidu Comate智能编码助手”能带来什么样的提升:
- 代码智能生成,完成工作更高效:
可根据当前代码文件及跨文件的上下文,生成行级/函数级代码、单元测试、代码注释等。沉浸式编码心流,秒级生成速度,让你更专注在技术设计,高质高效地完成编码工作。 - AutoWork研发智能问答,解决问题更轻松:
基于海量研发文档、产品文档、通用研发知识等进行问答训练,为你答疑解惑,助你轻松解决研发问题。
11.4 “Baidu Comate智能编码助手”企业导入可行性分析:
如下是根据“Baidu Comate智能编码助手”体验后,对于企业级项目使用的一些评估项目,可以看出目前前端团队都是使用VsCode,可以零成本进行导入,后端或运维同学,可能比较偏向于其它的IDE工具,如PhpStorm、GoLand、PyCharm,也可以快速的全面的使用,覆盖了前、后、移动端,软、硬件等不同的开发场景,可全面满足业务的多样性。
“Baidu Comate智能编码助手”旨在超越简单的代码自动完成和对代码片段的操作,能够根据当前的代码上下文,预测出可能的代码走向,给出合适的代码片段,极大地提高了编程效率。同时,它也能自动识别编程语言,并给出相应的代码解释,对于学习编程的新手来说非常有帮助。“Baidu Comate智能编码助手”还可以提供代码并进行高效的代码审计,可以在不同场景下都能大显身手。
11.5 “Baidu Comate智能编码助手”和 Devchat对比:
“Baidu Comate智能编码助手”和 Devchat都是用于AI写代码使用的工具,但是在使用后,有一些对比的项目,通过与Devchat进行对比测评,在使用“Baidu Comate智能编码助手”后,在交互便捷性、实用性、准确性等方面都具有明显的优势,特别是“AutoWork”这块,还是感觉在团队推动工程化体系助手比较适合,可以最大程度的帮助我们减少基础代码开发的工作量,尽量将时间花在系统优化、系统性能上建设。
以下为Devchat的一些群里反馈问题点和一些设置:
对比上面的一段代码,我们需要解释一下那段微信注册优化的代码,可以看到Devchat只是将意思稍微翻译了一下,并没有像Comate一样给出了比较详细的解释。
同样,对比上面的一段代码进行单元测试,可以看到Devchat生成了一些答案,明显不是太符合写单元测试的需求。
以上只是个人站在同一个功能进行对比,由于时间关系,还有许多功能未进行测试,大家可以自行对比一下,做一些比较详细的测试。
十二、总结:
相信大多数人看过《校花的贴身高手》吧,其中前期玉佩元神“焦牙子”,帮助林逸在修炼上引路者,使得人生就像开挂一样。在未来AI作为桥梁纽带的情况下,我们或许可以期待一个“开源软件、代码编辑器、可视化编辑器和低代码”更加无缝整合的新时代。
“Baidu Comate智能编码助手”是百度基于文心大模型打造的新一代智能编程工具,借助文心大模型的理解、推理能力,可支持代码解释、技术问答、实时续写、生成单元测试、代码优化与修复、智能CLI等10余项编码功能,实现编程10倍速提效,助力企业研发全流程降本增效。
“Baidu Comate智能编码助手”是一个VsCode等IDE的插件,通过上面的了解与实践,也像“布道师”一样,能够发现对团队的开发工作有着明显的提升开发效率的效果,就像一个“智能编程助手”,帮助开发者更快、更好地解决问题,也让IT开发人员也能开挂一样。
当然,上文没有全部演示完“Baidu Comate智能编码助手”所有好用的能力,在项目开发中,使用VsCode插件和Web页面的GPT会存在很大区别,“Baidu Comate智能编码助手”就像把文心大模型直接嵌入到VS Code中,但并不是简单的嵌入,通过许多一键式交互,直接将代码与AI智能大模型完美的兼容起来,加快代码开发的规范性、效率性、便捷性、低门槛。
“Baidu Comate智能编码助手”可满足开发者代码生成全周期、全场景需求,真正实现 “帮你想”、“帮你写”、“帮你改” 的多场景应用形态。
“帮你想”——为了帮助开发者快速上手新代码,百度Comate上线代码解释功能,可生成对完整函数代码或一段选中代码的解释,帮助开发者迅速理解新代码。同时,百度Comate具备代码知识问答功能,只需在对话框中用自然语言输入问题,即可第一时间获得解答。
“帮你写”——百度Comate具备实时续写、注释生成代码、生成函数注释、生成单元测试等功能。支持单行推荐、多行推荐、多条推荐、代码生成、注释生成、注释文档生成等一系列编码相关能力。此外,百度Comate能够全面分析代码上下文、依赖文件、相邻文件的逻辑关系,使代码语法更规范、逻辑更缜密。
“帮你改”——百度Comate支持对长函数等坏味道代码的优化,也可识别代码中潜在错误并自动修复,这将极大地助力企业研发工作的脚本提效。
号外:给你分享一个免费的编码助手——文心快码 Baidu Comate!百度文心大模型,46%采纳率,百度30%的代码都是它写的!AI这个大腿,你确定不抱一下?快来安装使用吧,送京东卡!
文章转载遵循CC 4.0 BY-SA版权协议,来源于互联网: 文心快码 – 助力《垃圾智能AI识别系统》从开发到上线“全链路环节”增效 | https://blog.csdn.net/wanmeijuhao/article/details/141215602