第 10 章
代码即战场
GitHub Copilot的办公室里有一块屏幕,实时显示着全球开发者接受或拒绝补全建议的统计数据。到2023年初,这块屏幕上的数字已经越过了某个心理阈值:超过百分之四十的补全建议被接受。这意味着,全球数百万开发者每天有将近一半的新代码,不是自己逐字敲出来的。
但2023年最值得注意的变化,不是这个数字本身。Copilot最初卖给世界的,是一个补全引擎。你在编辑器中写下函数名和注释,它从模型内部吐出几行代码,你选择接受、修改或忽略。这个交互模型极其简单:模型是建议者,人是决策者,循环只走半圈。
2023年初,GitHub开始扩展这个循环。Copilot Chat在编辑器中打开了一个对话面板,开发者可以在其中要求模型解释一段代码、重构一个函数、或者生成测试用例。循环变成了完整的:人发出指令,模型生成回应,人审查结果,再次发出指令。同一时期,一家名为Cursor的创业公司走得更远。
Cursor的创始团队做出一个判断:如果编辑器的底层不是为智能体设计的,那么对话面板只是补丁。他们把整个编辑器建立在AI优先的架构上:模型不是附加功能,而是交互模型的核心。在Cursor中,你可以选中一段代码,直接命令模型修复一个bug或用更函数式的风格重写,模型会执行修改并展示差异。如果修改引入了新的错误,模型可以读取编译错误或Lint警告,自动再次修改。这就是智能体循环进入编辑器的方式。
2023年夏天,普林斯顿大学的研究者发布了一个名为SWE-bench的基准测试。它的设计直截了当:从GitHub上的真实开源项目(主要是Python项目)中提取已解决的issue,把issue描述交给智能体,让它独立完成修复并提交pull request。评估标准不是代码看起来对不对,而是测试用例是否通过。这是工业级强度的地面真值——反馈不是模型给的,不是人类评的,是编译器、测试框架和CI管道给的。SWE-bench的初始结果令人沮丧。
即使是当时最先进的模型,在不经过专门工程化的情况下,成功率只有个位数百分比。但SWE-bench的发布本身是一个转折性事件:它给编程智能体建立了一个任何人都可以复现的竞技场。在此之前,编程智能体的能力展示依赖的是精心挑选的demo——每个创业公司都能录一段视频,让模型修好一个bug。SWE-bench把demo变成了实验:一千多个真实issue,公开数据集,统一评估标准。你不能再挑选对你有利的案例;你必须在一千个案例上证明你的智能体确实有效。这就是缰绳层在编程领域获得地面真值的方式。不是模型更强了,而是反馈更硬了。---
在计算机科学中,辅助工作的软件程序也被称为工具。集成开发环境是工具,编译器是工具,版本控制系统是工具。这些工具的共同特征是:它们提供即时、确定、不容争辩的反馈。编译器不会说你的代码可能有问题需要再检查一下;它会精确地告诉你:第47行,缺少分号。测试框架不会说这个功能似乎部分实现了;它会打印一个红色的FAIL,后面跟着期望值与实际值的对比。
缰绳层在编程领域的成功,根源就在这里。在通用型智能助理的场景中——订票、购物、日程安排——地面真值几乎不存在。一个智能体替你预订了机票,你怎么知道它选的是最优价格?你怎么知道它没有误解你的偏好?你怎么知道明天的航班价格不会更低?
在这些场景中,模型的自我评估是唯一可用的反馈源,而模型的自我评估——缰绳层工程师们已经反复领教过——常常是一厢情愿的幻觉。模型会声称已成功预订航班,而实际上它可能预订了相邻城市,或者根本没有完成任何操作,只是在输出中编造了一个确认号。在编程中,不需要模型自我评估。
编译错误就是编译错误;测试失败就是测试失败;类型不匹配就是类型不匹配。这些反馈不由模型生成,不由人类判断,而是由外部系统客观裁决。智能体要么通过了测试,要么没有。循环可以继续,是因为每一步的反馈都可靠。
2023年,当通用型智能助理服务接连跳票——Anthropic的早期代理功能、OpenAI的插件生态、多家初创公司的AI管家产品——编程智能体却在稳步渗透。Copilot的企业付费用户数在2023年持续增长,到年底已进入数千家大型企业的开发环境。Cursor的用户群从早期采用者扩展到主流开发者。亚马逊发布了CodeWhisperer,Meta开源了Code Llama。编程智能体的商业版图在扩张,而通用助理的创业公司则在演示视频和实际可靠性之间的裂缝中挣扎。
对比是鲜明的。两边的缰绳设计没有本质差异:循环、工具、权限。区别在于一边有地面真值,另一边没有。智能体落地的顺序不是由任务价值决定的——替人订票和安排日程的市场价值远大于替人写单元测试——而是由反馈质量决定的。地面真值定律在编程领域获得了最完美的例证:不是编程比别的事情更容易智能化,而是编程给缰绳层提供了别处没有的扎实地面。---
2023年底到2024年初,编程智能体的主界面开始从IDE转向命令行。这个转变的工程意义,比表面看来的更大。在IDE中,智能体是在一个被精心控制的环境里工作的:代码补全、对话面板、差异审查——每一步都在人类的注视下完成。在命令行中,智能体独占了整个执行环境。它可以读取文件、执行命令、运行测试、git commit、创建pull request——所有这些操作都不需要人类点一下确认。
Claude Code是这一转变的先锋之一。2024年初,Anthropic发布了一个命令行工具,让开发者可以在终端中启动一个智能体会话,赋予它读取代码库、运行命令、修改文件和提交代码的权限。它的交互模型不是对话,而是代理:你描述任务,它执行,你审查结果。如果它执行出错,它可以自主读取错误信息、修改代码、再次运行——直到测试通过,或者你终止它。
这不是工具辅助人类;这是人类监督工具,而工具自己干活。Devin的发布把这个转变推向了高潮。
2024年3月,Cognition AI发布了一段视频:一个名为Devin的智能体接受了一个来自Upwork的真实编程任务,它独立阅读了需求描述、搭建了开发环境、编写了代码、调试了错误、修复了测试失败,最终提交了可运行的pull request。视频中最令人震撼的时刻,不是代码写得好——而是Devin自己在终端中运行了npm install,遇到了依赖冲突,它自己读取了错误信息,调整了版本号,重新运行了安装命令,然后继续工作。
这个时刻的冲击力,来自循环的完整性。Devin不需要人类告诉它依赖出错了需要试试改版本号;它自己感知到了错误,自己做出了决策,自己执行了修复。这个循环——感知、决策、执行、验证——就是智能体区别于工具的本质所在。而让这个循环真正运转起来的,不是模型的智能,而是地面真值的硬度:编译错误、依赖冲突、测试失败——这些都是环境自己发出的信号,清晰到模型无法误解,强硬到模型无法绕过。---
SWE-bench在2024年变成了一个战场。Devin发布后,Cognition AI声称它在SWE-bench上达到了超过百分之十三的解决率。这个数字现在看起来不高,但在当时是一个巨大的跳跃:之前的智能体基准测试解决率大多在个位数百分比。
但真正的争议不在于数字本身,而在于测量方式。SWE-bench的维护者和其他研究者指出,Cognition的评估可能使用了非标准程序——比如提前知道测试用例的内容,或者使用了issue描述中本不应提供的额外信息。这场争议不是关于作弊;它揭示了一个更深层的问题。
当基准测试成为商业竞争的武器,测量本身就变成了一个政治行为。谁控制评估标准,谁就控制了叙事。SWE-bench的原始设计者Carlos Jimenez和他在普林斯顿的同事们在2024年多次更新了基准测试,修复了数据泄露的来源,严格了评估标准。
每一次更新都像是一次重新校准:一些智能体的分数下降了,另一些上升了。
排行榜变成了一个动态的、有时是痛苦的战场。但这场战斗的有趣之处在于:它之所以可能,正是因为地面真值足够硬。SWE-bench的测试用例是公开的,评估逻辑是透明的,数据集是固定的。任何人都可以验证任何人的声明。在一个没有地面真值的领域——比如评估智能体理解用户意图的能力——即使评估标准有争议,你也无法最终裁决。但在编程领域,你可以。你可以下载数据集,跑一遍评估,检查代码,统计通过率。如果某家公司的声称与你自己的复现结果不一致,你可以公开质疑。
这就是地面真值带来的治理效应。它不仅是智能体的反馈源,也是市场的信息源。
在通用助理领域,智能体的能力评估几乎完全依赖公司自己的演示和用户的主观体验;在编程领域,有一个独立于所有商业参与者的裁判。编译器不关心谁的资金更多;测试框架不知道谁的市场份额更大。它们只输出一个结果:通过,或者失败。---
2024年,编程智能体的商业格局开始分化。Copilot的路线是平台化。它根植于GitHub的生态——全球最大的代码托管平台,拥有最完整的代码图谱和开发者网络。Copilot不需要是最强的编程智能体;它只需要是集成度最高的。当开发者已经在GitHub上管理代码、审查pull request、运行CI管道时,在同一个平台内获得AI辅助是路径最短的选择。微软在2024年持续加大对Copilot的投入,将其嵌入GitHub的每一个角落——从issue页面到代码审查界面,到Actions的日志输出。
Cognition的路线是自主性。Devin的卖点不是辅助你做更多,而是替你做完。它在2024年获得了大量风险投资,估值迅速攀升。它的演示视频在社交媒体上病毒式传播,因为每一个工程师都本能地理解自主编码智能体的含义:如果它真的有效,它对软件开发的组织方式将是颠覆性的。但自主性有一个前提:信任。
而信任在编程领域不是按智能出售的,是按可靠性出售的。Devin在早期用户中的口碑是分裂的。一些开发者报告说,它在简单任务上表现出色,但在复杂任务上会陷入循环——反复修改同一个错误而不理解根本原因,或者生成能通过测试但完全错误的实现。另一些开发者则指出,即使是人类初级工程师,在复杂任务上也会犯类似的错误;问题不在于智能体是否完美,而在于它的错误率是否低于替代方案。
Anthropic的路线是终端化。Claude Code不是平台,不追求自主性;它把自己定位为一个超级终端——一个在命令行中工作的、有读写权限的智能体,但每一步操作都暴露在开发者的审查之下。它的模型是Claude的模型,但它的缰绳层设计哲学是:人可以随时介入,读取日志,理解智能体的决策,并在任何一步叫停。这种设计的核心理念是:信任不是通过演示建立的,而是通过透明的、可回溯的、可干预的操作建立的。三种路线,对应三种关于信任的假设。
Copilot假设信任来自平台整合——你信任GitHub,所以你应该信任Copilot。Cognition假设信任来自能力——如果Devin能完成足够多的任务,你就会信任它。Anthropic假设信任来自控制——如果你能在任何时候介入,你就敢放手。2024年,这三种假设在市场上同时接受检验。没有哪种假设明显胜出,但所有的假设都在同一个基础之上运行:地面真值。无论你选择哪种路线,你的智能体最终要面对的不是人类的评价,而是CI管道的红绿灯。这个事实把编程智能体的竞争从叙事竞争变成了工程竞争:你你的智能体多聪明,但测试通过率不会说谎。---
地面真值定律在编程领域的成功,开始产生一个意料之中的后果:模型厂在吸收这一层。2024年,多个模型实验室开始将代码执行反馈引入训练管线。传统的代码模型训练依靠的是静态数据——代码库、文档、论坛讨论。新一代的训练方法加入了一个动态环节:模型生成代码,代码在沙箱环境中执行,测试结果作为奖励信号送回训练。这意味着模型不再是看过代码,而是写过代码并知道了它是否能运行。
DeepSeek在2024年发布的Code模型就是以这种方式训练的。训练数据不仅包括代码本身,还包括模型在前一版本中生成的代码及其执行结果——包括编译错误、运行时错误和测试失败。模型在训练中学会了识别哪些模式会导致错误,哪些模式会通过测试。这不是让模型更聪明,而是让模型内化了原本属于缰绳层的反馈循环。
这就是脚手架悖论的又一次上演。缰绳层公司花了两年时间证明:让模型在循环中执行代码、读取错误、重试修复,是提升性能的关键。模型厂看到了这一点,然后把这套循环直接放进了训练。
模型不再需要外部缰绳来运行循环;循环已经内置在模型参数中。模型不说我需要运行一下看看有没有错误,而是直接生成更可能通过测试的代码,因为它已经在训练中见过数百万次失败和修复的模式。
对缰绳层公司来说,这是一个熟悉的威胁。模型厂每一次吞并都遵循同一个模式:缰绳层在生态中验证了某种能力的价值,模型厂将其标准化并内置到模型或API中,缰绳层要么向上爬,要么在这一层死去。编程领域的缰绳层——从补全到对话到智能体循环——正在以加速度被吸收。智能体循环本身能否保持作为独立层的价值,取决于它能否在模型内置的循环之外提供增量。
2024年底,这个问题的答案开始浮现。模型内置的循环很强,但它的分辨率是粗粒度的:模型在训练中见过大量错误模式,但它在面对一个具体的、从未见过的代码库时,仍然依赖于通用的模式识别。外部的缰绳循环则不同:它可以在特定的环境中、特定的依赖版本下、特定的配置文件中精确运行代码,并获取精确的反馈。
它的反馈不是概括性的模式判断,而是这一个具体的测试用例失败了,期望值是X,实际值是Y。这种精确性是不可压缩的。模型可以内化统计学意义上的错误模式,但无法内化你代码库里的那个刚刚被你同事改了参数名的函数签名。外部循环的价值不在于智能,而在于它与具体的、变动中的环境保持同步。这意味着智能体循环可能不会完全被吸收,但它的价值重心会从提供循环转向提供与环境同步的精确反馈。---
2025年,编程智能体的主要战场从单文件补全移到了多文件重构,从修复小bug移到了实现完整功能,从辅助个人开发者移到了替代初级工程师的某些职责。Cursor在这一年发布了它的代理模式——一个在编辑器内工作的智能体,可以跨文件搜索、修改、重构,同时保持与人类开发者的代码风格一致。
它的核心创新不是模型更强,而是缰绳更聪明:它维护了一个代码库的知识图谱,理解哪些文件之间有依赖关系,哪些修改会触发连带影响。这不是模型的能力,这是缰绳层的能力——在模型之上构建的、对代码库结构的理解与索引。
Claude Code在同一时期推出了长期记忆功能:智能体可以记住之前与开发者交互的上下文——项目结构、代码风格偏好、测试习惯——并在后续会话中自动应用这些记忆。这听起来像是模型的功能,但实现它的核心是缰绳层:一个持久化的、可检索的、自动更新的上下文存储系统。
它解决的问题不是模型不够聪明,而是模型每次会话都是新的——缰绳层通过外部记忆弥补了模型的上下文窗口限制。终端智能体在2025年最显著的变化,不是它们能做更多,而是它们开始被认真对待为劳动力而不是工具。
多家企业开始将编程智能体纳入正式的开发流程:智能体处理标为good first issue的简单任务,人类工程师审查pull request,通过后合并。这不是自动化测试,不是CI/CD管道,而是智能体作为开发团队的一员,承担可定义的、可评估的工作量。微软在2025年初发布的一份研究报告中,描述了在内部工程团队中部署Copilot智能体的效果:智能体独立完成了约百分之十五的bug修复任务,与人类初级工程师在类似任务上的错误率相当但速度更快。
报告的措辞是谨慎的——在特定类型的任务上,智能体达到了与人类初级工程师相当的表现——但含义是清晰的:编程智能体不再只是生产力工具,它们开始替代某些层次的人力。这个转变的意义不在于技术,而在于组织。
当一个智能体可以独立完成一个issue,提交一个pull request,并通过CI验证时,它就不再是一个辅助工具。它有了一个可定义的产出,一个可评估的质量标准,一个在组织中的确定位置。这就是缰绳层从让模型说人话到让模型干人事的最终形态:不是提示词技巧,不是工具调用,而是把模型置于一个可验证、可追责、可干预的工作流中,让它成为一个劳动力。---
但编程智能体的成功也暴露了地面真值定律的阴暗面。地面真值越清晰,竞争越容易变成基准测试的军备竞赛。
2025年,SWE-bench已经衍生出了多个子版本——SWE-bench Lite、SWE-bench Verified、SWE-bench Multilingual——每个版本都在试图消除数据泄露、提高评估难度、增加任务多样性。智能体开发者在排行榜上争夺每一个百分点的提升,而这些提升有时候并不对应真实世界的可用性。一个智能体在SWE-bench上提高了两个百分点,但这两个百分点可能来自对特定类型issue的过拟合,而不是通用能力的提升。
测量越精确,就越容易被操纵。这不是编程领域独有的问题,但在编程领域,这个问题特别尖锐,因为地面真值给了操纵者明确的攻击目标。如果你知道测试用例长什么样,你就可以优化你的智能体去通过那些测试——即使它在真实场景中表现不佳。
这种教考应考的现象在2025年变得普遍:一些智能体在SWE-bench上表现优异,但在用户仓库中表现平庸,因为SWE-bench的代码库和issue模式已经成为训练数据的一部分。
地面真值既是缰绳层最强大的武器,也是缰绳层最脆弱的软肋。它让编程智能体获得了其他领域没有的客观评估,但也让编程智能体的进步更容易被窄化为一个数字。当整个行业都盯着一个排行榜时,真正的创新——那些不能立即反映在分数上的创新——可能被低估,而被高估的则是那些仅仅优化了分数的技术。
这也是缰绳层的历史教训之一:地面真值不是免费的。它需要持续的维护、校准和批判性审视。基准测试的维护者——普林斯顿大学的研究者、开源社区的贡献者、行业联盟的参与者——在2025年承担了一个他们从未预期过的角色:他们不再只是学术研究者,而是编程智能体市场的裁判和监管者。他们设定规则,执行标准,仲裁争议。
他们的技术决策——选择哪些仓库、接受哪些issue、采用哪种评估指标——直接影响着数百万美元的商业决策。这就是协议政治在编程领域的体现。谁定义SWE-bench,谁就在定义编程智能体市场的竞争规则。
2025年,多个商业实体开始尝试建立自己的基准测试,以自己的标准、自己的数据、自己的评估逻辑。这不仅是技术竞争,也是标准竞争。如果一个公司控制了自己的评估标准,它就可以声称自己的智能体在行业标准测试中排名第一——即使这个标准是它自己定义的。
开源社区在2025年对这一趋势做出了回应:SWE-bench的治理被移交给了一个多方参与的委员会,包括学术界、开源社区和多家公司的代表。这个委员会负责审核基准测试的更新,确保评估标准的独立性和透明度。在缰绳层的历史上,这是第一次出现一个正式的、行业范围内的治理机制——不是为了治理模型,而是为了治理缰绳。---
2025年底,编程智能体的商业版图已经清晰可辨。Copilot占据了平台型编程智能体的最大份额,得益于GitHub的生态锁定。Cursor在专业开发者中赢得了口碑,它的代理模式让它在复杂任务上超越了传统的补全型助手。
Devin在自主性市场上继续烧钱扩张,但它的用户增长和收入增长之间的差距引发了关于可持续性的讨论。Claude Code在高质量开发者中建立了忠诚用户群,但它的市场份额小于平台型产品。但这些商业竞争的背后,有一个更深层的结构变化正在发生。
编程智能体不再是一个模型加上一些工具调用;它正在变成一个新的软件工程范式。在这个范式中,人类工程师的角色从写代码转向定义需求、审查实现、设计架构。智能体处理的是实现层的细节:编写符合规范的代码,运行测试,修复错误,提交pull request。人类处理的是抽象层的决策:功能应该怎么做,系统应该怎么组织,质量应该怎么定义。这不是一个未来的预测;这是2025年已经在发生的事情。
在多家大型科技公司的内部调查中,使用编程智能体的工程师报告说,他们花在写代码上的时间减少了,花在理解代码和审查代码上的时间增加了。他们不再逐行编写实现,而是描述需求,然后审查智能体的输出。他们的技能组合从快速准确打字转向了快速准确判断——判断智能体生成的代码是否正确、是否安全、是否可维护。
这个转变对缰绳层的影响是深远的。如果人类工程师的主要工作是审查和判断,那么缰绳层的设计重心就需要从让模型更好转向让人类更好地审查模型。权限弹窗、沙箱、人在环、回滚机制——这些在缰绳层早期被视为安全防护的功能,正在成为核心的用户体验。信任的计量——自主性不是按智能出售的,是按信任出售的——在编程领域找到了最具体的实现形式。
地面真值使得编程智能体获得了可靠的反馈循环,但这个反馈循环的最终接收者不是模型,而是人。当一个智能体提交了一个pull request,CI管道通过了,但人类审查者仍然需要判断:这个实现是否符合设计意图?
这个修改是否引入了技术债务?这个修复是否真正解决了问题,还是只是掩盖了症状?
地面真值能告诉你代码是否正确运行;它不能告诉你代码是否是正确的。正确运行和正确,在编程中是两件不同的事。智能体可以解决前者;后者仍然是人类的责任。这个区别,在2025年编程智能体的规模化部署中,变得越来越清晰。
编程成为缰绳层最成熟的商业场景,不是因为它简单,而是因为它的地面真值恰好足够硬,硬到可以支持智能体的自主循环,又恰好不够硬,硬不到可以完全替代人类的判断。这个恰到好处的硬度,让编程智能体可以在一个可验证的边界内工作,同时把边界之外的判断保留给人类。
这不是一个设计结果;这是编程本身的性质决定的。代码是形式化的,所以机器可以验证;软件是抽象的,所以人类需要判断。
编程智能体的故事,在缰绳层的历史中占据了一个特殊的位置。它是第一个证明地面真值定律的案例,也是第一个展示脚手架悖论如何在这一层运作的案例。
它让整个行业看到:智能体落地的顺序不是由需求决定的,而是由反馈决定的。它为缰绳层提供了第一个可规模化的商业场景,也为模型厂提供了第一个成建制的吞并目标。
到2025年底,编程智能体已经成为软件工程中不可忽视的力量。但最有趣的问题不是它能做什么,而是它的边界在哪里。
这个边界不是一个固定的线;它在移动,在每一次模型升级、每一次缰绳创新、每一次基准测试更新中移动。而移动的方向,一如既往地遵循着缰绳层的历史规律:凡是缰绳层验证过的能力,最终都会被吸收进模型本身,逼着缰绳层向上再爬一层。
编程智能体在IDE和命令行中学会了循环、工具调用和自主执行。模型厂把这些能力内化进参数,缰绳层转向编排——转向多智能体协作、工作流定义、跨系统路由。当单个智能体的循环已经不够构成护城河时,多个智能体之间的协调成为新的战场。
这不是一个全新的问题;分布式系统、微服务编排、组织管理学都曾面对过类似的结构性挑战。但这一次,编排的对象不是服务或团队,而是具备自主行动能力的模型实例。地面真值在编程领域已经证明了自己的力量;在编排层,它需要被重新定义。