智谱的GLM4.7模型写代码能力名声比较响亮,从分数排名来看,各种指标都比较靠前,所以也想试试用它来写同样的例子,看看效果如何。
微软出品的 VS Code 开发工具里面集成了 Copilot,通过插件能力可以让 Copilot 使用GLM的模型,还好Copilot可以用Github账号能够登录,否则又只能因为网络原因放弃了。登录Copilot才能切换到其它自定义的模型,用同样的工作流例子,总体上还是有一些优势的。
首先,这个例子里拆分了5个小功能,之前用Trae得每次一个小功能才能得到一个不错的效果,这次换GLM模型的时候,也先来一次让它把文档里列的需求都实现,每实现一个功能就生成测试用例并测试通过,测试通过后再实现下一个功能。可喜的是它能连续把多个功能都实现完成,而且能够正确理解每实现完一个功能就进行测试验证的要求。这样就可以看到,它先开发一个功能,产生测试用例,执行测试用例验证,验证出有问题就修改代码,然后再验证,一直重复这个过程直到测试用例测试通过,再进行下一个功能的开发。能够连续把多个需求一步步开发完,中间不需要人工介入,它自己也不会陷入越来越复杂的循环当中,这样的能力如果进一步进步,效果会非常可期。
其次,输出的代码质量合格了。当然这个及格是我个人的标准,个人对代码的优雅是有一点要求的。从生成的代码来看,整体上是比较洁净的,洁净的代码没有太多乱七八糟的打印、if/else之类的,也没有比较复杂难懂的语句,上面还有清晰的注释,看起来还算比较容易维护的。一个小惊喜就是,能够把一些相同的代码抽取出来作为公共的方法,在多处调用。在代码的写法里,能够感受到一个方法只做一件事情的理念,比如本来功能说明里说明是实现一个方法,但这个方法里面有加载文件和启动工作流两件事情,它能够把这两件事分成两个不同的方法实现,这样每个方法就只做一件事情。只给及格是因为里面的代码还是偏过程化的,没有上升到面向对象的程度。
再次,对功能的理解和开源组件的能力理解是比较到位的。之前在Trae上遇到的那些问题,在这里比较少出现,偶尔出现一点,也大多在一次的错误之后就解决了,不需要多轮来来回回尝试。这样既省时间,也省下不少token,还不容易陷入那种越来越复杂的情况。
美中不足的就是后面加了一个超时处理的场景,这个场景没有很好解决。这个超时场景里面隐含了一个隐蔽的问题,工作流组件默认并不会开启异步定时调度,所以任务并不会真的过期,也就不会触发对应的响应代码。需要配置成启动异步定时调度,这个超时调度才能生效,修改的方式比较简单,就是在一开始的初始化增加一个配置即可。但它试了几次,就说成功通过测试用例的验证了,但实际并没有成功。这几次当中,它大概也识别到定时调度可能没有开启,就尝试各种办法去尝试,如果把这个问题去问其他AI工具,里面也会包含这些答案,但这些答案经常是需要花很多时间去验证的,是非常廉价的答案。
这几次验证下来,感觉AI写代码已经发展到一个很强的程度了,可能再发展一段时间,就基本可以完全写出不错的代码了。其实如果对代码没有要求,完全交给AI来完成,应该也能够完成很多功能。只是如果有很多存量代码的时候,这种方式目前风险还是挺高的。