AI编程实践

AI编程实践,转自我的公众号,欢迎关注

大模型的浪潮滚滚而来,AI编程更是热度非凡。要么拥抱AI,要么被AI取代,在这个背景下,用AI来编程,探索AI编程的能力和边界,在实践中用AI提升编码效率。

仓库地址:https://github.com/qiweijie/stock.git

AI编程工具选择

刚好qwen coder出了新闻,本想体验一下qwen coder,被字节的trace的广告吸引了,简单对比了一下,qwen coder 是一个cli的工具,而trace是一个基于vs code改装的一套解决方案,这里选择trace来做AI编程实践。

选题

刚好最近有在股票交易,我想记录每一笔交易,所以我给agent的promote是

复制代码
我想基于qt开发一个股票交易记录软件,软件主要是记录自己的交易记录,请帮我生产一个prd,用markdown格式

agent很快生成了prd,我快速看了一眼,感觉还可以,接下来的promote是

复制代码
请基于prd生成一个基于c++ 和qt的Windows项目
复制代码
代码生成的效率很高,但结构不是很合理,都是平铺的,让agent自动调节一下,虽然过程有点曲折,但不断能自己纠错,感觉还是可以的
复制代码
把代码按照合适的结构调整一下 

然后开始编译,有错误就扔给agent,然后居然发现,agent的代码居然一次性没有写完,三个小时,agent终于写完了所有代码。

意外的乱码问题

