Thoughts
AiCoding
从数据驱动和 Agent 工作方式出发,讨论 AI Coding 带来的效率、风险与软件质量问题。
Ai,人工智能。他最初的开始还是用固定的判断来实现的。
后面经过发展,出现了LM,LLM等等大模型。
今天我们最常用的其实LLM。
LLM,或者说现在所有的机器学习,原理就是一个函数,有很多的w权重和自变量,也有很多的输出(因变量)组成,这些权重的调整都由固定的数据集训练而来。
LLM,大语言模型,你输入什么,他就凭借庞大的参数估计出你想要的回答。
但是,不要忘记了,所有的ai,都是由数据驱动的,他们由人类创造的数据训练出来的。本质上他们就是更强大的搜索引擎。
以前我们找资料,写代码。无非就是找官方例程或者上csdn或者知乎等网站找垃圾。现在人们发现问ai更快更简单。于是就出现了AI编程_-AiCode。
我们用AiCode来写例程,写好直接放项目里调试,一步一步构建出自己想要的效果。到这里为止,开发链路还是可以保证质量的,因为你可以对ai生成的一个一个代码块进行审查之后才放进项目调试,报错也是过自己手的。说实话,它降低了我学习的门槛,也让我更具有开发的生命力和延展力。
但是到了AiCoding,为什么是动词?是因为他现在可以通过所谓的Agent调用你设备的工具帮你把本地的程序直接构建完整,这个过程由部署在你电脑的脚本和LLM沟通来完成。这样省去了以前在对话框发报错调试的时间。开发更快了。但真的是这样吗?
Agent这个东西,他到底为何物?我说难听一点,他就是脚本小子的杰作而已,他就是一个让LLM通过对话直接调度你电脑数据和编辑以及读写的脚本,我觉得他的工作方式和简单,LLM给出指令,脚本负责str字符串匹配调度相关工具在你电脑进行操作,然后grep日志等debug信息反馈给LLM,然后继续对话直至项目完毕。当年病毒为了入侵你的电脑绞尽脑汁,而如今你竟然为了开发效率把电脑送给了ai,荒诞且好笑。
不止如此,Ai其实崇尚happycoding,这也和他的本质挂钩,神经网络的训练原理,其实就是找一个loss最低点,训练出一条最接近“正确答案”的路径。这不就是happycoding的本质吗?对开发过程毫不在意,结果对了就行。
有人会问:那你不会去审查代码吗?我只想说,这种指数级的编辑强度,你很难再会像以前一样精雕细琢,而是更加放任agent去自己开发自己改代码,而你只需要把控方向…
对的,我们从一开始自己编辑变成了雇佣一个人来开发,变成了开发的二线人员。
这其实是一件很恐怖的事情,但是短期内你不会意识到,因为你的只是demo,或者说体量不够大,方向把控的比较好。
但是,在当今,所有的人都把目光投入到了更前瞻的领域,而忽视了AI编程的风险,现在的公司,都在为token买单,为了所谓的高效开发而买大模型,因为这样他们就能尽快的交付“产品”。
有些人自以为是的认为,当今时代已经可以把开发的活交给ai,而自己只需要提供灵感和方案就可以了,但是这不是以前cto干的事情吗?如果一个人,对某个领域涉猎不深,他怎么控制得住方向?让ai自己想吗?
现在大家都在狂欢,ai已经涉及了人类的方方面面,学术已经沦陷,推文已经沦陷,编程已经沦陷,接下来就是eda,cad…
我只需要一个点子,和一个agent,就可以闯遍天下。
这句话就是当今浮躁的社会的具体体现。
我不认同,也不反对。
ai确实可以让你打破技术壁垒,但如果你不够聪明,不够深入,不够尊重这些领域,这句话就不会成立。
我觉得,Ai一直以来都是查资料的工具,他不可以取代你开发的工作,不要过度依赖ai才是最好的最现实的开发方式。
我不反对AiCoding,但是得自身实力过硬,足够了解自己开发的技术领域,这样才能做出好的产品。
Ai时代,人类太过浮躁。
在早期那个年代,一个控制算法在一个寻路算法的诞生,都足以让人仰慕半个世纪,至今受用。
但是现在这个时代,人们仿佛失去了当年那种精益求精的精神,在不断的制造ai垃圾,各种ai写的屎山代码框框开源,框框发推文。
比如Agent这个东西,一个脚本竟然产生了这么多的名词,什么skill,rag,上下文,example等等。
现在Loop一词爆火,真的是一件很可悲的事情,Loop在早期控制理论就是反馈,给ai加个反馈,开环变成闭环,肯定是会好很多的,但是不至于又给他加个新的名词“Loop”。太蠢了。
人们需要对编程重拾敬畏之心,才会有更好的未来。如果只为了实现而放弃去思考代码的架构设计。以后的程序产出质量,表面上看着还行,实际上代码逻辑和结构只会越来越糟糕。