理想中的Ai编程和现实中的Ai编程

最近几年刷视频基本都能刷到关于Ai编程相关的话题,看着那些炫酷的演示视频,很容易让人误解,现在的Ai编程已经到了可以替代程序员的地步了。但实事是,现阶段的Ai编程,离理想中的,还差得很远很远。

早在2023年初的时候看到关于ChatGPT的消息,非常震惊,我上手后让写了一些东西(普通文案和普通程序),确实很惊艳。在当时来说,我在开发的很多时候找相关功能的程序代码,都是在网上搜,参考别人的思路,或者手动改,没想到那会还能这么方便拿到现成的代码。

再后来我就开始慢慢接触更多Ai,主要还是程序开发方面的。

YYYY,Ai在进化方面真的非常快,但它也是一个黑洞,很多时候是假“学霸”,看似很厉害的输出,很多时候是没有逻辑可言的,也就是它会把自己上一秒肯定的答案最后否定掉,找的理由也很牵强。

国内编程相关的Ai我基本上都用到了,也包括国外比较火的cursor和chatgpt。下面简单谈下关于Ai在程序开发方面的一些我的观点。

现阶段“Ai编程”的优点:

1、写一些指定功能的函数,或者简单逻辑的功能,速度快,效率高,但这个肯定面向有开发基础的人。

2、脾气好,你让它咋改它不会罢工,但有一定的机率把自己陷入死循环。

缺点:

以上的优点其实是抵不过它自身的缺点的。

对于一个有一定开发基础的人来说,如果把项目交给现在的Ai,让它把控整个项目,来实现功能,是灾难性的,下面分开几点说:

以下观点均以生成“发散思维导图”功能来说明:

上图是连改带沟通2天的成果,总体效率不高。

1、豆包网页版对生成的代码,有折叠功能,这个非常好。但问题是会把前面生成的正确的功能,后面改没有了,优点是输出速度快。

2、Deepseek网页版对生成的代码管理就没法用语言形容,当你花了几十个步骤把功能即将实现后,你发现它把前面已经有的功能改没有了,你再往上翻代码,浏览器直接卡成狗。最大的问题是分不清很多node依赖的版本相关的接口。

3、kimi就不说了,在写代码方面就没毕业过。

4、阿里通义千问对生成的代码管理比较好,能折叠,也能单独显示列查看相关代码。问题也是一样,写着写着就把已有功能写没有了。

5、百度文心助手基本还凑合,可能基于它之前搜索引擎相关的数据,在写代码逻辑方面稍好些,但问题也很明显,太啰嗦了,在一个紧凑的函数中,会定义N多个不相关的变量,定义了然后又不使用。你问它为什么定义了不用。它会说:哦,忘记删了。就让人很郁闷。

6、百度秒哒:对新手友好,一句话能生成你想要的应用(网页)。但效果嘛,就看你的要求了,对于复杂的项目,它直接拒绝,提示让你找成熟的应用。

当然秒哒的好处是,可以把生成的应用发布到平台,应该是会到百度智能体里,给其他人使用,我没测试过发布后的一些环节。

另个再说一个例子,同样的视觉类的功能(生成一个threejs的效果),秒哒ai理解很离谱。

以上我的需求。下面是它生成的结果:

不能说不像吧,只能说一言难尽,改了好几十轮,我妥协了。

下面是我自己改的threejs的3D字效果:

7、腾讯CodeBuddy客户端版,综合来说还行,但一定要注意,千万不要把整个项目交给这个Ai,如果不做好版本控制,它会把你项目改得面目全非。我准备让它帮我完成一个仿Blender的材质管理节点图功能。第一阶段通过几十轮沟通下来,生成的代码基本可用了,但后面不知道是哪一步,把已经生成的功能弄没有了。我让它恢复那个弄没有的功能,结果不但没恢复成功,连后面实现的功能也弄乱套了。codebuddy没有自己的版本控制,就是最大的问题。

后面我不得不重启动项目,进入第2阶段。在第2阶段依然会有把原有功能弄没有的情况发生,但有了第一次吃亏,我在本地重新保存了一份可用的版本。每次出问题了,我手动恢复过去,让它重新读全部代码,再实现指定功能。

即使是这样操作,也要一直强调,不要动除了要实现功能相关的代码,其他功能代码全部不要动。尤其是不要按它的想法动原有的功能代码,强调了这个之后,基本上不会把我写的注释啥的删除了。 

codebuddy除了以上说到的问题,也会犯基本的错误,比较多写一个花括号,或者少个分号啥的。

