前面连续写过两篇AI辅助编程的文章:
·用 AI 解 AI 写的代码 BUG:一次 AI 辅助编程实践
这两次都是以浏览器插件作为研究对象,项目比较小,代码量少,逻辑也比较简单。这次我选择了更复杂的项目:BoringSSL。BoringSSL是谷歌内部使用的一个开源SSL库,Chromium浏览器就使用了这个库。BoringSSL不支持国家商用密码,如果要开发支持国家商用密码的浏览器,就需要对这个库做改造。所以这次就挑战一下,采用AI增加国密算法。
本次所选择的AI依然是腾讯CodeBuddy,其实我更想使用TRAE,但TRAE不提供Linux版IDE,VS Code插件国内版又不支持Builder模式。CodeBuddy支持的大模型很少,但也能用。下面就是我花费半个多小时,使用AI实现国密SM3摘要算法的过程:
最终的结果并没有自动完成算法的编译、运行、单元测试,还是需要人干预。比如有些编译链接错误,AI绕几道也没能解决。但通过这次实践,还是有所收获:
1. AI完成了基本代码的实现,总体框架没有问题,在理解现有代码逻辑上表现不错。看AI的思考过程,也能帮助我们理解代码逻辑,特别是面对大型开源软件时,非常有用。
2. 实现的代码虽然有些错误,稍微修改一下就可以,这比自己从头写还是要快一些。
3. 目前只使用了缺省的MCP Server,支持文件系统和终端,所以能够做到写代码、修改代码,并在终端中编译代码,运行单元测试。如果后面接入更多的 MCP Server,应该可以实现更多的边界扩展,完成更多类型的任务。
4. AI 已经能够实现自我迭代,比如如果出现编译错误,就会根据错误信息去自我纠正,还懂得写单元测试用例,如果测试用例运行出现错误,也会去分析错误,并解决错误。虽然从这次的过程来看,并没有特别智能,可能会不断纠正但始终跳不出错误。但仍然展现出巨大的潜力,随着AI的进步,这些问题会逐个攻破。想象一下,AI写代码,写测试用例,编译,运行,不知疲倦的迭代,那可比人强多了。
当然,目前看来,AI 自动编写代码还有问题,非常奇怪的是,AI 展现出来的问题,在人类看来还是比较低级的,比如说:
1. 编译代码遇到链接问题,有未定义的实现函数,然后AI就不断去搜索函数是否实现,是否文件没有参与编译,来回捣腾了好几次,也没能解决。后来还是我提醒它,可能是C语言和C++语言混用导致的,AI终于明白问题的根源。
2. 文件代码的修改,好多次都使用了正则表达式去处理代码修改,但是又没有写对,造成修改失败。有时看AI分析要修改哪些地方,分析得头头是道,代码位置也指出来了,但是去修改文件时,又会失败。如何正确地修改源码,还有很大的改进空间。
3. 对于运行解决的理解,虽然写了单元测试,并且也分析出单元测试的输出结果应该是怎样的,但实际上运行出错,AI 也没有理解。
从表现来看,并不是大模型本身的问题,而是对于文件处理、命令执行之类的还存在问题,也就是 MCP Server 的处理还存在改进空间。会不会是 AI 想要修改某处,但是落实到真正的文件修改上存在偏差。毕竟AI有思想,要真正落实,比如修改文件,还是需要通过传统的接口来完成。
虽然这次的挑战不是十分成功,但从中我还是看到了 AI 编写代码的巨大潜力,照着这个速度发展下去,要不了几年,真的能取代大多数程序员,我的退休计划也要提前了。