最近一年,软件开发行业里最微妙的变化,不是新框架,也不是新语言,而是一批资深的工程师开始公开表达同一个困惑:代码产出的速度已经翻了倍,但代码本身似乎变脆了。
一位前 Meta 工程师在文章里描述得很具体:切换到代理式编程之后,团队每个月的 PR 数量稳步上升,看起来一切顺利;然后某个月底来了一次 P0,下个月来两个 SEV,再过一年,几乎每个周末都有事故,而且每次事故的定位时间都比上一个更长。他把这套现象归结为四点:AI 写的测试很浅、AI 写的代码过度复杂、人对代码库的理解在下降、AI 推进得太快以至于没人守得住质量线。
这不是孤例,而是整个行业在 2026 年集中面对的工程命题。与此同时,浏览器厂商和运行时团队正在从另一侧给出答案——不是告诉团队"别用 AI",而是把过去散落在文档和经验里的平台知识,整理成代理能消费、能验证的工程资产。本文就从这两条线索出发,聊聊在代理写代码成为默认之后,一个软件团队到底还能靠什么守住质量。
代理写出的代码,为什么天然比手写的更脆
要理解这个问题,得先承认一件事:大模型非常擅长解决"能装进上下文窗口"的问题。它写一个 CRUD 接口、写一个工具函数、把一个报错修掉,效率远超人类。问题在于,一个能扛住高可用和高并发要求的 SaaS 系统,真正的复杂度几乎全都在上下文窗口之外——跨模块的数据一致性、历史包袱下的兼容性问题、长尾的边界场景、以及三年后还要能被人接手修改。
前 Meta 工程师提到过一个细节,值得所有技术负责人警惕:他团队里最优秀的程序员之一,也曾试图用 JavaScript 事件去实现一个本来用 CSS :hover 就能解决的鼠标悬停效果。这不是水平问题,而是节奏问题。在"下一个 PR 赶紧合"的氛围下,一个略顯牵强的实现几乎必然被放行,因为评审者的时间成本比实现成本更高。
更隐蔽的漏洞在测试上。AI 生成的测试喜欢覆盖那些"显然应该正确"的路径:getter/setter 的读写、基本的增删改查、已有用例的翻版。而真正会炸的地方——空数据、并发重试、超时、越权访问、旧版本客户端的兼容字段——恰好落在模型不看的地方。行覆盖率报表依然漂亮,因为那些没被覆盖的场景从来就没进入过统计口径。这就是为什么"覆盖率 95%"和"线上每周出事故"可以同时成立。
浏览器厂商下场:把二十年经验变成代理可用的"技能包"
另一个值得注意的动向来自浏览器阵营。今年 Chrome 团队联合 Firefox、MDN 和 Edge 发布了一套面向编码代理的知识库:200 多篇由 Web 专家手写的实现最佳实践指南,总量约 1.7MB,形式上被打包成一个开源的代理技能(skill),并且配了一套纯 JS 的检索工具——据称从最初 500MB 的原生栈压缩到了约 7MB,本地检索耗时 10 毫秒级。
更有意思的是其中的"遗留扫描"(legacy-scan):一个用 3 万个 GitHub 仓库训练出来的确定性检测器,用来在代码库里找出那些"积灰的老写法"——把 配套的评测同样值得看。团队用 Codex、Claude 等代理跑 200 个任务,落地约 1700 条基于 Playwright 和 AST 的断言:无引导时通过率 55%,装载技能包后 92%。这条数据的意义不在于分数本身,而在于它回答了一个此前含糊的问题——代理不是"不知道"这些平台能力,而是"知道名字但不用"。这是两种完全不同的失败模式:前者需要补知识,后者需要补约束。 换句话说,过去写进团队 wiki、藏在资深工程师脑子里、靠 code review 口口相传的那部分隐性知识,第一次有了可被机器批量消费的标准形态。对中小团队而言,这可能是短期内性价比最高的一次工程基建投入。 同期,运行时层面也在发生类似方向的调整。.NET 11 更新了最低硬件要求:在 x86/x64 上,三大平台的 JIT/AOT 基线从 这类变更表面上是兼容性收紧,实质上是把"运行环境的不确定性"显性化了。指令集基线决定的是:你的 JIT/AOT 路径在什么条件下可以确定性地跑出同样的性能。把它写死在文档里、写进部署检查项里,远好过在某个客户的旧服务器上偶发地慢十倍。 对工程团队的启示是通用的:把隐式假设显式化。代理特别喜欢"能用就行"的实现——它不会去追问这个进程在 32 位容器里会不会溢出、这个浮点数比较在边界上是否可靠、这个重试逻辑在网关超时后会怎样。人的职责,正在于持续把这些假设问出来、写进 CI 检查、写成可以自动失败的断言。 综合这两条线索,一个相对稳妥的做法已经浮出水面。它不反对用代理写代码——事实上完全不用代理的团队,如今在效率上很难竞争。真正需要重新设计的是交付流程里的几道闸门。 第一道是让代理先读约束,再写代码。把团队的架构约定、禁用的写法、必须使用的平台能力,整理成一份机器可读的项目约定文件,让它在生成之前就加载。这比事后 review 高效得多,因为拦截一个错误实现的成本,永远低于在生产环境里定位一个由它引发的故障。 第二道是把测试标准从"覆盖率"改成"场景清单"。人工维护一份面向真实用户的场景列表:空数据、弱网、重复提交、越权、版本不匹配、支付回调乱序。代理负责把这些场景实现成自动化用例,但清单本身由人定义。这条改造的价值在于,把"隐性的产品知识"重新变成了可执行资产,而不是指望模型从代码里反推出来。 第三道是给代理装上"遗留扫描"。无论是现成的开源方案还是自研规则,在 CI 里定期跑一遍,识别那些"能跑但明显不划算"的老写法。对存量项目而言,这类改造的投入产出比往往高得惊人——既减少了技术债,也在一定程度上缓解了"没人真正懂这套代码"的问题。 第四道是保留人工架构评审的最终决定权。代理擅长在既定边界内做实现,不擅长决定边界本身。哪些数据该进缓存、哪些接口将来需要版本化、哪些表结构一旦定下来就很难改——这些决定必须由懂业务连续性的人来做,而且要在数据模型定型之前做。 对做定制开发的团队来说,这四道闸门还有一个额外好处:它们沉淀下来的不只是代码,还有可复用的工程资产。下一个项目启动时,约束文件、场景清单、规则库都能直接复用——这是纯人力堆项目永远做不到的规模化。 代理写代码这件事不会回退,也不应该回退。它把工程师从样板代码里解放出来,也让小团队第一次有了和大团队竞争的可能。但速度从来不是软件工程的目标,可维护性才是。 接下来的一年,真正会拉开团队差距的,不是谁用代理用得更狠,而是谁把工程约束建设得更扎实:当 AI 生成的代码从 55% 的通过率走向 92%,那个 92% 里装的是团队的知识;而当它只停在 55%,那个数字背后藏着的,就是下一次凌晨三点的告警。 手工拼成 满天飞做文本高亮而不用 CSS.highlights、textarea 写死高度而不使用 field-sizing。官方给出的数据是:在留出集上平均精度 92%。
运行时收紧基线:工程确定性被重新定价
x86-64-v1 提升到 x86-64-v2,Windows Arm64 侧要求 LSE 指令集,ReadyToRun 编译目标在 Windows 和 Linux 上进一步提升到 x86-64-v3(包含 AVX2、FMA、BMI2 等)。官方文档明确写着:.NET 11 在更老的硬件上将无法运行,并会给出"当前 CPU 缺少基线指令集"的提示。把质量闸门前移:代理时代,一个务实的交付流程
结语




![岳阳市红十字会 [重新改版]](https://rcwap.com/attachment/images/1/2023/07/eKy07y0IjY4Z8JK47k44ia3IK4kfI4_ys_600.jpg )




