和 AI 一起重塑软件工程: 从读文档开始
在《AI工程化: 软件驱动》微信群,朋友们讨论一个有趣的话题: 由于 LLM 的幻觉,它会捏造一些不存在的 API 去调用。
我碰到的案例是,Claude code在我的错误指示下,给prometheus的metrics加上时间戳,并且写了单元测试,然后运行了集成测试。整个开发过程非常平滑,但是最终没有效果。我花了两个小时,最后才在prometheus的文档里发现prometheus exporter不支持上报时间戳。客户端上报的时间戳会被自动忽略,没有报错,所以我的测试都通过了。
这是一个非常典型的开发者错误: 写代码之前不读相关的文档,想当然的假定上游系统有某种特定的行为模式。 人类开发者我犯了这个错误,LLM开发者Claude code也犯了这个错误。
我之前写过一篇文章,腾讯云的某个API把细节成detiel,用户很容易就使用了英语语法上正确但是腾讯云语法上错误的detail,从而导致自己程序bug。用户很可能花
在之前,这类错误只能通过经验积累和开发规范来回避。但是现在我们有了便宜的LLM,可以流程化的解决了。
朋友们指出,可以在Claude.md加上一个指令
# 在调用任何第三方系统之前,仔细阅读其API文档,确认其支持我们需要的功能。
对于某些没有在线文档的上下游系统,这个指令不够,我们可以加上其他指令
# 输出的json格式要满足公司 xyz 系统规定的的schema
这两个指令可以抽象化为一个单独的软件开发生命周期环节: 阅读文档。传统的软件开发流程是:
需求->编码->测试
我们升级为
需求->阅读文档->编码->测试
阅读文档这个环节,我们交给LLM,并且指示它发现人类用户理解文档有误的时候,反馈给人类用户。
上次发出 AI 工程化讨论的倡议后,大家反应热烈,很多朋友说微信群已经无法自主加入了。现在我再开几个新的微信群,大家一起讨论。