三周,二十九万次提交:智能体自己学会了重构,然后有人把门关了
三十万行 C 代码,摊开来是一个不大的数字集合。真正的体量感来自另一个数:三周,一千五百次提交,一次都没停过手。
《街头霸王 III:三度冲击》的反编译工程被送进了 CodeScene 的重构流水线。二十一天后,CodeScene 公布的成绩是:七百二十六个文件被改动,两千九百零三次提交,二十五万两千零五十五行代码被重写,代码健康度从 5.6 分走到 10.0 分,账单大约四千美元。
这套成绩单在 10 月 12 日被 InfoQ 完整拆开之后,评论区最激烈的部分不在数字上,而在于数字是怎么来的。
🧩 一切都挂在一个能自动打分的钩子上
重构这件事,代码可以改,但"改得对不对"这件事通常没法自动判定。智能体要在一个没有标准答案的地方做两万五千次决策,光有算力没用,得有一个能立刻告诉它"这一步是进步还是退步"的尺子。
CodeScene 自家的 CodeHealth MCP Server 就是那把尺子。它给智能体一个确定性评分,智能体每做一次转换,都能立刻知道自己是在爬坡还是在下坡。
第二道保险更硬:回放轨迹测试框架。格斗游戏的每一帧状态都被哈希存档,智能体每次改动之后,系统逐帧比对回滚后的状态哈希。验收标准落在"每一帧和之前一模一样"上,绿灯不算数。
这两道机制叠在一起,效果就是智能体有了一个它自己也能读懂的反馈回路。Adam Tornhill 说,干了三十年大型系统,这是他第一次看到所谓大规模的超人类 AI 表现。
📖 二十二条配方,是它自己攒出来的
项目组事先并没有给智能体一份重构目录。跑完之后他们拿到的是另一件事:一本手写手册,二十二条重构方案,配八十二条辅助说明。
常规的那些在里面,抽取函数、加卫语句。真正让人停下来的是剩下几条。共享索引范围,处理只有起止数字不同的重复循环。动作参数,对付主要区别在于调用哪个函数的重复控制结构。均匀步长表,把长得不一样的调用改写成查表分发。
这些不是通用重构手法。它们是这个代码库独有的形状,智能体得先看懂这堆反编译代码的物理规律,才写得出来。
失败的尝试同样被记录在案,包括那些让健康度分数往下掉的转换。这本手册是二十一天工作的副产品,不是设计文档。
| 维度 | 数字 |
|---|---|
| 代码规模 | 约 300000 行 C |
| 耗时 | 三周 |
| 涉及文件 | 726 个 |
| 提交次数 | 2903 次 |
| 改动行数 | 252055 行 |
| 健康度 | 5.6 → 10.0 |
| token 成本 | 约 4000 美元 |
| 自产重构方案 | 22 条 + 82 条说明 |
⚖️ 数字没人在吵,条件在吵
LinkedIn 上的争论分成了两派。Paolo Perrone 站乐观一边,他的理由是:多数重构成果的验收标准是测试套件全绿,那只能证明测试没失败。对格斗游戏做轨迹回放,门槛高得多。Omda Response 的 CTO Mats Iremark 承认自己做过类似的事,他的评价更直接,说 CodeScene MCP 配上现在的智能体几乎等于作弊。
另一边的意见集中在适用范围上。Konrad Otrębski 问的是:这些改动到底合并了没有,是一次大合并还是分批合,是不是只在开源代码上演练而没有碰过真正产生收入的系统。参与项目的工程师 Daniel Webb 回答:五十四个拉取请求,合进了一个分支版本的 main 分支。这个回答之后 Otrębski 又追问了一层,要拿 Grafana 这样的项目动手、并且合并进 master 才算。
软件架构师 Tracy Bannon 反对的是描述方式而非方法,她认为把结果说成完美是个相当大胆的说法。Denis Baltor 直接质疑那二十二条配方本身:DRY 关心的是知识与意图的重复,不是代码行长得一样;如果把只有范围不同的循环当成重复,这两者就被混为一谈了。Asko Nõmm 提的是方法论层面的问题,Claude Code 和 Codex 各自为自家模型调过优,结果有多少该记在模型头上、多少该记在测试框架头上,成本也会跟着一起变。
作者自己也留了没答的问题。有人问非功能行为改善了多少。帧率、内存占用、输入延迟对格斗游戏都是硬指标,Webb 说他们正在引入一位性能专家。有人追问测试框架能不能抓到细微的帧时序回归,Webb 说可能没有明确答案,因为框架跑在提交前钩子上。问到一次差异能有多大时,他没有给结论,只把问题抛了回来。
选择测试对象的过程同样说明了这件事的边界。团队原本考虑过 Webb 参与过的英国政府海事许可代码库,理由是它太健康了,不适合做研究。
七十个百分点的缺陷下降和百分之四十五的 token 浪费减少,都是从早期研究外推出来的估算值,不是这次案例的实测结果。 实测的只有四千美元和二十一天。
下一步的方向已经定了。改进产生的是同一个系统的两个功能等价版本,一个 5.6 分一个 10.0 分。团队将与隆德大学合作,让学生用前沿模型分别在两个版本里实现功能,比较成本和质量。
🚪 同一周,另一边把门关了
10 月 7 日,QGIS 项目把一份增强提案合进了 master。这份编号 QEP428 的提案,标题只有五个词:不允许 AI 贡献。
QGIS 是全球最大的开源地理信息系统之一。它此前用的是 LLVM 那套思路,编号 QEP-408:可以用 AI,但要求打标签披露、并且有人类负责到底。项目核心维护者 Nyall Dawson 后来自己算了一笔账:大约五十个拉取请求挂了 AI 辅助标签,其中约四十个被关闭未合并,还有一些连标签都没打就被关了。他把 QEP-408 定性为"明显不管用"的政策,并说项目在这个过程中至少失去了一位极高价值的贡献者。
于是顺序被倒过来了。先关门,再逐案讨论要不要为某一种用途开条缝。
QEP428 的合并文本写得很硬:不接受任何 LLM、AI 或智能体辅助的代码贡献进 qgis/qgis 仓库。违反的后果是代码回退,加上贡献者权利的制裁。
| 项目 | QEP-408 | QEP-428 |
|---|---|---|
| 立场 | 允许但披露 | 一律禁止 |
| 提出人 | 沿用 LLVM 模板 | Nyall Dawson |
| 讨论起止 | — | 09-24 提出,10-05 进投票 |
| 合并时间 | — | 10-07 |
| 实际数据 | 约 50 个打标签 PR | 约 40 个被关闭未合并 |
| 执行手段 | 标签 + 审查 | 诚信声明 + 事后回退 |
投票结果是压倒性的。核心维护者 Even Rouault、alexbruy、signedav、elpaso 都投了赞成,情绪票大约 68 个赞对 19 个踩。
维护者 PSC 主席 Tim Sutton 把执行标准说得很朴素:判断合规的依据是你是否凭良心亲手写下这段代码,我们没打算窥探你的电脑。提案本身没有 CLA 机制,也没有任何技术检测手段。
范围上的争议比立场上的争议大得多。贡献者 kannes 指出 assisted 和 used 这两个词太宽,宽到连用 LLM 做代码审查都算在内,学陌生代码库也算在内,他自己就习惯先让模型当一遍模拟审查者再发给同事。02JanDal 列了一串边缘情形:IDE 的机器学习排序补全,在聊天机器人里头脑风暴一个设计,手滑点进搜索引擎的 AI 摘要,用 Google 翻译翻一个术语。Dawson 的回应是先关门,之后可以逐案讨论为自动补全和翻译这类用途开口。他也承认了这个风险,说他们知道这可能把洗澡水和孩子一起倒了,但那孩子可能本来就活不成。
不过维护者 haubourg 提到的那条情况,让这道禁令显得有些别扭:这套安全通告制度启用之后收到的每一份安全通告都是用 AI 写的,虽然大部分针对的是 QGIS 的网站而不是核心代码。
🧾 两个数字放在一起看
一周之内,一个项目展示了智能体三周改完三十万行代码的可行性,另一个项目把 AI 辅助贡献的门彻底关上了。
这两件事指向同一个位置。那套让三十万行改造成立的东西,是一把能自动打分的尺子和一份能逐帧比对的轨迹。QGIS 缺的就是这个,它没有第二条确定性的验收通道,所以在五万行、几十万行的人力代码面前,它只能选择限流。
QEP428 有可能是被抄的模板。它引用的证据很朴素:五十个打标签的拉取请求,加上一个流失的核心贡献者。这正是绝大多数维护者能对上号的经历。
🔍 信源与限定
- CodeScene 案例的数据来自 InfoQ 10-12 报道与 CodeScene 官方案例页,所有性能数字均为 CodeScene 自测,本文未独立复现
- 七十个百分点的缺陷下降与百分之四十五的 token 浪费减少,公司自述为早期研究外推值,非本案例实测
- QEP428 的通过票数(约 68 赞 19 踩)为社区情绪票读数,正式表决票数未核到
- 关于流失一位高价值贡献者的说法是 Dawson 在讨论区的个人陈述,被点名的当事人与具体经过均未公开
- 自动补全与翻译豁免只是讨论中的设想,合并文本并未授权
讨论回复
加载中...正在加载回复...
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。