ARTICLE · 978900
AI 写代码越快,软件交付反而越难
重建一条可验证、可回退的工程闭环 · 阅读约 10 分钟
— — —
今天,一名开发者用 AI 在半小时内生成的代码,可能比过去一天手写的还多。
但许多团队同时遇到了一个反直觉现象:代码出来得更快,需求返工、评审压力、线上风险和定位成本却没有同步下降。有时,速度甚至把一个模糊决策更快地扩散到了整个系统。
问题不在于 AI 不够聪明,而在于团队只升级了代码生成面,没有同步升级工程控制面。
过去的瓶颈 生产代码 写得快 · 功能完成 · 峰值数字漂亮 |
AI 时代的瓶颈 可信交付 目标清楚 · 证据独立 · 失败后可以恢复 |
当代码越来越便宜,真正昂贵的东西变成了:定义正确问题、约束变更范围、独立证明结果,以及在失败时安全恢复。
传统研发容易把“完成”理解为代码写完、测试通过、PR 合并。AI 加入后,这种定义会越来越危险。
模型能够补齐缺失细节,却不知道哪些细节不应该由它补;能够同时修改几十个文件,却不知道哪条架构边界不能碰;也能够生成一套测试,为自己刚刚写出的错误假设提供“全绿证明”。
AI 研发的三种放大效应
① 错误目标被高速实现
② 错误假设被自动扩散
③ 错误结论被同源验证
可以用一个简单的启发式关系理解交付风险:
交付风险 ∝ 变更规模 × 不确定性
× 影响范围 ÷ 验证强度它不是精确公式,却给出了非常实用的行动方向:任务更小、假设更显式、权限更有限、验证更独立,风险就更容易被控制。
一套完整的 AI 工程体系,可以拆成六个连续环节:
目标·风险·Owner | 行为·状态·接口 |
上下文·权限·轨迹 | 测试·Eval·调试 |
基线·瓶颈·Goodput | 模型·Runtime·NPU |
这六层不是六套互不相干的方法。它们共同构成一条证据链,运行指标、事件和事故复盘又会反向修正下一轮目标与设计。工程能力的差距,最终体现在这条链能不能连起来。
设想产品经理只说一句:“增加多模型动态加载。”
这句话足以让 AI 开始写代码,却远远不足以让团队安全交付。它没有说明:加载期间旧请求是否继续执行、内存不足时谁决定驱逐、切换失败是否回到旧版本、并发请求看到哪个模型、业务 API 能不能变化。
如果这些问题没有提前回答,AI 就会用训练数据里的常见做法,替团队作出架构决定。
下一步,才是把任务继续下沉为设计和规格。好的设计不是一张漂亮的架构图,而是让开发、测试、AI 和运维对关键问题得到同一个答案:谁拥有状态?接口怎样超时?重复请求是否幂等?部分成功怎样补偿?版本怎样兼容?资源不足时如何背压?
| 业务目标 为什么做,什么结果有价值 |
| 用户场景 谁在什么条件下完成什么任务 |
| 行为与质量规格 输入、输出、状态、错误、不变量、性能与容量阈值 |
| 验收协议 环境、数据、步骤、Oracle 与证据位置 |
判断规格是否可执行,只问一句
另一个没有参与讨论的人,能否仅凭这份规格实现、测试并判断结果?如果不能,它仍然只是愿望。
AI 编码工具从补全、对话,逐渐走向仓库编辑、命令执行和长程 Agent。行动权越大,效率上限越高,风险半径也越大。
一个实用的自治风险模型是:
自治风险 ≈ 行动权限 × 运行时长
× 环境触达 × 不可逆性
÷ 可观测与回滚能力真正的工程化,不是给模型一句“请谨慎修改”,而是在模型外部建立一个Agent Harness:由确定性的系统管理上下文、状态、权限、工具、验证和恢复。
| Agent 受控执行链 |
| ① 上下文装配 只加载相关、可信、可定位的权威来源 |
| ② 计划审批 文件、权限、预算、验证与停止条件 |
| ③ 受控执行 最小权限、小步变更、完整工具轨迹 |
| ④ 独立验证 测试、Eval、性能、安全与残余风险 |
| ⑤ 人工交接 由责任人决定合并、阻断、灰度或回退 |
Prompt、Task、Spec 和 Evidence 也不能混在一起:Prompt 只是一次交互;Task 规定本次工作的目标、范围与验收;Spec 是跨版本存在的契约;Evidence 则记录 Diff、命令、测试、环境和残余风险。
这些情况出现时,Agent 应停止并升级
• 需要修改未授权文件、公共接口或原设计
• 接触密钥、外部网络、新依赖、删除、迁移或发布
• 质量、性能或安全基线下降
• 时间、费用、重试预算耗尽,或连续两轮没有新证据
尤其要避免生成与验证完全同源。让同一个 Agent 写代码、写测试、解释失败,再宣布自己成功,等于让运动员兼任裁判。可靠验证要组合编译和静态分析、契约与属性测试、差分和故障注入、性能与安全基线,以及人类对架构边界和残余风险的判断。
质量不是“没有发现 Bug”,而是关键风险已经获得独立、可复现、可追溯的证据,剩余风险也有人明确接受。
| 规则正确 | 断言·契约·属性测试 |
| 产品质量 | 集成·故障注入·升级与回退 |
| 系统结果 | Eval·盲评·生产切片 |
传统测试擅长判断确定性行为,Eval 则负责评价可能存在多个合理答案的概率性输出。两者不能互相替代。
可信的 Eval 应从“这个结果要支持什么发布决策”开始,再定义能力与风险场景、样本切片、评分方法,最后设置 Release、Block 或 Canary 阈值。只报一个总体平均分,会把长尾、安全和关键用户群的问题藏起来。
可观测性是质量证据的连接器
日志和事件说明发生了什么,指标判断范围与趋势,Trace 还原跨模块路径,Profile 定位 CPU、内存、网络或 NPU 热点。它们需要由 Request ID、模型版本、编译版本和资源 ID 连起来。
调试也不是不断尝试参数,而是一连串可证伪实验:冻结环境、提出带预测的假设、一次只改变一个变量,然后观察结果是否能区分不同根因。
| P99 超时:一条根因证据链 |
| 现象 |
| 位置 |
| 根因 |
| 决策 |
性能优化首先是一门实验科学。如果工作负载、硬件、软件、模型版本、输入输出长度、Batch、并发、预热和统计方法没有冻结,两次性能数字就没有可比性。
AI 推理尤其容易被一个数字误导:Tokens/s。更值得关注的是Goodput——同时满足质量、延迟和错误率约束的有效吞吐。峰值吞吐很高,但 P99 超标、答案质量下降或请求大量失败,并不代表系统拥有更高的可用能力。
质量证据 正确性与任务 Eval · 安全、兼容与恢复 不通过:阻断或限定场景 |
性能证据 TTFT、TPOT、P99 · Goodput、容量与长稳 不通过:调参、扩容或回退 |
| 两条证据链同时通过,才进入发布或灰度 |
Batch 是典型例子。增大 Batch 可能提高设备利用率和峰值吞吐,也可能增加凑批等待、KV 占用和长短请求干扰。真正的最优点不是图表里的最高柱,而是在真实请求分布下仍满足质量、P99、公平性和容量余量的安全工作区间。
当问题继续下沉到推理系统,工程链会更长:模型结构决定计算和状态,量化改变数值与布局,Compiler 规划全局数据流,Kernel 实现局部执行,Runtime 管理动态请求,硬件提供容量和性能上界。
| 大模型推理全栈 | |
| 模型 Attention·MoE | 量化 精度·Scale·Group |
| Compiler IR·融合·Layout | Kernel Tile·DMA·SPAD |
| Runtime Batch·KV·恢复 | NPU / 硬件 容量·带宽·NoC |
一个 Token 从请求进入到返回,要经历路由和资源预留、Prefill、循环 Decode、Sampling、Streaming 和资源释放。TTFT、TPOT、P99 与 Goodput,分别暴露这条流水线的不同问题。
容量计算也远不止“参数量乘以位宽”:
权重容量 ≈ 参数量 × 位宽 / 8
+ 量化元数据 + 对齐
总内存 = 权重 + KV Cache + Workspace
+ 通信 Buffer + Runtime/Driver
+ 碎片 + 故障恢复余量裸权重放得下,不等于系统可部署
7B INT4 裸权重约 3.5 GB,但量化元数据、KV、Workspace、页表、碎片和运行余量都会继续占空间。多芯片切分先解决容量,随后还要支付通信、气泡、同步和故障恢复成本。
这就是为什么大模型推理必须做全栈联合设计。模型、Compiler、Kernel、Runtime 和 NPU 中任何一层的局部最优,都可能成为端到端系统的全局次优。
不需要一次引入几十套制度。选一个真实、常规风险的功能,先要求四个制品:
| ① 任务卡 目标、非目标、范围、风险、Owner、验收与回退 |
| ② 设计包 场景、不变量、责任、接口、状态、失败与 ADR |
| ③ 执行证据包 上下文、计划、权限、Diff、命令、测试和未知项 |
| ④ 发布证据包 质量、性能、版本、环境、残余风险与 Canary |
跑完一轮后,再看交付周期、评审等待、首次验收通过率、缺陷逃逸、P99、Goodput 和恢复时间。一次只改一个流程变量,然后复测。
真正有价值的工程改进,不是文档数量增加了,而是团队开始能够回答:为什么做、谁决定、改了什么、怎样证明、在哪运行、失败后怎么回来。
— — —
AI 不会让软件工程消失。恰恰相反,它会把软件工程从“如何生产代码”,推向“如何控制一个能高速生产代码的系统”。
未来更稀缺的工程师,不只是会写 Prompt、调 Kernel 或调用模型的人,而是能够从业务意图出发,在规格、代码、模型、编译、运行时和硬件之间追踪同一个决策的人。
他们知道什么时候可以自动化,什么时候必须停;知道什么数字可以相信,什么证据还不够;也知道系统出错时,怎样解释、止损和恢复。
代码可以由 AI 快速生成,但可信交付仍然是一门人的工程。
如果你的团队正在把 AI 引入研发流程,不妨先问一个问题:我们升级的只是生成速度,还是整条工程闭环?欢迎留言说说你们目前最难补上的一环。