AI编程实战

不久前我用trace体验了一把AI编程,完成了一个股票交易记录软件的开发,这次有个紧急项目,有了上次的AI编程实践,我决定让AI编程帮我一把

工具选择

上次说千问没有IDE,但阿里云出了一个Qoder,在这个紧急项目之前,我刚好开始使用Qoder,接到紧急项目的时候,是时候让AI真正实战一把了。

实战之后,结论,Qoder完胜Trace,还没有体验Qoder的赶紧去体验吧。

需求

复制代码
对一个按照特定方式加密的音频文件进行解密,然后提供常用播放接口(open,read,seek, getPosition)

结合上次AI编程实践的经验,我们知道如何更好地使用AI编程:扬长避短

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

项目实战

编写需求

我用的是markdown格式,有了上次实践的,需求是尽可能描述的越清楚越细致,尽可能不要让AI模型有歧义

复制代码
## 项目背景
## 加密文件具体的加密方式
## 需求
## 项目里面相关的已有代码逻辑介绍
## 接口定义如下
bool open(xxx)
bool read(xxx)
bool seek(xxx)
int getPosition()

需求写好之后,让Agent帮忙生成技术实现方案,promote参考如下

复制代码
我已经写好了一个需求,帮忙生成一个技术实现方案

review Agent生成的技术实现方案

Qoder深深的震惊了我,生成的技术方案文档远远超出了我的预期,有以下几点

  • 任务拆分细致,执行到位,真的跟正常的程序员写代码很像,但比程序员做的更好
  • 速度快且方案详尽且合理,连流程图都画好了,类图之间的关系图也画好了(这个文档给我自己输出,没有个半天一天搞不出来,Qoder几分钟写好了)
  • 流程图详细且正确,我以前以为agent只会写文档,没想到写markdown的流程图、类图也是一级溜
  • 现有代码阅读理解正确,使用正确,agent走读代码的速度远超人类

最后拿到Agent生成的技术实现方案跟同事一起review了以下,然agent继续完善了一下,技术实现方案review通过

根据技术实现方案实现代码

promote也很简单

复制代码
根据技术实现方案实现代码

有了上一次Trace的实践,Qoder的表现让我满意,稍微有些惊喜

  • 代码生成质量高,没有任何一处乱码
  • 编译错误少
  • 实现基本符合预期,调用现有接口正确

完善demo

sdk的代码写好之后,接下来是自测,那就让agent帮忙完善demo

复制代码
完善demo,读取一个路径下的所有音频文件,展示成列表,点击某个文件后,开始播放

这一次的表现也是惊喜,因为我没有按照需求-》技术实现方案-》agent实现的方式跟agent交互,但Agent做的很好

  • 能读懂现有的demo
  • 能在现有demo的技术上完善新增的demo
  • demo完美调用了新增的需求接口,完成了功能

然而功能没有正常work

agent一两个小时写了上千行代码,包括demo,但播放不正常,所以我对着agent写的代码进行了第一轮review,

agent做的好的

  • 函数声明注释详细和准确
  • 各种异常判断合理到位,甚至过于繁琐
  • 架构相对合理,抽象相对合理

agent做的不符合预期的

  • 过度设计,不能说不好,只能说符合AI的能力(阅读代码超级快,写代码超级快),但对于项目初期来说,这是会增加维护成本的
  • 过度实现,有时候实现的过于复杂,以至于agent自己都被自己绕晕了,最后卡死了

review完代码,发现agent写的代码是正确的,符合流程的,最后排查下来是因为我们的文件有些自定义的属性导致agent没有get到,修正即可。

也就是说,agent两个小时就把一个需求实现了,demo也写好了,并且没有任何错误,so amazing。

第一回合总结

这是第一次在工作中真实的使用AI编程进行实战,实战效果超出预期,真正实现了AI编程让我不用加班到头秃。因为我本身没有接触过这些音频协议,如果让我真正实现预期需求,我可能要3~4天

  • 1天熟悉这些音频协议和阅读现有的代码实现
  • 0.25~0.5天去写技术实现方案
  • 1~2天把代码实现
  • 0.5天写一个demo
  • 0.5调试

