基于Spec的AI Coding


预计阅读时间:5 分钟

灵感的来源

之前尝试用Cursor写Verilog生成一个I2C控制器。可是AI成生的代码看着好看, 实际无法使用。于是我把遇到的错误告诉AI,让它去一步一步迭代。结果代码变得 越来越复杂,但是I2C控制器仍然没有跑起来。

看来,AI对于它比较熟悉,大家用的比较多的编程语言和场景,它处理的很好。但 对于一些小众的场景,和理想还有差距。

不过,在尝试的过程中,我发现AI对于Verilog的语法是掌握得很好,但是设计硬件 逻辑能力欠缺。于是,我尝试了另外一种流程。把整个控制器的状态机逻辑写到一 个MD的Spec中,让AI按照Spec去生成代码。这样,即使我不熟悉Verilog的语法, 只要我有设计思路,就可以利用AI把我的设计思路转化为可以执行的代码。

于是,我写了一个完整的I2C控制器的Spec,然后让AI去写Verilog。这回,AI写的 代码终于可以跑起来了。如果在测试发现问题时,不直接修改Code,而是通过修改 Spec完善细节。让AI去修改或者重新生成代码。

新的流程

这样一来,我的工作流程就不再是做为一个监工,一边看着AI写Bug,一边苦口婆心 指导AI写Code。开发的流程就变成了“我 -> Spec -(AI)-> Code”。实现了我和AI的 分工。我更像一个懂技术细节的PM,AI是手下的Dev。因此同需要修改代码时,只 修改Spec,不直接改Code。Spec和Code一起Push到Repo里面。

而这样的流程的另一个好处就是保证Spec和Code的强一致性。再也不用担改Dev改 了Code忘记更新文档了。

小小地尝试

前几天,我用这种流程做了一小网站,用途是可以远程查看家里手机上的短信。 为了信息安全,短信内容时端到端加密的。

所以,我就先写了一个MD文档,大概写了一下这是一个Django的Web Server, 包含一个页面和两个API等等。AI做一个这样简单的网站基本可以说没有难度。之 后测试没问题就把MD文档和代码一同Push到github上。

因为网站是Host在公网上的,所以还需要加上认证。这时,我只需要在API的那一 个section加上Authentication的需求。然后让AI去 Update the code according to the changes in the spec。

于是,即使AI写Code写得飞起,也始终保留一份和代码一致的文档。突然感觉。 这样的代码可重用性和可读性可能好于古法编程常见的文档中埋坑、改Code不改 文档的情况。

其它的问题

如果把每个细节都写到文档中,那文档会不会也变成新的屎山?有可能,但至少比 代码不容易。就像汇编语言解决了孔纸代的屎山。高级语言解决了汇编语言的屎山 问题。面向对象的编程是为也解决面向过程的Spaghetti的屎山,但是很快大家学 会了用设计模式推屎山。

回到写文档的话题。文档和代码的不同是,对于一些比较Well-known的知识和技 术就不需要写过多的细节,AI自己懂。比如之前网站如何加密,只要写”Decrypt Data with the key using AES256_CBC”就可以。至于用什么库怎么调用,AI自己 能搞定。

结论

韦青大佬在知行小酒馆的一次访谈中提到,我们应该把AI看做是一个用来工作的工 具。而不要把它当做是一个人。因此,软件的开发仍然是人来开发的。只是Coding 的工作方式变成开发人员来做顶层的设计,把码字的工作用AI来完成。


本文由 tengda 原创,转载请注明出处。