Agentic Generation of AST Transformation Rules for Fixing Breaking Updates
本文提出了 BigBag,这是一个智能体框架,它能够生成可重用的、API 级别的 AST 转换规则,以自动修复跨多个软件项目的破坏性依赖更新,在实现高编译率和修复率的同时,展示了显著的跨项目迁移能力。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你是一名大型建筑工地(你的软件项目)的经理。你依赖于一个特定的供应商(第三方库)来提供砖块、水泥和工具。多年来,一切运行得非常完美。
然而,有一天,供应商发送了新版本的目录。他们不仅更改了价格,还改变了砖块的形状,重新命名了工具,甚至把送货卡车改到了另一条街上。突然间,你的施工队无法进行任何建设了。蓝图与新材料不再匹配,整个工地陷入了停滞。程序员称这种情况为**“破坏性依赖更新”(breaking dependency update)**。
通常情况下,当这种情况发生时,必须由一名人类开发人员前往每一个使用该供应商新目录的建筑工地,弄清楚发生了哪些变化,并为每个工地手动重写蓝图。如果受影响的有 1 亿个工地,那就是 1 亿个单独且繁琐的工作。
新的解决方案:BIGBAG
这篇论文介绍了一个名为 BIGBAG 的新系统。与其派人去每个工地逐一修复,BIGBAG 扮演的是一个超级智能、自动化的建筑师。
以下是它的工作原理,使用简单的类比说明:
1. “侦探”阶段
当新的供应商目录到达且施工停止时,BIGBAG 的“侦探”(由先进 AI 驱动的代码代理)会查看错误信息。它会询问:“为什么砖块不再契合了?”它会阅读新的目录(API 文档)以理解究竟发生了什么变化。
2. “通用蓝图”阶段
这是神奇之处。AI 不仅仅是为你的特定工地绘制一份新蓝图,它还会绘制一条**“通用修复规则”**。
- 旧方式: “把你家左侧墙上的门移动一下。”
- BIGBAG 方式: “如果你看到左侧墙上有门,就把它移到中间,无论你在哪栋房子里。”
这种“通用修复规则”是一个微小的计算机程序(AST 转换),它会说:“找到这个旧工具的所有实例,并将其替换为这个新工具。”
3. “试驾”阶段
在向这个规则发布之前,BIGBAG 会先在原始的破损工地上进行测试。它运行这条规则,检查建筑物是否能屹立不倒,以及测试是否通过。如果失败了,AI 侦探会再次尝试,不断调整规则,直到它完美运行为止。
4. “大规模分发”阶段
一旦这条规则在第一个工地被证明有效,BIGBAG 就会将这条完全相同的规则发送到所有受到该供应商变更影响的其他建筑工地。这就像是发放一张通用的“修复贴纸”,它可以适用于所有同型号的汽车,而不是逐一修理每一辆车。
他们发现了什么?
研究人员在 157 个真实的现实世界灾难中测试了这个系统,这些灾难都是由于库更新导致的软件损坏。他们使用了四种不同的“超智能”AI 大脑和两种不同的“绘图工具”(软件引擎)来创建这些规则。
- 成功率: 最好的 AI 与绘图工具组合能够在 94% 的时间里创建出有效的“通用修复规则”。
- 修复破坏: 一旦规则创建完成,它能成功修复 78% 的软件损坏。
- “通用性”测试: 最令人兴奋的部分是观察该规则是否能在其他工地上生效。
- 总体而言,规则在其他工地上的成功率为 33%。
- 然而,如果所有的工地都以完全相同的方式(统一地)使用那个损坏的工具,规则的成功率则达到 80% 或更高。
难点(为什么它还不是 100% 完美)
研究发现,导致“通用规则”有时失效有两个主要原因:
- 绘图工具很重要: 某些 AI 模型在配合特定的“绘图工具”(软件引擎)时表现更好。这就像给画家一把他们从未用过的画笔;他们可能会把画弄乱。研究人员发现,一个更简单的工具(JavaParser)通常比复杂的工具(Spoon)效果更好,因为 AI 更容易理解它。
- “一刀切”的问题: AI 通过观察一个破损的工地来学习规则。如果那个工地以一种奇特、独特的方式使用了那个损坏的工具,AI 就会针对这种奇特性编写规则。当它试图将该规则应用于另一个正常使用该工具的工地时,规则可能就不再适用了。这就像是为一个人量身定制了一套西装,然后试图强行套在另一个人身上;只有当两人的身材完全一致时,它才有效。
核心结论
BIGBAG 证明了我们可以停止一个接一个地修复软件更新。相反,我们可以生成一个单一的、可复用的“修复脚本”,为所有受同一更新影响的人解决问题。虽然它目前还不能完美解决所有问题,但它将一个庞大且手动的头痛问题转变为一个基本自动化的过程,让开发者无需一遍又一遍地重写相同的代码。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。