AI编程做复杂项目的初探
AI编程到今天,应该用了已经快一年时间了。慢慢的逐渐考虑它用于比较复杂的项目。
什么是复杂的项目?
- 人工智能要理解定制的框架、开发库,而不是公开的那些。由于定制的框架和开发库缺乏公开文档,在人工智能的训练过程中,肯定不会有任何相关的资料做训练。如何能正确的使用这些框架和开发库,这是第1个复杂所在。
- 人工智能要理解ui界面的设计,并且精确地按照涉及生成软件界面。正常情况下,ui界面一定是使用画图工具来做的。但是人工智能做ui界面,首先就遇到了内容一致性问题和将文字置于图像上的问题无法完美解决。这是第2个复杂所在。
- 人工智能对文档中缺乏的部分,会通过幻觉自作主张的进行脑补。并且以脑补的内容作为基础填充代码的其他部分。如果没有早期发觉,它可能会污染项目的很多代码文件,导致代码最终难以修复。这是第3个复杂所在。
- 一旦项目中的文档代码过多的时候,实现一个功能就需要引入非常多的内容作为参考才能开发。在人工智能上下文token有限的情况下,可能会导致人工智能难以正确回答。并且给人工智能输入过长的上下文会导致其注意力不集中,最终并不会完全遵循上下文的内容,甚至会遗漏很多部分。
尝试去实现复杂的项目,就要解决上述的问题。 - 对于定制的框架和开发库,可以先让人工智能去阅读整个开发库,去生成对应的开发文档。后面通过上下文带入开发文档,方便开发。还可以先写一个框架代码,提前将定制的库引入,这样人工智能会先阅读框架代码。并去顺着框架代码阅读引入的库。但对于api调用这种情况,还是要从文档入手。或者先让人工智能写一个api调用的库,再去写其他代码。
- 对于现阶段人工智能还不能很好地生成图形ui设计的情况下,可以先让他设计文字形式的ui图。在文字图中标注ui元素的长宽。
- 对于幻觉脑补,则需要对人工智能生成的代码进行立即测试,及早发现问题,避免扩散。避免生成不能测试的代码。现在还好的是,多数ai编程工具可以回退。
- 对于引用上下文过多的情况,可以先进行模块化划分。已经划分模块的,可以将较大的模块划分成更小的模块。在每个模块中引用相对较少的上下文,并且在当前模块中实现一个较小的接口代码,其他模块引用这个接口代码,避免大模型每次都需要阅读模块代码的所有细节。
总的原则是要把复杂的项目拆分成大模型可以很好遵循的小项目,小项目的标准是引用的上下文要少,实现的代码要少,少到大模型可以很好遵循为止。当然目前这个度还不是特别好把握。
应该坚持用AI编程吗?
是的。我发现一个最大的好处,尤其是对于独立开发者来说,AI编程总会用一些让你从未见过的、令人惊喜的语言特性或者函数。因为一个人的编程习惯容易固化,越早学习一种编程语言,越习惯用这种语言的早期风格。而如今编程语言的进化日新月异,新的语言版本带来了新的特性,而自己由于对旧模式得心应手,也就不会在关注和使用。对于第三方库来说更加明显,一般都是到了某个函数需要弃用、或者弃用以后才会去想办法找新的替代,也就是不出问题就不会去查文档的。比如我看到好多人写JS仍然喜欢用callback回调地狱处理异步函数, 各种括号真得深入地狱十八层了,也没有使用promise风格;我自己一直很喜欢使用promise,却不知道css标准早已经支持了变量var
和计算calc
,以为这个还是其他第三方CSS扩展如SCSS/LESS才有的功能(因为了解SCSS和LESS太早了);也是AI帮我知道了页面栈获取函数getCurrentPages其实有超强的能力,因为栈中页面的所有函数包括setData都可以调用而且起作用(即使页面是hide状态)。新的语言特性让代码变得清爽简洁,自然也能节约大量时间,这是从AI编程可以学到的。
另外, AI处理页面UI确实速度又快又好, 不过有些情况AI会考虑不到, 如微信小程序自动注入一些CSS, 这些需要在和AI的配合中逐步写入它的规则中。