三个月之墙
你用 vibe coding 构建一个 SaaS。一开始很快。“做个登录”——30秒。“加上支付”——2分钟。三周内 MVP 就上线了。
三个月后,奇怪的事情开始发生。AI “整理"了支付逻辑,悄悄改变了折扣计算。添加一个新端点,破坏了现有的认证。一次重构请求改变了公开 API 的字段名,所有客户端全部失效。
这就是所谓的 logic drift——AI 无意中修改了现有的业务逻辑。传统开发中也存在回归 bug。但 logic drift 不同。开发者从未打算做出的更改,在整个代码库中悄无声息地发生。每次 prompt 都在一个全新的 context window 中开始。
用数据说话
这不是主观感受。有数据为证。
速度的代价是复杂性。 卡内基梅隆大学的研究团队比较了 807 个 GitHub 仓库在采用 Cursor 前后的变化(MSR 2026)。第一个月代码增量提升了 3-5 倍。两个月后,速度优势消失了。留下的是:静态分析警告增加 30%,代码复杂度增加 41%——永久性的。
并没有变快——反而变慢了。 非营利 AI 研究机构 METR 对 16 名有经验的开源开发者进行了随机对照试验(2025)。在他们已经熟悉的项目上,使用 AI 工具的小组完成任务的时间多了 19%。然而开发者自己认为加速了 20%。感知与现实之间存在 39 个百分点的差距。新项目上的结果可能不同,但"AI = 总是更快"的假设已经被打破。
规模化后,稳定性崩溃。 根据 Google DORA Report(2025),AI 采用率每增加 25%,软件交付稳定性就下降 7.2%。
确实崩溃了。 Amazon 在 2025 年全公司强制推行 AI 编码工具,部署了 21,000 个 AI agent。同一时期,约 30,000 名员工被裁,审查能力急剧下降。AI 快速生成代码与审查人员减少的叠加效应,导致 90 天内发生了 4 起 Sev-1 事故。2026 年 3 月 5 日,一次 6 小时的宕机造成了约 630 万笔订单损失。内部文件写道:“GenAI 的快速代码生成正在无意中暴露漏洞,现有的安全措施完全不够。”
“做 TDD"不是答案
针对 vibe coding drift 的常见建议是"写测试”。方向是对的,但怎样提供测试决定了结果。
TDAD 研究(arxiv 2026)精确地测试了这一点。Qwen3-Coder 30B 在 SWE-bench Verified 的 100 个实例上进行了测试。
| 条件 | 回归率 |
|---|---|
| 基线(无测试指令) | 6.08% |
| 过程式"做 TDD"指令 | 9.94%(更差) |
| 将受影响的测试文件提供在 context 中 | 1.82%(降低 70%) |
告诉 agent “做 TDD"反而更糟。Agent 在试图遵循过程式指令时偏离了原始任务。但将"这些测试文件必须通过"作为具体 context 提供,回归减少了 70%。
区别很明确。不是"如何测试"的指令,而是"什么必须通过"的契约。
Hurl:Plain Text 中的契约
Hurl 是一个以 plain text 声明 HTTP 请求和预期响应的测试工具。由 Orange(法国电信)维护,是一个零运行时依赖的 Rust 二进制文件,GitHub 18.7k 星。速度足以在 CI 中的每次 commit 上运行。
# Login succeeds
POST http://localhost:8080/api/auth/login
{
"email": "test@example.com",
"password": "secret123"
}
HTTP 200
[Asserts]
jsonpath "$.token" exists
jsonpath "$.user.email" == "test@example.com"
# Unauthenticated access returns 401
GET http://localhost:8080/api/pages
HTTP 401
两个契约。登录必须返回 200 和 token。未认证的访问必须返回 401。
当这个文件被提交到 git 并在 CI 的每次 commit 中运行时——AI “整理"认证逻辑使 401 变成 200 的那一刻,commit 就会被拒绝。Drift 在到达生产环境之前就被捕获了。
为什么是 Hurl
单元测试也能捕获 drift——如果你不给 AI 修改测试文件的权限的话。但单元测试验证的是内部函数,使它们在结构上与实现耦合。函数名变了,测试就坏了。每次重构都需要更新测试。
Hurl 位于 HTTP 边界。它只声明请求和响应。它对代码内部一无所知。无论 AI 如何修改代码,如果外部可观察行为不变,测试通过;如果不同,测试失败。它天然独立于实现。
| 单元测试 | Hurl | |
|---|---|---|
| 验证对象 | 函数内部 | HTTP 契约 |
| AI 重构时 | 一起修改 | 不变 |
| Drift 检测 | 有条件的(需锁定) | 天然的 |
| 代码结构依赖 | 高 | 无 |
| 人类可读性 | 代码级 | Plain text |
| LLM 生成 | 需要理解代码结构 | 只需 HTTP |
Hurl 验证的不是代码,而是行为。代码可以被 AI 自由修改。行为不能改变。这个区别就是捕获 drift 的关键。
Ratchet 锁定
当 Hurl 测试通过后,锁定它们。这就是 ratchet。
1. Write Hurl tests for current API (or auto-extract)
2. Run on every commit in CI
3. Passing tests cannot be deleted or modified
4. New features require new Hurl tests
5. All existing + all new tests must pass to merge
告诉 agent “重构这段代码”,它可以自由修改代码。但如果 Hurl 测试失败,commit 会被拒绝。Agent 必须在重构时保留所有现有行为。Hurl 未覆盖的边界情况仍可能发生 drift,但对于已覆盖的行为,drift 在结构上被抑制了。
这与 TDAD 研究的发现完全一致。不是过程式的"写测试"指令,而是具体的"这些 Hurl 文件必须通过"契约。Agent 可以选择方法,但不能违反契约。
遗留系统也适用
已经在生产环境中运行 vibe coding 的软件?不需要从头来过。
第一步:用 Hurl 捕获当前行为。
如果有 API 文档,直接翻译成 Hurl。如果没有,让 agent 读取现有代码并编写 Hurl 测试。目标是为每个端点用 plain text 声明"它目前是这样工作的”。
第二步:接入 CI。
验证所有 Hurl 测试通过,并将其设为合并条件。
第三步:你安全了。
无论 AI 重构还是添加功能,Hurl 都保护着现有行为。如果发生 drift,CI 立即捕获。
不是打地基——是抗震加固。不用关门停业就能加固建筑。
不是 Vibe Coding 的终结——而是进化
创造"vibe coding"一词的 Andrej Karpathy 在整整一年后的 2026 年 2 月宣布"vibe coding 的时代结束了”。新范式是 agentic engineering——人类不写代码,而是编排能够自主规划、实现和测试的 agent。
Thoughtworks Technology Radar(2025)将 Spec-Driven Development 放在了"Assess"级别。Martin Fowler 的团队发表了 SDD 工具分析。行业正在朝同一方向收敛。
Hurl 测试是这一转型的最小单元。你不需要 10 个规范。你不需要学 OpenAPI。一个 Hurl 文件就是一个契约。 而这个契约在不限制 agent 自由的前提下,从结构上防止了 drift。
不要换模型。加一个契约。
相关文章
- yongol——AI 编码 SaaS 的龙骨 — 用 10 个 SSOT 强制全栈一致性。Hurl 是其中之一。
- Ratchet Pattern——如何让 Agent 走到底 — 确定性验证和 ratchet 锁定背后的理论。
- IFEval-Exploiting Ratchet Code — 利用 sycophancy bias 和 Reins 的反馈循环。
References
- Cursino, D. et al. (2026). “Speed at the Cost of Quality? The Impact of AI Coding on Software.” MSR 2026. arxiv.org/abs/2511.04427
- METR (2025). “Measuring the Impact of Early AI on Experienced Open-source Developer Productivity.” arxiv.org/abs/2507.09089
- Google Cloud (2025). DORA Report 2025. cloud.google.com
- Wang, Z. et al. (2026). “TDAD: Test-Driven Agentic Development.” ACM AIWare 2026. arxiv.org/abs/2603.17973
- Autonoma (2026). “Amazon Vibe Coding Failures: 4 Sev-1s in 90 Days.” getautonoma.com
- CNBC (2026). “Amazon convenes ‘deep dive’ internal meeting to address AI-related outages.” cnbc.com
- Thoughtworks (2025). “Spec-Driven Development.” Technology Radar Vol.33. thoughtworks.com
- Karpathy, A. (2026). “From Vibe Coding to Agentic Engineering.” thenewstack.io
- Fowler, M. et al. (2025). “SDD Tools.” martinfowler.com
- Hurl. hurl.dev | github.com/Orange-OpenSource/hurl