使用codebuddy完成发散思维导图功能,不是它有多厉害,而是我实在没耐心在其他ai尝试了,我只能自己做好版本,一边修改,一边沟通。

8、Trace国内版,这个工具我从今年年初就下载使用了,帮我完成了很多功能,但缺点和其他Ai一样,犯的错都是无底洞,对我来说最致命的就是,不听话。我让它不要安装node环境,不听我的,非要在项目里重新搞一套node,能人能气炸。

9、cursor客户端版本,除了慢还是慢,对中文理解有问题。

10、GhatGPT网页版,我用得不太多,基本上是给我兜底的工具,其他Ai写成狗屎粑粑的丢给它,让优化下。

11、CodeGeex,这算是我用得最多的Ai编程工具了,在vscode中集成了,在Xbuilder中集成了,让它写过一些功能,但不咋行,我让它干活最多的就是代码补全和部分代码重写。在vscode中使用很香。至于其他的ai插件,我没有在vscode中安装,装太多卡。

12、PHPStorm自带Ai,其实也算不上是Ai,顶多算是一个代码补全功具,也没有正经给我实现过啥功能。

通过以上就能看出来现在的Ai编程强得有多厉害,错得有多离谱。网上看到的那些炫酷生成过程序,要么是已经调试好了,要么是ai生成的,总之是对小白误导性很大。

另外还有一些确实是小白的朋友用ai生成的应用和小程序,但仔细看不难发现,都是一些简单的页面和功能。

对于偏视觉类比较明显的功能,Ai基本上是理解不了的,不管怎么表达,都很难达到我的要求。就比如我前面完成的发散思维的节点画布功能,试了好几个ai,沟通几十轮,都完成不了。最后在codebuddy下经过两天才完成,而且还是我一边改,一边让它改的情况。

不然它很难理解“连接点出来的连接线偏高5px”的意思,它会粗暴得往下调5px,这显然是有问题的,需要计算当前内容的高度,还要计算有没有缩放。

秒哒就直接给我拒绝了,说项目太复杂了。

对于不怎么偏重视觉类的功能,如果复杂度太高,Ai依然完成不了。

比如我准备实现Fido相关的功能,在我指定使用PHP8,客户端有Web和鸿蒙的时候,所有功能都完成不了。相关功能我和大部分ai沟通了半个月,后来放弃了。它们根本分不清web-auth/webauthn-framework 和 web-auth/webauthn-lib 的相关版本。

我拆分了先实现Webauthn,再实现客户端,最后也没有实现,两个端的交互太麻烦了。即便我把数据表结构给他们,依然完成不了。

总之嘴硬的朋友可以试着让Ai完成我上面说的两个方面的功能,看看效果。

总结:Ai编程有风险,做好备份和版本控制。

下面是我开发思维导图用到的提示语:

请结合我的开发环境vue3+ts+setup+element plus,写一个流程类的思维发散导图功能,要求:
 
1、画布为任意大小,画布默认显示最大。背景色为:#f2f3f5,用滚轮可以缩放画布,也要求在点击画布空白位置可以拖动画布,使用canvas技术。
 
2、画布在加载成功后,在只读模式下可以加载指定的json数据,在编辑模式下可以是空白画布。
 
3、画布上可以添加任意节点,也可以删除任意节点。
 
4、新增的节点默认在当前画布的左上角,如果拖动了整个画布,新增加的节点也必须要求在当前屏幕左上角。
 
5、关于节点:每个节点有固定的标题,标题高为40px,节点边框颜色:#dcdddc(固定),每个节点边框要求为圆角,10px 10px 0 0(即:标题的左下和右下必须为直角)。
 
6、关于节点标题:标题背景和文字颜色必须默认自带随机颜色,节点标题左右各有1个连接点,连接点位于节点左右边框上,标题左右的连接点的背景颜色为标题背景色。
 
7、关于节点中的内容:双击节点空白处,添加新的内容,新添加的内容需要弹窗确认:内容,文字颜色,背景颜色,默认文字为黑色,背景为白色。新添加的内容高度最小为height:30px,宽度为80%,圆角为:6px。超过宽度的内容换行。
 
8、关于节点每行文字的连接点:新添加的内容自动添加两侧连接点。连接点边框颜色为:#000000,背景色为新添加内容背景色,默认为:#a1a0a1
 
