当前位置: 首页 > news >正文

我以为代码整洁对 AI Agent 影响很大,结果 660 次测试告诉我错了

2026-07-07

几个月前我在重构一个项目的代码结构——把一个大函数拆成几个小函数,改掉那些反模式的命名,加上类型注解。同事问我在干嘛,我说「给 AI 收拾房间,代码整洁了 AI Agent 修 bug 才找得对地方」。

这话听起来有道理对吧?

整洁的代码更容易理解,更容易修改——这个假设在人类开发者身上已经被验证过无数次了。但 AI Agent 不是人类,它不看代码「顺不顺眼」,它只看 token 序列里有没有它需要的信号。

一个很自然的假设,一个很反直觉的实验

普林斯顿大学的几位研究者(Priyansh Trivedi 等)在 5 月份发了一篇 arXiv 论文,标题就是《代码整洁会影响编码 Agent 吗?一个受控的最小对比研究》。他们做了一个非常干净的实验设计:

创建代码仓库的最小对比对——两个仓库架构相同、依赖相同、外部行为相同,但静态分析规则违规数量和认知复杂度不同。

简单说:同一套功能逻辑,一套写成了「整洁版」,另一套「混乱版」。然后让 Claude Code 在这些仓库上执行同样的任务,看通过率有没有差异。

实验包含了 6 组最小对比仓库对,覆盖 33 个任务,总共跑了 660 次测试。这个规模不小了。

我最初看到这个设计时,心里已经有答案了——整洁版肯定通过率更高。这还用测吗?

结果数据打了我一巴掌。

通过率没变,但别的地方变了

核心发现只有一句话:

**代码整洁度不会影响 Agent 的任务通过率。** 整洁版和混乱版上,Claude Code 完成任务的正确率没有统计学显著差异。

看到这个结果时我其实是有点沉默的。这不是调参能解决的问题,是整个假设错了。

但论文没有止步于此。研究者进一步分析了 Agent 的行为指标,发现了另一个维度的差异:

  • Token 消耗减少 7-8%:Agent 在整洁代码上完成任务消耗的 token 更少
  • 文件回访减少 34%:Agent 在整洁代码上需要的文件回溯(重新打开和浏览)频率大幅降低
  • 编辑序列更短:Agent 在整洁代码上需要的编辑步数更少

也就是说,整洁代码没有让 Agent 「更聪明」,但让它「更高效」

这其实符合直觉——整洁代码的命名更一致、结构更清晰,Agent 的注意力机制能够更准确地定位需要修改的位置,不需要反复回溯上下文。但最终它能不能正确改代码,取决于它是否理解了这个 bug 的语义,跟代码长什么样关系不大。

我从工位走到茶水间接水,脑子还在算这几个数字。34% 的文件回访减少是什么概念?如果一次 Agent 会话平均需要回访 15 次文件,减少 34% 就是少了 5 次。每次文件回访大约消耗 2000-4000 token,5 次就是 1-2 万 token。按 Claude 的价格算,每次调用能省 $0.15-$0.3。

那么问题来了:花时间重构代码以降低 AI Agent 的使用成本——这笔账划算吗?

方案的逐步放弃:我是怎么从「必须重构」到「不一定」的

这个发现让我重新审视了我最近的几个工程决策。

第一个想到的方案——全面代码重构。把所有混乱代码重构成整洁的、符合静态分析规范的代码。这个方案我很快就放弃了。原因很简单:成本太高。对一个十万行级别的项目做全量 lint 清理和重构,可能需要两周的人力投入。如果收益只是 Agent 调用省 8% 的 token,ROI 完全是负数。

第二个方向——只在 Agent 会频繁访问的模块做清理。既然 Agent 在整洁代码上更高效,那我只把 Agent 经常修改的几个模块清干净就行。这个方案听起来更合理,但问题是「Agent 会频繁访问哪些模块」这件事本身在变化。你今天认为 Agent 应该改 A 模块,明天它因为上下文关联频繁跑到了 B 模块,你的清理就白做了。

第三个方向——不对代码做任何重构,直接在 Agent prompt 里加上下文约束。如果整洁代码只是让 Agent 少回访文件,那我可以直接在 prompt 里告诉 Agent「修改前先列出所有相关文件名和位置」,强制它一次性读完所有需要的内容,减少回访。但实验后发现这个方案的问题在于——Agent 的上下文窗口虽然大,但注意力是有限的,prompt 越长,关键信息的信噪比越低。

我在三个方案之间犹豫了好几天,最后选的是第四个方案——混合策略:对 Agent 经常修改的核心模块做适度的代码清理(主要是命名统一和死代码删除),不追求全量 lint 合规;同时在 CI 里加入 Agent 行为监控,跟踪每次 Agent 调用的 token 消耗和文件访问模式,当某个模块的回访率异常高时,才针对性地清理。

不完美,远不完美。最理想方案当然是先做全量代码重构再引入 Agent 辅助开发,但项目排期卡在那。这个混合策略的好处是成本可控,问题是你永远不知道「当前的回访率」到底是代码质量问题还是 Agent 模型的固有行为。

一个不可预测的细节:混乱到整洁 vs 整洁到混乱

