授权 AI 删除 app 中的 bug,结果 AI 将整个库都给删了,这件听起来很荒谬的事情,真实在美国「大众点评」Yelp 上发生了。Yelp 是美国著名商户点评网站,创立于 2004 年,囊括各地餐馆、购物中心、酒店、旅游等领域的商户,用户可以在 Yelp 网站中给商户打分,提交评论,交流购物体验等,由前贝宝(Paypal)工程师杰里米·斯托普尔曼 (Jeremy Stoppelman) 和罗素·西蒙斯(Russel Simmons)共同创建。
近日, Yelp 在 app 上的一则更新说明把大家给乐坏了:
「我们要向那些在本周使用 app 时遇到问题的用户们道歉。我们训练了一个神经网络来消除 app 中的 bug,没想到它把所有的东西都消除了。我们现在只好进行数据恢复。目前暂时达成 100 % 没有 bug 的状态……」
对此,微博网友立马开启了「群嘲模式」:
给人类留点面子好吗……
从 APP 过去两个月的更新说明来看,Yelp 基本上可以说将「除 bug」当成自己的首要任务,从万圣节到圣诞节再到跨年,Yelp 的程序员们几乎每天都沉溺在「消虫乐」的欢乐氛围当中……
估计是在除 bug 这条道路上除出了固定套路,才会让 Yelp 的程序员们萌生通过训练神经网络来达成自动除 bug 的想法,只是他们没想到竟然会如此出师不利。
由于 Yelp 至今尚未公布详细的网络训练和删库细节,因此我们仅仅只能通过猜测来判断导致删库的原因。然而令人感到绝望的是,即便 Yelp 程序员们想复盘「删库」事件的原由,神经网络的「黑箱」性质也将导致该行为没法很好地落实。
难道我们就一点办法也没有了吗?
虽然 Yelp 以血淋淋的例子告诉我们,自动 debug 有风险,然而我们不能因此否定许多机构在这方面研发工作的努力,毕竟 debug 工具一旦能够开发出来,程序员们将可以把更多精力放在写出更多代码上。
其中,最具代表性的是 Facebook 的 SapFix。
这是一款于去年 9 月份发布的代码调试工具,配合 Facebook 的自动化漏洞发现工具 Sapienz,可以针对 bug 生成修复补丁。
在具体的执行流程上,SapFix 会先给每个 bug 生成多个潜在补丁,然后从 3 个方面对补丁质量进行评定(是否存在编译的错误、程序是否还会崩溃、补丁是否引入新的冲突),在评定结束后,SapFix 会在修复版本上进行测试,结果出来后第一时间发给人工评审员进行审批。
一旦获得人工反馈,SapFix 将会执行那些经批准的补丁,并清除其他未被批准的补丁。
值得一提的是,在面对较复杂的问题时,SapFix 会从过往的修复模板集去寻找生成补丁的借鉴参考。即使没能找着合适的修复模板,它也会尝试基于突变进行修复——简单来说,就是对导致崩溃的语句的抽象语法树(AST)执行小型代码修复,调整补丁,直到找着可行的解决方案。
该工具被 Facebook 视作 AI 技术的里程碑,下一步计划让 SapFix 实现自动制止代码崩溃机制,以及让软件的反应变得更敏捷。
Yelp「删库」事件是典型的 AI 过早落实民用的例子,在技术尚未成熟的条件下,AI 在输出结果上难免要犯傻,毕竟就像这位网友所说的……
最后,祝广大程序员们都能写出没有 bug 的代码