这可能还是顺利的情况下

有了AI编程,现在的需求开发节奏是,0.5天实现了需求

  • 0.25去写需求文档
  • Agent十分钟生成生成技术实现方案
  • 0.25天review agent生成的技术实现方案和不断完善
  • Agent 一两个小时写代码和解决编译问题

对比可以发现,人和agen是的开发流程是有明显差别的

  • agent的背后是模型,是一个超级全能,几乎无所不知,学习速度超级快的"超级赛亚人",所以agent的学习时间是可以忽略不计的,而人在接触新的知识,需要花大量的时间去学习和消化,才能转到自己的存储然后输出
  • agent写代码的速度无敌快,agent可以一两个小时无间歇的输入上千行代码,而人手写一千行代码,就算你平均每分钟一行,也要16小时,也就是2天的工作日,这是效率的差距

新需求:解密方式优化

一开始我们的需求的实现方案是先把加密文件解密成一个标准的音频文件,这样后续就按照标准的音频文件来播放即可,但想优化成一种自定义的解密方式

同样的按照需求-》实现方案-》agent写代码的方式来实战,但这次没有那么顺利了

  • agent按照标准接口的理解来尝试实现,但在实现的时候发现标准接口的能力不支持,直接在代码里面留下了todo!!!
  • 给agent反馈不要用标准方式来实现,但agent一直不愿意放弃标准方法

所以可以发现agent比较擅长的事情是

  • 通用的标准化的定义,例如脚本基本都是用系统函数或者业务都比较简单,agent 很厉害
  • 协议化的或者官方定义的,agent也很厉害

解决方案

  • 在需求markdown里面详细描述自己想要的实现方案,让agent去细化,并且根据agent的反馈不断修整,使得实现方案符合你的设想
  • 按照实现方案实现框架之后,让agent在指定范围逐步优化,尽可能使得拆解后的每一步都是标准化或者协议化或者官方化的

垃圾战场

多次需求之后,仓库里面遗留了大量不用或者实际上无效的变量或者函数或者文件,这次我是review代码的时候顺便删除了,下次可以删除让agent自己去打扫战场试试。

第二回合总结

  • 改需求AI还是可以的
  • 做非标准化的需求,需要尽可能的拆分成多个标准化的模块,最后串联起来
  • agent的提效还是很明显的,虽然没有做标准化的需求那么经验,但其实大部分的代码都是胶水代码,让agent帮忙编写可以让你更高效
  • agent多轮修改之后,剩余的垃圾挺多的

Qoder实战总结

  • AI编程总的提效单纯从交付角度来看,至少有4倍的提效
  • 但代码是对外是资产,对程序员来说是债务,AI写的代码你总要花时间来review,所以总的提效可能连一倍都没有
  • AI编程的体感是变轻松了,有种从自己搬砖编程->操作机器搬砖的切身体会
  • AI编程可能并不便宜,Qoder现在还是有免费额度,我7天就用完了一个月的高级模型额度,免费模型的效率是体感变慢变差的,但勉强能用,不知道后续不免费了每个月费用多少
  • AI编程对程序员的成长可能并不利,三天不练手生,用AI用久了,可能就不会写代码了,并且AI的知识不是你的知识

如何更好的使用AI编程

  • 肯定是要拥抱AI编程,毕竟提效是明显的
  • 自己保证每周足够的手写代码量,保持写代码的手感
  • 用AI编程的成果不要第一时间交付,要等到你真正读懂AI写的代码,review 完AI的代码,觉得没问题之后才是真正可以交付的时间点
  • 不要当电影院第一个站起来看电影的人,我们虽然不能控制别人不站起来,但我们不要第一个站起来,虽然按照人类的天性,总会有人站起来邀功,最后导致所有人都只能站起来看电影

AI编程势不可挡,但期待AI编程不要变成压迫程序员的工具,希望能有一个程序员组织,规范行业对AI编程的使用,让AI编程真正是造福程序员,但这可能只是一个愿望。