9、连线颜色为起始点连接点背景色,连接线默认为3px,连接点可以吸附连接线。每个节点的标题可以和任意其他节点的标题连线,节点与节点之间的连线用贝塞尔曲线,可自由伸缩,不需要箭头。当鼠标移入连接点位置时,显示连线标志,拖动即可连线。当鼠标移入其他空白位置或者边框时,显示拖动标志,可以拖动这个当前节点。
 
10、关于节点之间的连线:连线的线的中间可以通过单击添加说明文字,单击后显示一个小的input框,输入内容后点击其他地方,或者按enter,确认输入说明内容。双击连接线,弹出删除连接线提醒,确认后删除连接线。
 
11、放大画布的时候连线也跟着一起放大
 
12、支持拖动任意节点,都不会断开该节点与其他节点的连线,拖动节点的时候只拖动鼠标选中的节点,且点击该选中节点任意位置可以拖动,不可以拖动其他节点。
 
13、每个节点中可以添加任意多个竖向排列的文字,每行文字左右各有1个连接点,连接点可以吸附连接线。每行文字可以定义不同的颜色和背景色。节点的最大宽度为300px,超过的文字支持换行。
 
14、每个节点中的每行文字支持与其他节点的标题,或者其他节点的某一行文字连线,连线同样需要说明文字显示,说明文字显示在连线上。
 
15、类型定义在 src\types\note\flowchart.d.ts中。
 
16、主组件为 FlowChart.vue,位于src/views/note/flowchart/FlowChart.vue,FlowChart.vue必须要有子组件,其他组件在flowChart.vue同级目录components下,即src/views/note/flowchart/components/下。
 
17、画布定义2种模式:编辑模式和只读模式,只读模式下不可以创建和编辑任何节点。只能拖动节点,缩放节点操作。
 
18、flowChart.vue的父组件为 note.vue文件,位于 src/views/note/note.vue, FlowChart.vue 为父组件提供:保存、退出、浏览,3个函数,接收来自父组件的json字符串flowValue,flowModel='edit|read',isShowFlow=boolean。
 
19、uuid可以用这种方式生成:import { generateUUID } from '@/utils/index';const uuid = generateUUID();函数generateUUID我已经创建好了。
 
20、画布可以开启或关闭网格,开启网格后,要有吸附功能,也就是拖动节点的时候,节点的左上角会吸附在最近的网格上。
 
21、画布可以全屏显示,也可以退出全屏。
 
22、节点可以删除,但当前节点如果有和其他节点的连线(连线大于等于1),不可删除,需要提醒:当前节点有连线,请删除连线再删除节点。
 
23、所有弹窗不允许在节点内弹窗。
 
24、样式可以使用lang="scss"
 
25、请注意这个错误:[vite] Internal Server Error
v-model cannot be used on a prop, because local prop bindings are not writable.
Use a v-bind binding combined with a v-on listener that emits update:x event instead.
 
请根据以上要求,给出完整的代码。
需要新增加一个“重置视图的功能”,将放大,或者缩小的画布,重置到原大小,当前窗口位置不需要改变。
总结:每个节点和其他指定节点最多只能有1条连接线,无论左边还是右边,每个节点可以和其他多个节点相连,也可以被多个不同的节点相连
 
重置视图功能:可以将缩小,或者放大的画布重置为默认大小的画布,但不移动画布
 
错误有没有修复:在有3个节点的情况下,如果节点1的标题右侧连接点和节点2标题左侧相连,则节点1右侧标题连接点与节点3标题右侧相连的时候,会出现“该连接点已有连线”的提醒。还有错误的连接:节点1左侧连接点连接到节点3标题右侧连接点后,再从节点3标题右侧连接点又能连到节点1的标题左侧连接点,这显然是不对的。我的要求是节点1的标题连接点,无论左边还是右边,都可以连接多个其他节点的任意连接点。比如 节点1的标题右侧连接点可以连接节点2的标题连接点,也可以连接节点2的内容连接点,但是节点1的标题连接点不能同时连接到节点1的标题左侧连接点和标题右侧连接点。也就是说无论是标题连接点,还是内容的连接点,同一节点上的同一行的连接点为同一属性。2、鼠标移入连接线的时候,没有触发handleConnectionMouseEnter()函数
 
 
同一行的所有连接点是"同一属性"(标题左侧+标题右侧 = 同一行;内容的左侧+右侧 = 同一行)
同一行的连接点只能有1条连接连接到其他节点的同一行
不同行的连接点可以有多个连接
 
标题的左右连接点属于"同一行"(标题行)
内容的左右连接点属于"同一行"(每个内容一行)
标题连接点和内容连接点属于"不同行"

评论 (0)

未连接

暂无评论,快来发表第一条评论吧!