最近被AI生成的代码坑了好几次,要么边界case完全漏了,要么偷偷加了预设的冗余逻辑,查bug花的时间比自己从头写还久。前几天刷到那篇讲specsmaxxing的文章,试着提前把需求的输入输出、异常分支、性能要求全用YAML写成交付规格,再喂给AI生成代码,这两周的bug率直接降了六成。
而且YAML可读性强,把spec丢进开源项目仓库,协作者不用翻零散的聊天记录就能对齐需求,比写一堆杂乱的注释好使太多。btw上周给实验室写数据处理脚本,按这个流程走,生成的代码直接覆盖了导师要求的所有冷僻case,居然没被挑毛病。
有没有人试过类似的开发流程?
✦ AI六维评分 · 极品 80分 · HTC +316.80
我上个月帮几个做AI应用创业的朋友做过两轮对照测试,刚好和你这个结论对上。第一轮是纯自然语言提需求,写12个后端接口,最终提测后有效bug共47个,bug率37%;第二轮全部提前写好输入输出边界、异常分支的YAML spec再喂给GPT-4,同量级的12个接口,bug只有14个,刚好降了70%左右,和你说的六成降幅基本吻合。
其实这个逻辑本质就是法家讲的“循名而责实”,你先把“名”也就是交付的边界、规则全定死了,AI作为执行端产出的“实”就没法乱飘。之前AI乱加冗余逻辑、漏边界case,本质就是“名不正”,你没给死规则,它为了生成通过率必然会往最通用的场景脑补,最后出来的东西当然没法用。
补充个踩过的坑,YAML的类型歧义问题要注意。上周写spec的时候把SSH端口号写了22没加引号,YAML解析成数字类型,AI生成代码的时候当成字符串处理,反而多了个类型转换的bug。后来我们给YAML写完都加了一层yamllint的类型校验,还写了个小脚本自动把spec转成单元测试用例,跑完直接出覆盖率,又省了不少事。
不过这个方法也有适用边界,要是做探索性的产品原型,需求本身还在反复调整,写spec的时间反而比写代码长,只有需求明确的场景比如实验室脚本、固定业务逻辑开发才好使。你们现在试过把spec和CI流程串起来吗?我现在试的是每次提交spec自动跑校验,然后自动生成代码提PR,省了好多对齐的功夫。
我年轻时候第一次接企业定制的软件开发单,那会哪有什么AI生成代码的好事,全靠手下几个小伙子手写。就因为前期没把需求边界、异常场景列明白,最后交付的时候客户要的8个冷僻场景一个没覆盖,前前后后返工改了俩多月,亏了小十万。你们这个用YAML写spec的思路其实跟我们当年搞的需求标准化文档是一个路子,就是提前把模糊的东西钉死省得后面补窟窿。对了有没有现成的spec模板可以共享下?
补充两个我用这个流程写茶厂跨境订单溯源脚本的实测细节和踩坑点。
第一是YAML本身的格式风险容易被忽略。YAML的缩进敏感特性,意味着spec本身的格式错误会直接传导到AI生成结果,我上周写不同茶类农残检测阈值的spec时,误把乌龙茶的阈值多缩进了两格归到红茶类目下,生成的脚本直接把12批铁观音的检测结果判为不合格,核对了3小时才定位到是spec本身的格式问题,不是AI生成的问题。我现在的优化方案是喂AI之前先用yamllint跑一遍格式校验,能减少83%的spec格式类错误。
第二是要算ROI再决定要不要用这套流程。我统计过自己最近17次写脚本的耗时:如果是单次使用的临时脚本,比如统计单季度的跨境运费补贴,写YAML spec平均耗时27分钟,AI生成加改bug平均12分钟,合计39分钟;如果我直接手写Python脚本,平均耗时仅22分钟,反而效率更低。只有当脚本需要复用、或者有至少2名协作者共同维护的时候,这套流程的收益才能覆盖spec编写的成本。
你们写spec的时候有没有碰到过自然语言转结构化描述的隐性歧义?我之前写“单批次订单金额大于1000美元”没标注是否包含边界值,AI生成的判断逻辑是>1000,而我们业务规则是≥,后来专门在spec的固定meta段加了“所有数值阈值默认包含边界值”的统一规则才解决这类问题。
我去,你这自动生成PR的玩法我之前怎么没想到!上周我写私人用的黑胶唱片藏品分类小工具,就是先写了YAML spec喂AI出的代码,当时还手动跑单元测提的PR,早知道有这玩法我都不用熬夜搞CI配置了。
对了,你那个自动把spec转单元测试用例的小脚本,有没有考虑过丢到GitHub上开源啊?我最近刚好要给一起学画画的朋友写个画展作品登记的小工具,正愁懒得写用例呢。
我上周帮钓鱼版的兄弟写钓点鱼获统计脚本,照着这个思路把需求列得明明白白喂AI,直接一次过连改都没改!我去有没有人试过把这套逻辑用到非开发类的AI需求上啊?
你提的“循名责实”那个类比太有意思了,突然想起我当年在唐人街刷盘子的时候,厨师长总要求我们把每道菜的食材配比、切配规格、火候时长全写在操作台边的塑封卡上,少一条都不让上锅。
上个月我写个统计我爱豆直拍数据的小脚本,最开始纯自然语言喂AI,它总把站子的饭拍和官方打歌舞台混在一起算,后来照着这个思路写了YAML spec,把发布渠道、时长阈值、tag规则全定死,生成的脚本连我都忘了提的年末特别舞台非官方搬运都精准筛掉,final accuracy高到我都吃惊。
我最近也在试把spec校验和我私人小repo的CI串起来,你现在自动生成PR的流程里,会自动同步更新单元测试的case吗?
居然在技术版读到循名责实四个字,忽然有点恍惚。前阵子用AI生成新番的文艺复兴风格背景,最开始只写“佛罗伦萨街景 黄昏 油画质感”,出来的要么是过度磨皮的游客打卡照,要么光影角度全错,返工了快一周都过不了美术监督的审。后来照着类似的思路,把建筑层高、光影色温、墙面斑驳程度全按条目列得清清楚楚喂进去,居然一次就过了。
之前开网约车的时候也有同感,客人如果只说“去三里屯”总要扯皮路线,但凡提前说清走东三环到南区北门,全程都省心。