实验里有一个不可预测的细节:最小对比对是双向构建的——既通过 pipeline 把混乱仓库清理成整洁仓库,也把整洁仓库破坏成混乱仓库。

我一开始没意识到这个设计的意义,后来才想到:如果只做「混乱→整洁」的方向,你无法区分「效果提升是因为代码变整洁了」还是「因为有人在改代码过程中无意中修了其他问题」。双向构建消除了这个混淆变量,确保唯一变化的就是代码整洁度。

这个实验设计的严谨程度让我有点意外。很多类似研究只做一个方向,然后得出结论「XXX 提升了 YY%」。双向对比的设计不多见。

代码整洁不是给 AI 看的

我现在对这件事的看法跟两个月前完全不同了。

最开始我以为代码整洁是为了让 AI Agent 更聪明——它能更容易找到 bug、更容易理解逻辑、更容易做对修改。但数据告诉我:Agent 的理解能力和代码整洁度没什么关系。它能理解混乱代码,也能理解整洁代码。真正受影响的是效率,不是正确率。

换句话说,我们一直以来的「代码整洁 → 更好修改」这个链条,在 AI Agent 身上断在了前一半。Agent 不需要整洁代码也能正确修改,但整洁代码确实让它改得更快、更省 token。

这个结论反过来也有意思:如果我在一个混乱的代码库上运行 Agent,它的表现(正确率)并不比整洁库差。这意味着对于历史债务很重的项目,引入 Agent 辅助开发是有价值的——你不必先花三个月重构,再让 Agent 上场。

后来我一直在想,如果论文进一步测试了 GPT-5、DeepSeek 等其他模型,结果会不会有差异?Claude Code 的特定行为模式是否会影响这个结论?但那是下一个实验的事了。目前至少有一个数据点对 AI 辅助开发这个场景是有参考价值的——代码整洁有用,但不是你以为的那个用法。

关于维基框架

维基框架(Wiki Framework)是一套面向复杂业务场景的轻量级开发框架,支持多语言、多协议、多部署形态。适用于企业级应用开发、微服务架构、云原生部署等场景。

官网:framewiki.com

Gitee:gitee.com/wiki-framework

GitHub:github.com/wiki-framework

示例项目:gitee.com/cdkjframework/framewiki-example

📄 许可证:MulanPSL-2.0(木兰宽松许可证,第2版)

http://www.jsqmd.com/news/1144607/

相关文章:

  • 基于ADM工具实现Qwen 35B大模型一键本地部署实践指南
  • AI 辅助理解 Rust 泛型:让模型用具体类型举例,再抽象回泛型
  • 海岛微电网仿真:3 种典型场景(晴/阴/负荷变化)下的能量管理策略对比分析
  • THPX信号源:把技术架构做到位——逻辑梳理与提示整理
  • 短剧系统数据模型怎么搭?短剧源码与短剧平台搭建技术实战
  • 3 种注意力机制改进 YOLOv7:在红外目标检测任务中的对比与《红外与激光工程》投稿适配
  • MAX77654与MKV42F嵌入式电源管理方案设计与优化
  • Xilinx Zynq-7000 7个关键引脚详解:POR_OVERRIDE到PS_INIT_B的硬件设计指南
  • maSigPro 与 Mfuzz 对比:2种时间序列基因表达聚类方案选择指南
  • Harness Engineering与Hermes Agent框架:企业级AI Agent开发实战指南
  • http_lib:纯仓颉标准库 HTTP 封装,HTTP/1 + HTTP/2 + HTTP/3
  • 直流电机静音驱动方案:TB9051FTG与PIC18F96J94实战
  • 专业净化系统工程承建商推荐华建净,打造无尘洁净车间
  • WSEN-ISDS与PIC18F8520的6DOF运动跟踪系统设计
  • 线束中国探展专访|广东星坤:以高可靠互连突围,打造国产连接器全球化标杆
  • FPGA 上到底有哪些硬件资源?这次一次性整理清楚
  • f(x-2) = x^2 - 4x - 4
  • 室外组别比赛场地
  • 厦工股份年报:主业亏损7345万,矿卡业务1.14亿当年盈利——传统机械上市公司的跨界样本
  • Java计算机毕设之基于 Java 的中小型电商商城系统的设计与实现 基于 MVC 架构的在线商城交易系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 创新实践:5步掌握鲁棒管模型预测控制的MATLAB实现
  • 【Java毕业设计】基于 JavaWeb 的商品交易商城系统的设计与实现 基于 Java 的个人网上购物平台的设计与实现(源码+文档+远程调试,全bao定制等)
  • 不靠人脉不靠资本,仅凭一个项目,从单人做到团队
  • NCE外汇:把外汇投教内容建设做扎实,更谨慎的使用者更容易感受到的路径
  • CST/HFSS全金属Vivaldi天线设计:槽线、反射腔、指数开口3部分参数优化指南
  • 基于 Exploit-DB 复现 Heartbleed 心脏滴血漏洞完整实操分析
  • 计算机毕业设计之基于Web的服装库存管理系统的设计与实现
  • 终极指南:3步让Windows老游戏在Win10/11完美运行的DirectX兼容解决方案
  • XSS 绕过实战:5种编码组合与3个现代WAF绕过案例解析
  • 从零实现一个服务网格:Istio的核心设计