代码生成完后,编译问题的来源大头源自乱码问题,三个小时写了几千行代码,然后花了六个小时解决乱码和编译问题,虽然解决的速度有点慢,但至少解决了,有时候看着都抓急,忍不住自己动手了,但忍住了。

  1. 乱码把换行吃掉了
  2. 乱码把 { 放在行尾了
  3. 识别不了乱码,需要人为提醒

初版界面,不怎么漂亮,但还算能接受

漫长的功能可用性修复

初版的第一天花了三个小时修复了三个大类问题,第二天继续花了大概三小时继续修复其他可用性问题

然后界面大概这样,起码能用起来了

模拟需求变更:UI改版

复制代码
做一次UI的改版:隐藏数据备份、用户设置,把股票信息、交易记录挪到左边,原本下面的操作放到上面

花了两个小时,完成了UI的改版,惊喜的是,交易记录增加了搜索功能,效率杠杠的,但肉眼可见的也有挺多问题,例如菜单栏重复、交易记录的表头有些是英文,列名和数据对不上等问题

接下来的三天优化了6个小时,功能基本可用了

打包成exe

整体可用之后,想着打包成exe可以给别人安装使用,promote是

复制代码
为整个项目编写一个编译成exe安装包的sh脚本,可以在git bash中运行

这次是比较让我震惊的,脚本生成的速度很快,也很规范,甚至还有一个之前我都没有了解过的软件INNO_SETUP,我就让他帮我安装,但他不肯,我想起了Choco,就问agent

复制代码
电脑上已经安装了Choco,如何用Choco安装Inno Setup

agent也给出了正确的答案

复制代码
choco install -y innosetup

因为没有icon,折腾了许久,文本模型生成的icon格式不合法,最终我用别的工具生成了icon,但总的来说,在一个小时内完成了打包成exe脚本的工作,还是让人很震惊。

唯一出手的一次,dll加载失败

我感觉这个超出了模型的范围,所以我出手帮忙解决了

增加一个复杂需求:持仓股数

复制代码
交易记录增加一个字段,持仓股数,计算方式是当前买入或者卖出后,计算操作后持仓的股数

持仓股数的复杂性在于

  1. 这是一个后增的需求

  2. 新增交易记录、更新交易记录、导入交易记录都需要修改

事实上这个需求模型折腾了三个小时才彻底写好,最后的成品如图所示,整体的可用性还是挺高的

整体回顾

  1. 从8.5号开始,到8.7号,花了三个小时写完了基本的代码(5000+行),效率完胜人类
  2. 8.8~8.9号花了六个小时解决乱码和编译问题,有了基本的样子
  3. 8.9~8.10周末花了六个小时解决各种可用性问题
  4. 8.12~8.15 每天1.5*4=6个小时 完成了一次大的ui改版和各种功能完善
  5. 8.16花了五个小时持续完善各种细节
  6. 8.16花了一个小时完成了打包的工作
  7. 8.17 花了三个小时做了最后的收尾工作

历时13天,约30小时,约4人天完成了最终的产品。这还是我第一次用AI编程,中途有各种需求变更、UI改版,如果熟练,速度会更快。

AI编程实践总结反思复盘

AI的优势

  1. AI写代码的速度非常快,非人力可以追赶
  2. AI精通搜索引擎能搜索到的内容,也就是知识广度接近无限,非人脑可以匹敌
  3. AI不畏繁琐,不知疲倦,能克服人性的懒惰
  4. AI agent目前普通具备纠错能力,理论上可以完全自我修正

结合具体的例子来讲解一下

  1. 写代码很快这个是肯定的,自动的肯定比手动快;
  2. 知识广度在写打包脚本的时候体现的比较明显,写出了我都不知道的组件和用法,还有代码里面的用到的数据库,我之前也没有用过,但AI写好了,能work;
  3. 基本所有的代码都会具备异常处理,正常的程序在明显不会有异常的地方,基本不会写if else的异常处理,但AI通常写的比较好看;
  4. 只要你把错误贴给agent,agent基本都能解决,整个实现过程我没有写过一行代码;

AI的短板

  1. AI的脑容量目前不太够,或者是免费的上下文或者缓存有限,给我的感觉就是记不住很多东西
  2. AI理解能力有限,需要得出足够没有歧义的promote
  3. AI本质是概率输出,也就是会一本正经的乱写代码,也会陷入死循环
  4. AI的能力强依赖agent的好坏,agent决定了AI编程的质量

这个也结合例子展开说下体感

  1. 一开始的代码每次写了不到一个小时就停了,感觉应该是有上下文或者输出的限制;这个项目文件不多,十三个cpp,五千来行代码,后面改需求的时候,agent基本要逐个文件的去查找,效率很低,跟人的记忆相比还是差一些
  2. 人交流的时候会有一个默认的语境,但AI没有,所以需要把语境告诉agent,例如我们一般写sh脚本,但agent默认会根据平台来判断,Windows会默认写ps或者bat;还有你让他改一个功能,例如交易记录,他会只改一个地方,例如新增交易记录,更新交易记录和导入交易记录就不会去改
  3. AI会写一些不存在的东西,因为本质上是概率输出,有概率写对,也有概率写错,例如一开始写的代码,还有很多没有定义就使用的case,因为是概率输出,在cpp里面要这么些,却没有去关联头文件有没有实现。甚至有时候改一个换行和空格,能把AI自己绕进去,一直在改换行和空格。
  4. agent的实现太重要了,有时候AI的想法很好,但agent没有实现,导致AI需要不断切换思路方法。agent对任务的拆解也很重要,拆解的太细,效率就会很低;拆解得太粗,任务可能实现不了

如何更好地使用AI编程:扬长避短

  1. 拆解成合适的任务适合AI做,例如写脚本,AI很强大,准确率也很高
  2. 需求要足够明确,AI擅长一次性写对代码,不擅长改代码,所以要把需求尽可能的拆分到明确,尽可能采用组合的方式
  3. promote要足够具体,要给agent传达足够的语境,避免跟agent之间有语境的隔阂;同时描述的足够清晰,例如都要改那些场景,最好能指定文件,虽然失去了AI编程的灵魂,但足够清晰具体的promote是能提升AI编程的效率

AI编程会替代程序员吗

我的答案是不会,但是会提升程序员的生产力,降低对程序员数量的需求,带来程序员的带来失业。

  1. 如果我告诉老板需求我用AI完成了,功能work,但是AI写的代码我还没有时间看,能直接上线吗?

    • 如果是对确定性要求不高、没有复杂的交互逻辑,例如一个网站的静态、一个操作手册,简单来说就是这个成果对客户不会直接损失,老板可能说可以,然后程序员,然后公司的程序员从三个变成一个
    • 但如果是对确定性要求很高,有复杂操作逻辑的,例如微信聊天的发送功能,我跟老板说,我用AI做了一个需求,自测通过,但AI写的代码我没看,能上线吗?老板要是说能上,我只能说这家公司在倒闭的边缘折腾。

程序员本质上提供的是更高的确定性以及承担责任的角色,而AI无法提供确定性,更无法承担责任,责任一定是使用AI的人,而使用AI编程的人就是程序员,或者叫AI程序员。

2. AI作为一种更高级的工具,价格本身不便宜,结合AI能做的事情,其性价比有一定的瓶颈,所以以后程序员要么很便宜,便宜到不配用AI,或者只能用最便宜的AI编程工具;要么程序员很贵,维护质量很高的业务,后者用一个人用AI维护很多个业务。

程序员要怎么拥抱AI编程时代

  1. AI编程一定会很普遍,成为AI编程时代卖铲子的人也许是个好生意,可惜大厂都下场了,普通人估计没什么机会了
  2. 如果还是做程序员,那一定要比多数人更早的拥抱AI编程,尽可能多的吃到AI编程的红利【红利期就是你会用但你同事不会用AI编程的时间段】,提高自己的效率
    1. 可以完成更多的工作,拿到更好的绩效【换钱】
    2. 可以让自己有更多的时间去做自己想做的事情【换时间】
  3. 不断探索先进的AI编程工具,保持自己对工具的掌握程度
  4. 往有复杂逻辑的业务去靠,复杂的业务通常意味着密集的沟通协同,这是AI编程作为单体【目前】不太擅长的