模型表现不取决于语言,而取决于能否在给定上下文中推导出正确答案;同类任务中收益差距可达数倍,关键变量是任务类型而非工具本身。
"Python 写得好不好"是个错误的问题,而这个问题却是所有对比文章都在回答的。决定一个模型是否有帮助的属性不是编程语言,而是在你能够提供的上下文中,有多少正确答案是在可见范围内的。
对编程助手的对比是按语言、框架和 IDE 来组织的。这些轴心几乎无关紧要。一个能写出合格 Rust 代码的模型也能写出合格的 Python 代码;一个在你的服务上失败的模型通常用任何语言都会失败,因为它缺失的不是语法知识。真正重要的差异在于任务本身,而且差异巨大——大到同一个工具,用正确的方式衡量,会在一类任务上带来显著的提速,在另一类任务上反而造成减速。
其背后的机制可以解释这一切。模型返回的是其上下文的可能延续。所以"这能 work 吗"这个问题可以分解为:答案是否可以从我展示给它的内容中推导出来、常规答案是否就是正确答案、以及我能否足够廉价地验证结果,使得出错代价不高。
这三个属性在实践中并非相互独立——成熟的代码库往往三项都低,全新的脚本往往三项都高——但它们失败的方式不同,知道哪项低可以指导你修复什么。上下文充分性低,可以通过组装更好的上下文来修复。验证成本低,可以通过先写测试来修复。常规性低则完全无法修复,这就是信号——这种事自己做。
格式之间的机械转换。JSON 转类型化结构体、OpenAPI 片段转客户端方法、SQL schema 转迁移样板。答案完全由输入和编译器决定。
本来需要查手册的咒语。regex、jq 过滤器、ffmpeg 调用、窗口函数。按构造来说就是常规的,运行一次就能验证。
形状显而易见、案例可枚举的测试脚手架和 fixture。
独立脚本的初稿。经典的 demo 场景,也是那些显示巨大提速的已发表试验实际测量的场景。
需要在多个调用点保持一致的变更。模型编辑它所看到的内容;它无法知道第四个调用者,除非第四个调用者在上下文中。这是重复辅助函数产生的机制,也是累积的重复代码的来源。
依赖未写明的不变量的任何事情。"不要在事务外调用此方法"、"此队列是至少一次语义所以处理器必须幂等"。把这些写在仓库说明文件里,任务就上升一个档次。
依赖和版本工作。模型见过很多版本的库,但并不能可靠地以你 lockfile 中的版本为条件。
授权边界。快乐路径是可预测的;所有权检查恰恰是大多数公开示例中缺失的那部分代码。参见这类安全 bug 的分类。
并发、锁和事务边界。验证很昂贵,因为失败是间歇性的,而常规答案往往在细微处是错的。
瓶颈在数据的性能工作。模型优化它能看到的代码;代价通常在它无法看到的查询计划或访问模式中。
两个随机对照试验通常在论点的两端被引用,但用这个分类框架来看,它们根本不冲突。
Peng、Kalliamvakou、Cihon 和 Demirer(2023)招募了 95 名自由开发者,随机分配 GitHub Copilot 访问权限,任务是单一任务:在 JavaScript 中实现一个 HTTP 服务器。处理组完成速度快了 55.8%。这个任务三项都高——全新、完全符合常规、由提供的测试工具可在几秒内验证。
METR 的 2025 年试验(Becker、Rush、Barnes 和 Rein,2025 年 7 月)在其 16 名参与者已维护的成熟开源代码库中,将 AI 辅助随机分配到 246 个真实 issue 上。允许 AI 处理的问题耗时长了 19%。这些任务三项都低:不变量存在于维护者的头脑中,正确的修复往往是契合现有设计的非常规方案,而验证意味着理解一个参与者比任何上下文窗口所能容纳的更熟悉的代码库。
两个结果都不能泛化为"AI 有帮助"或"AI 没有帮助"。两者都与效果是任务的属性这一结论一致。包括介于两者之间的研究的完整文献阅读,在 productivity 页面。
在开始之前,给每张 ticket 的三个属性分别打 0、1、2 分。上下文充分性:如果你能说出每个必须修改的文件且它们能放进上下文窗口,得 2 分;否则得 0 分。常规性:如果一个称职的陌生人会写出同样的东西,得 2 分;如果正确答案特定于你的系统,得 0 分。验证:如果测试能在一分钟内证明它,得 2 分;如果要到生产环境才能发现,得 0 分。
五分或六分:把整个任务委托出去,检查 diff。三分或四分:用模型做计划和样板,自己写承重部分。两分或以下:模型是个橡皮鸭,纠正它的时间会超过它节省的时间。这个评分表只需 15 秒,它唯一真正的功能是阻止你花 40 分钟通过实践来发现分数。
如果你想检查便宜模型是否足以处理五到六分的任务带——这是大多数量所在的地方——用同一个 prompt 并行跑两个模型比任何公开排名都更有信息量,因为这个档次是由你自己的任务定义的。
Autocomplete vs Chat vs Agent:三种不同的工具
Does AI Actually Make Developers Faster?
Giving a Coding Model the Right Context