一次线上BUG,慎用AI提供的代码建议

189 阅读2分钟

下面的内容并非编出来的

就在今天下午,业务部门说有几个客户付款后,订单状态没有发生变化,我还是一头雾水,然后就开始各种复现,看日志。

这块代码前人写的各种来回调用,还好在关键处做了详细的日志记录,一看日志

0.1.png

敏感信息打码了,函数开头打印了 xx 支付方式的回调,说明收到回调了,后面打印了解密出来的参数信息;然后就触发 catch 打印报错信息了。具体 error 是err={"errorCode":1,"responseText":"payListDB.Daopay is not a function"}。“payListDB.Daopay” ?不妙,这个项目正确的写法是“payListDB.Dao.pay”。

赶紧找到调用处一看

1.png

咦?点呢?还是我提交的代码

通过 line history 一看

2.png

想起来了,在使用 GitHub copilot 的时候,在这个文件下用过一次 Edit 模式。以前用 Edit 模式的时候,不管是 Claude 还是 gpt-4.1 都或多或少会给你改一下当前文件下 不相干的代码,只要让我看到都让我改回来了,这次没被我捕获到,所以就带着它上线了。。。。

正确的写法:

3.png

在这里提醒大家:

我用 GitHub copilot 已经一年多了,什么模型都用,3种模式也经常用,有时候对某块感兴趣就用 Agent 让它生成个项目看看;有时候碰到不会改的代码就用 Edit 模式,让它写;有的就用 Ask 模式问;

但是我发现 这个东西有时候会犯一些低级错误,比如fs.writeFileSync(filePath, data, 'utf-8'),它给你写成fs.writeFileSync(filePath, '订单ID:', order.id, 'utf-8'),一运行一个不吱声。

不仅如此,包括 GitHub copilot 提供的 vscode 代码建议,在去年使用的时候,偶尔也会出现 建议的代码不好用,有 bug,虽然代码建议功能仍然打开,但是后来我就很少接受代码建议。

就是用 ai 提供的代码的时候,一定要仔细审查!!!一定要仔细审查!!!一定要仔细审查!!!

有时候一行代码自己敲吧,嫌累,接受代码建议吧,还要花费精力去审查一遍。。。。

说完了。

题外话:不过尽管如此,不吹不黑,在我的使用体验上来说 GitHub copilot 生成的代码质量仍然比国产 ai 代码插件要好很多,我说真的。。。