METR 量出了 18% 的提速,然后亲口说这个数别信

·阅读约11分钟·Evergreen Tools Team

💡 工具推荐: JSON 格式化、CSV 转 JSON、字数统计

2026 年 2 月 24 日,METR 发布了一篇更新,标题是《我们正在改变开发者生产力实验的设计》。标题很平淡,内容很少见:他们先报出一个提速数字,然后花了整篇文章解释为什么这个数字不可信。要知道 2025 年那篇被引用了几千次的论文,结论是「AI 让有经验的开源开发者做任务变慢了 20%」。这次他们算出来的是 −18%。一家研究机构在对自己不利的方向上得到结果时会谨慎,在对自己有利的方向上仍然谨慎,这件事本身值得读。

桌面上的研究图表与笔记本

跨过零的置信区间不是结论,是能力边界

一、它到底说了什么,用原话里的数字

先说基线:METR 之前的研究发现,AI 工具让有经验的开源开发者完成任务的时间变长了 20%,数据来自 2025 年 2 月到 6 月。为了看这个效应随时间怎么变,他们在 2025 年 8 月启动了新实验,参与者是原研究里的 10 位开发者,加上从更多样化的开源项目里新招募的 47 位,一共 57 人,时薪 50 美元。方法沿用旧设计:开发者预先指定要做的任务,任务被随机分配到「允许用 AI」和「不允许用 AI」两种条件,然后记录耗时。结果是:对原始开发者那个子集,他们现在估计提速 −18%,置信区间 −38% 到 +9%;对新招募的开发者,估计 −4%,区间 −15% 到 +9%。两个区间都跨过了零。

# 1) The two estimates METR published, with their intervals.
#    Nothing here is rounded or reinterpreted.
rows = [
    # cohort,          point, ci_low, ci_high
    ("original 2025",   +19.0,  +2.0,  +39.0),   # tasks took LONGER
    ("returning devs",  -18.0, -38.0,  +9.0),    # speedup
    ("newly recruited",  -4.0, -15.0,  +9.0),    # speedup
]

for cohort, pt, lo, hi in rows:
    crosses = lo < 0 < hi
    print(f"{cohort:16} {pt:+.1f}%  [{lo:+.1f}, {hi:+.1f}]"
          f"{'  <- spans zero' if crosses else ''}")

二、为什么这个数字不可信:官方给了三条理由

第一条是参与率。2025 年全年,开源开发者里用 Claude Code、Codex 这类 agentic 工具的人变多了,直接后果是越来越多人不愿意参加这个研究,因为参加意味着有一半任务不能用 AI。这种拒绝对提速估计的偏置方向是明确的——把提速估小。第二条是报酬。他们把时薪从 150 美元降到 50 美元,这是另一种选择效应。第三条最技术,也最容易被忽略:对同时使用多个 AI agent 的开发者,他们测「任务耗时」的方法不可靠。三条里第一条是坏消息,第二条是可修复的失误,第三条则指向一个更深的问题。

# 2) An interval that spans zero does not mean "no effect".
#    It means this design cannot tell you the sign. Those are different
#    claims, and only one of them is supported by the data.
import math

def half_width(sd, n, z=1.96):
    return z * sd / math.sqrt(n)

# Rough check: what sample size would pin an effect of this size down?
sd_ratio = 1.0          # spread of per-task speed ratios, generous
for effect in (0.05, 0.10, 0.18):
    n = (1.96 * sd_ratio / effect) ** 2
    print(f"to detect {effect:.0%} at 95% confidence: ~{math.ceil(n)} paired tasks")

三、并发会毁掉你内部的基准测试

如果你在公司里量过「用了 AI 之后任务快了多少」,第三条理由应该让你停下来。假设一个人同时开三个 agent 跑三个任务,那么每个任务的墙钟时间都包含了另外两个任务的等待时间。你测出来的「任务耗时」不是这个任务的成本,而是一个队列的延迟。这个问题在 2025 年还不严重,因为大多数人是一个窗口一个对话;到 2026 年,多开 agent 已经是常态。于是所有基于墙钟时间的内部度量,都会系统性地高估成本、低估提速,而且偏误大小取决于这个人有多忙。这不是统计修正能救的,得改测量对象:从墙钟时间改成活跃时间,把并发数当成一个显式字段记下来。

日光下的空办公桌

当参与是自愿的,样本本身就是结论

# 3) METR's own list of why the follow-up is unreliable.
#    Read this as the honest part of the paper, not the appendix.
reasons = [
    "developers decline to enrol because they do not want to work without AI",
    "that refusal biases the speedup estimate downward",
    "pay was cut from $150/hr to $50/hr, adding a selection effect",
    "time-on-task is unreliable for developers running several agents at once",
]

