找回密码
 立即注册
首页 业界区 业界 AI编程实践

AI编程实践

甘子萱 4 小时前
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是
  1. 我想基于qt开发一个股票交易记录软件,软件主要是记录自己的交易记录,请帮我生产一个prd,用markdown格式
复制代码
agent很快生成了prd,我快速看了一眼,感觉还可以,接下来的promote是
  1. 请基于prd生成一个基于c++ 和qt的Windows项目
复制代码
 
1.png
  1. 代码生成的效率很高,但结构不是很合理,都是平铺的,让agent自动调节一下,虽然过程有点曲折,但不断能自己纠错,感觉还是可以的<br>
复制代码
  1. 把代码按照合适的结构调整一下 
复制代码
2.png
然后开始编译,有错误就扔给agent,然后居然发现,agent的代码居然一次性没有写完,三个小时,agent终于写完了所有代码。
3.png

4.png

意外的乱码问题

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

  • 乱码把换行吃掉了
  • 乱码把 { 放在行尾了
  • 识别不了乱码,需要人为提醒
初版界面,不怎么漂亮,但还算能接受
5.png

6.png

漫长的功能可用性修复

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

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

模拟需求变更:UI改版
  1. 做一次UI的改版:隐藏数据备份、用户设置,把股票信息、交易记录挪到左边,原本下面的操作放到上面
复制代码
花了两个小时,完成了UI的改版,惊喜的是,交易记录增加了搜索功能,效率杠杠的,但肉眼可见的也有挺多问题,例如菜单栏重复、交易记录的表头有些是英文,列名和数据对不上等问题
9.png

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

打包成exe

整体可用之后,想着打包成exe可以给别人安装使用,promote是
  1. 为整个项目编写一个编译成exe安装包的sh脚本,可以在git bash中运行
复制代码
这次是比较让我震惊的,脚本生成的速度很快,也很规范,甚至还有一个之前我都没有了解过的软件INNO_SETUP,我就让他帮我安装,但他不肯,我想起了Choco,就问agent
  1. 电脑上已经安装了Choco,如何用Choco安装Inno Setup
复制代码
agent也给出了正确的答案 
  1. choco install -y innosetup
复制代码
因为没有icon,折腾了许久,文本模型生成的icon格式不合法,最终我用别的工具生成了icon,但总的来说,在一个小时内完成了打包成exe脚本的工作,还是让人很震惊。
唯一出手的一次,dll加载失败

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

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

  • 这是一个后增的需求
  • 新增交易记录、更新交易记录、导入交易记录都需要修改
事实上这个需求模型折腾了三个小时才彻底写好,最后的成品如图所示,整体的可用性还是挺高的
12.png

整体回顾


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

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

AI的优势

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

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

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


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

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

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


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

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

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

    • 如果是对确定性要求不高、没有复杂的交互逻辑,例如一个网站的静态、一个操作手册,简单来说就是这个成果对客户不会直接损失,老板可能说可以,然后程序员,然后公司的程序员从三个变成一个


    • 但如果是对确定性要求很高,有复杂操作逻辑的,例如微信聊天的发送功能,我跟老板说,我用AI做了一个需求,自测通过,但AI写的代码我没看,能上线吗?老板要是说能上,我只能说这家公司在倒闭的边缘折腾。

   程序员本质上提供的是更高的确定性以及承担责任的角色,而AI无法提供确定性,更无法承担责任,责任一定是使用AI的人,而使用AI编程的人就是程序员,或者叫AI程序员。
  2. AI作为一种更高级的工具,价格本身不便宜,结合AI能做的事情,其性价比有一定的瓶颈,所以以后程序员要么很便宜,便宜到不配用AI,或者只能用最便宜的AI编程工具;要么程序员很贵,维护质量很高的业务,后者用一个人用AI维护很多个业务。
程序员要怎么拥抱AI编程时代


  • AI编程一定会很普遍,成为AI编程时代卖铲子的人也许是个好生意,可惜大厂都下场了,普通人估计没什么机会了
  • 如果还是做程序员,那一定要比多数人更早的拥抱AI编程,尽可能多的吃到AI编程的红利【红利期就是你会用但你同事不会用AI编程的时间段】,提高自己的效率

    • 可以完成更多的工作,拿到更好的绩效【换钱】
    • 可以让自己有更多的时间去做自己想做的事情【换时间】

  • 不断探索先进的AI编程工具,保持自己对工具的掌握程度
  • 往有复杂逻辑的业务去靠,复杂的业务通常意味着密集的沟通协同,这是AI编程作为单体【目前】不太擅长的
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册