# Point 4 is the one that quietly kills most internal benchmarks too:
# if one person drives three agents in parallel, wall-clock time is not
# the cost of a task, it is the cost of a queue.

四、如果还想量,就把设计做扎实

METR 的处理方式不是「算了」,而是改设计。对内部团队来说,可借鉴的做法是四件事。第一,单位定成任务,不是开发者也不是迭代,因为人和人之间的方差会吃掉一切。第二,随机化分配,同一个任务池里一半允许 AI 一半不允许,否则你测的是任务难度。第三,先把要做的任务列表和排除条件写下来再去跑,事先写和事后解释的区别,就是能不能被别人相信。第四,主指标用插桩出来的活跃分钟数,次指标加审查时间和 14 天内的回滚率——后者是很多团队忽略的,因为 AI 写出来的代码,成本往往不在写的时候,而在两周后。

# 4) If you still want an internal number, make the design defensible
#    before you run it. Pre-registration is cheap; re-litigating a
#    contaminated number for a quarter is not.
experiment:
  unit: task                    # not "developer", not "sprint"
  assignment: randomised        # AI allowed vs disallowed, per task
  pre_registered:
    tasks:
      - "drizzle: add cursor pagination to orders list"
      - "fix: flaky integration test in billing worker"
  excluded_up_front:
    - "tasks where the dev already knows the fix"
  primary_metric: active_minutes   # instrumented, not self-reported
  secondary:
    - review_minutes
    - revert_rate_within_14d
  stopping_rule: "80 paired tasks, then report whatever it says"

五、那么 2026 年的真实情况是什么

METR 自己的结论是:从和参与者的交流来看,2026 年初的开发者很可能比 2025 年初提速更多;但由于实验里的选择效应,他们的数据对这个增量只有非常弱的证据。注意这句话的结构——先给出方向性判断,再明确说明证据强度。这是研究机构的诚实写法,也恰好是我们读任何生产力报告时该用的滤镜。所以对「AI 到底提了多少速」这个问题,2026 年 10 月最诚实的回答是:方向为正,幅度未知,而且这个幅度高度依赖任务类型和开发者对工具的理解程度。任何给出精确百分比并且不带区间的说法,都在卖东西。

// 5) Instrumented timing beats a survey. Log the spans you already have.
//    active minutes, not calendar minutes - concurrency has to be explicit.
type TaskSpan = {
  taskId: string;
  startedAt: number;
  endedAt: number;
  agentsInFlight: number;   // >1 means wall clock overstates the cost
};

function activeMinutes(spans: TaskSpan[]): number {
  return spans.reduce((total, s) => {
    const wall = (s.endedAt - s.startedAt) / 60_000;
    return total + (s.agentsInFlight > 1 ? wall / s.agentsInFlight : wall);
  }, 0);
}

// Then publish it with the interval, not alone:
// "review time fell 12% (95% CI 4% to 19%, n=87 paired tasks)".

📌 常见问题 FAQ

METR 这次是推翻了之前「变慢 20%」的结论吗?

不是。这是两个不同的实验。2025 年那项研究(数据来自 2025 年 2 月到 6 月)发现 AI 让有经验开发者的任务耗时增加约 20%。2025 年 8 月启动的新实验给出的是另一组估计:原始开发者子集 −18%、新招募者 −4%,同时 METR 明确说明由于选择效应,这些数据对真实效应的证据很弱。

为什么说数据不可信?

METR 给了三条理由:一是越来越多开发者不愿意参加,因为不想在没有 AI 的情况下工作,这会把提速估计往下偏;二是时薪从 150 美元降到 50 美元带来的选择效应;三是对同时使用多个 AI agent 的开发者,任务耗时测量不可靠。

−18% 是「快了 18%」的意思吗?

在这个实验的符号约定里是。早期研究的结论是任务耗时增加 19%(区间 +2% 到 +39%),新实验里原始开发者子集的估计是 −18%(区间 −38% 到 +9%),负号表示耗时减少,也就是提速。区间跨零意味着这个设计本身分辨不出正负。

置信区间跨零是不是等于没有效果?

不等于。区间跨零只说明这个实验的精度不足以下结论,不能反过来说效应为零。这是两种不同的主张,只有前者被数据支持。

我们自己团队要怎么量?

按 METR 的教训:以任务为单位、随机分配是否允许 AI、事先登记任务清单与排除条件、主指标用插桩得到的活跃分钟数(并把并发数记成显式字段),次指标加审查耗时和 14 天回滚率,并且规定好停止条件后再报结果。