上周跟一个做AI产品的朋友聊天,他说现在最怕的不是AI写不出代码,是AI写的代码没人敢合入。这句话其实点到了整个AI技术栈的痛处:模型能力在往前跑,但把模型能力变成可靠产品的那条研发流水线,还停留在上一个时代。Anthropic最近对研发流程的大重构,本质上就是在解决这个问题——他们不是给传统流程打补丁,而是把AI开发中惯用的原型验证、评测驱动、灰度发布这些思路,重新拧成了主流程。这篇文章我拆解一下他们的重构逻辑和工程实践,也把我在自己团队里尝试类似改造后的实测经验和踩过的坑一并写出来,适合正在做AI产品、或者刚接到AI改造任务的技术团队参考。
1. 传统研发流程的失灵:当"可预期"假设被AI击穿
1.1 传统流程的底层地基是"可预期"
传统研发流程无论怎么包装,底层依赖都是同一个假设:需求可以被完整描述,行为可以被精确预期,缺陷可以被准确定位。瀑布式模型要求你先把需求文档写清楚再开工;敏捷开发虽然承认需求会变,但也默认每一次迭代都要有明确的用户故事,开发按故事写代码,测试按故事定验收标准。这套流程能运转多年,是因为人的编码行为是确定性的——每一行代码都可以解释为什么这么写,行为是什么,出错了能指着某一行说"就是这里"。
1.2 AI开发的三个"不可预期"把流程打穿了
AI开发至少有三个层面的不可预期,让传统流程彻底失灵。首先是输出的概率性:同一个提示词跑十次可能有十种不同的输出,没有"正确的一行",只有分布和质量偏好。第二是因果的反直觉:你在这个句子里加一个词,结果可能从完全不可用变成完全可用;你在无关紧要的位置删掉一个词,前三个功能正常了,后两个功能却崩了。第三是缺陷形态的转移:传统缺陷是"有和无"的问题,AI缺陷更多是"好和更好"的问题,它不会报错,它就是给你一段质量不达预期的内容,你甚至很难向没有上下文的人解释到底哪里不对。
这三个不可预期叠加,导致传统研发流程中关键的Debug、回归测试、验收评审三个环节全部失效。你没法用断点去看一个模型的思考过程,没法用单元测试断言模型输出"必须包含某个字符串",更没法在评审会上靠拍脑袋判断一个提示词改动是高危还是低危。Anthropic的工程团队在做Claude系列产品时,就是被这三个问题卡住了研发节奏——改动频繁、验收困难、回归不断,传统流程反而变成了最大的效率瓶颈。
1.3 Anthropic给出的新地基:可观测、可评测、可回滚
所以Anthropic的重构,不是换一个流程框架,而是把地基换掉。他们不再试图让AI开发变得"可预期",而是接受不可预期这个现实,围绕"可观测、可评测、可回滚"三个原则重新设计流程。可观测,是指每一个改动的影响面都要能通过日志、追踪和指标看到;可评测,是指改得好不好不再靠人工看感觉,而是有一组数字化的评测分数;可回滚,是指任何改动上线后如果表现异常,系统能在分钟级把它撤下来。这套新地基的好处是,即便单个改动的行为不可预期,整个系统的行为依然可控——你不预测地震,但你给房子装了隔震层。后面几节我会按照他们的实践,从原型验证、开发环境、评测体系、部署机制四个维度拆解这套新流程。
2. 原型验证前置:把"先跑通再打磨"变成研发主流程
2.1 AI原生应用的原型成本趋近于零
传统研发流程里,原型是给产品经理确认需求用的,做完就扔,不是主流程。Anthropic的做法完全相反:在AI开发里,原型本身就是主流程。原因很简单,在AI能力足够强的今天,写一个能跑通的原型,成本低到可以直接当正式实现来用。你不需要提前设计清楚每一个函数接口,只需要把核心链路用自然语言描述出来,交给Claude这类代码模型去生成,然后立刻跑一遍看结果。跑通了,这个原型就往前迭代;跑不通,你丢掉的只是一点提示词修改的时间,而不是两周的架构设计文档。
2.2 可执行规格说明:让每一次改动都长出"结果"
这个理念落到Anthropic的日常实践,最直观的体现是"可执行规格说明"。传统PRD是给人类读的文字,规格对不对要等开发写完代码才知道;Anthropic的团队会把需求写成一组可执行的"行为示例",作为验证基准先跑起来——比如"假设用户输入这样的问题,系统应当返回这样的结构,并遵守这三条约束"。这本身就可以用一个最小原型来承载。等于说,文档还是需求文档,但它同时也是测试用例,还是第一版实现。每一次改动,都会先跑这些行为示例,看一眼输出符合预期再往下走。
这套机制带来的直接好处是:所有讨论都从"我觉得应该这样"变成了"我们跑一下看看"。评审一个改动好不好,不再靠坐在会议室里辩论逻辑,而是直接在真实输入上对比改动前后的输出差异。这种质变,是传统原型方法论里面没有的。
2.3 边写边验的流水线:把"开发"从写代码变成调行为
我特别推荐团队试试这样的边写边验流水线,基本是Anthropic这套思路的最小实现。先设定一个由行为示例组成的验证集;改动提示词或系统配置后,立即自动跑验证集;然后把每一条输入的前后输出差异拉出来看;差异可接受就迭代下一个问题,不可接受就回退改写。这套循环跑起来之后,开发者的关注点会从"写什么代码"转移到"调什么行为"——代码反而变成一种配置工具,真正的产品是那组提示词和约束条件,以及它们与模型之间的交互逻辑。
这套循环我实测下来,最显著的变化是团队讨论质量的提升。以前大家争论的是"这个提示词该不该加这个限制",讨论半天没有结论;现在直接把改动放上去跑一轮,让双方都看着实际输出说话。改坏了,数据立刻打脸;改好了,数据立刻支持。争论变少了,改动的速度反而快了不少。
3. 对话式开发环境:从IDE到AI原生的工具链
3.1 为什么传统IDE在AI开发里越来越别扭
传统IDE是为人类编写确定性代码设计的,它的一切功能——语法高亮、断点调试、重构、智能补全——都在辅助"人逐行写代码"这个动作。但AI开发的动作模型完全不同:你不是在逐行写,而是在对话式地描述意图,然后在模型给出的候选实现里做选择和修正。用传统IDE做AI开发,就像用Word文档去管理一个多人在线的实时协同项目,工具本身不支持这个交互范式,你只是在硬套。
Anthropic的工具链重构,最值得关注的点是他们把"对话"变成了开发环境的中心。以Claude Code为代表的AI编码代理,天然是对话式工具:你在终端里用自然语言描述任务,它自己看代码、自己改代码、自己跑测试、自己汇报结果。这个交互模型,本质上是把曾经需要人类阅读代码、定位问题、修改代码的工作,委托给了能直接操作代码库的Agent。开发者从"编码者"变成了"指挥者",注意力从语法细节转移到意图校验和结果审查上。
3.2 沙箱隔离与权限边界:让Agent敢写代码,但碰不了危险区域
工具链重构最容易被忽视的部分是Agent的权限边界。一个能自主改代码的Agent,如果同时拥有生产环境的执行权限,那就是一颗定时炸弹。AI Agent的行为本身是概率性的,你永远不知道它在一次执行里会不会顺手改掉一个不该碰的配置文件。Anthropic在这方面的原则是:给Agent提供明确的工作边界,所有高危操作(接触生产数据、推送主分支、修改鉴权配置)都需要人类确认,低危操作(在沙箱里跑测试、写临时文件、读代码)可以自主执行。
这个权限设计非常关键,它决定了Agent到底能不能成为日常研发流程里的一部分。如果权限给得太死,Agent什么都干不了,等于没有;给得太宽,团队每天都在给Agent的意外操作擦屁股,很快就没人敢用了。我们团队初期就是把权限放得太宽,一个Agent在跑批量任务时把临时目录下所有JSON文件当成中间产物全清了,其中一个刚好是评测集的备份——这种事故一次就能让团队对Agent失去信任,后面再收紧权限、加白名单,确实磨合了一段时间才恢复信心。
3.3 对话上下文的管理:长会话是效率杀手,也能成为记忆系统
对话式开发的另一个关键问题是上下文管理。AI Agent聊天式的交互会积累大量历史,模型每次都要处理整个上下文,会话一旦过长,它就会开始遗忘早期约束,甚至出现"中期做对了、后期开始瞎改"的退化现象。Anthropic的工程实践里,很重要的一条是把长会话按任务切分——一个任务开一个新会话,每个会话聚焦单一变更,做完就结束。同时他们会把跨会话语义沉淀成两类东西:一类是项目级的规范文档,让后续会话都能读取;另一类是自动生成的变更履历,每次会话结束后,摘要写回仓库,成为"项目记忆"的一部分。
这个设计其实是在解决一个隐性成本:每一个新会话的Agent都需要在几分钟内建立对项目的理解,如果项目没有结构化的记忆文件,每次都是从零开始读代码。这就像你新招了一个工程师,他每天都得靠翻项目文档进入状态,那产出肯定不如一个既有交接手册又有历史决策记录沉淀的团队。
4. 以自动评测为中心的迭代体系:让每次改动都有数字化的质检
4.1 传统测试为什么兜不住AI输出
传统测试体系是基于断言的:给定输入,验证输出是否等于预期值。这个模式对AI开发不够用,因为模型输出是开放的,合法的结果有无限多种,没法用一个固定字符串去断言。你可以说它"应该包含某个字段",但没法要求它"必须生成某个句子"。更麻烦的是,AI输出的质量评价是相对的——今天这个模型版本的输出质量和昨天相比是微弱差异还是一致,这需要数字化的度量,而不是一口气的检查。
4.2 评测集的构成:正样本、对抗样本、约束校验一起来的门禁
Anthropic的做法是以自动评测为中心,建一套"评测集"作为研发流程的门禁。评测集通常包含三类内容,各司其职:
| 评测集类型 | 目的 | 典型样例 | 门禁要求 |
|---|---|---|---|
| 正样本 | 验证核心能力无退化 | 标准用户提问与预期输出 | 核心指标达标 |
| 对抗样本 | 戳边界与安全隐患 | 诱导提问、恶意输入、极端场景 | 不允许翻车 |
| 约束校验 | 硬性格式与规则断言 | 字段结构、敏感词、长度限制 | 全部通过 |
这三类评测集合起来,跑出来的分数就是这个改动版本的"数字质检报告"。每个改动合并之前,都必须跑通门禁:核心分不下降,对抗样本不翻车,约束校验全通过。达不到标准,代码不允许合入。这套机制的好处是把"感觉还不错"这种主观判断从研发流程里踢了出去。
4.3 评测集本身也要迭代:金标数据与人工抽检闭环
不过立了门禁之后,最隐蔽的坑是评测集本身会过时。模型在变、产品需求在变,可能上周还符合预期的案例,这周因为业务调整已经不再代表用户真实使用场景了。如果不持续维护评测集,门禁就会从一个质量保护机制,退化成一套"过拟合考试"——评测集里塞进去的东西,模型早就学会了,跑了等于没跑。
Anthropic的团队为此做了一个闭环:每次上线之后,从真实用户流量里抽样,挑出那些线上表现不达标但评测集没拦住的问题案例,人工标注后补进评测集;同时定期审视评测集里那些"所有版本都满分"的死样本,把它们替换成更有区分度的新样本。这个动作要让评测集像产品本身一样持续演进,而不是写一次就再也没人管。我自己在实践中也吃过这个亏:评测集三个月没动,结果一次优化把某个过时约束直接干碎了模型在真实场景里一个很重要的能力,而评测门禁竟然是绿的,追了一个下午才在线上日志里发现问题。从那以后,我把评测集的季度复盘排进了固定日程。
5. 面向不确定性的部署与回滚:AI产品发布的新姿态
5.1 回归风险无法完全消除,发布必须交付"后悔药"
传统发布的最佳实践是尽量在发布前把所有问题都测出来,所谓"零缺陷发布"。但在AI开发里,这个问题变成了概率问题:模型本身就是一个概率系统,即使评测集全绿,线上也可能出现评测集覆盖不到的边界情况。更麻烦的是,提示词改动引发的回归往往不是局部的——可能模型在最常见的场景表现完美,却在某个低频但高成本的场景里彻底崩溃,而这种崩溃在发布前的有限测试里几乎不可能被预判。
所以Anthropic把发布的指导思想从"确保不出问题"改成了"确保出了问题能快速恢复"。他们把部署设计成一个可以随时倒转的操作,而不是一个不可逆的事件。也就是说,每次发布都带着"后悔药":如果线上指标异常,系统自动回滚到上一个稳定版本,整个流程应该像按撤销键一样自然。没有这个兜底机制,团队就不敢频繁迭代;不敢频繁迭代,那AI产品针对线上问题快速调整的优势就完全发挥不出来。
5.2 灰度放量、秒级回滚、以及"变化检测"的实战配置
我分享一下这个思路落地的三个核心实践:
- 灰度放量:不要把新版本一次性全量铺开,先把1%、5%、20%的用户切过来,观察指标确认稳定后再逐步放大。
- 秒级回滚:一旦某个监控指标触发阈值,比如错误率上升、响应变慢、某个关键功能的使用量骤降,自动回滚立即执行,不需要等运维上号人工排查——先恢复稳定,再讨论原因。
- 变化检测:它比传统监控更进一步,不只监控服务健康度,还要监控"AI输出的行为变化"——比如系统提示词改了,模型开始在某些场景下拒绝回答。这类行为变化不一定反映在错误率上,却会直接影响用户体验,必须靠对模型输出的语义级监控来捕捉。
这套机制跑起来之后,团队的发布心态会产生一个有趣的变化:以前发布是"惊心动魄的时刻",现在发布变成了"日常操作"。因为风险不再集中在发布这个瞬间,而是分散在灰度、监控和回滚的整个流程里,每一个环节都可以纠偏。团队由此获得了宝贵的迭代速度。
5.3 可观测性设计:对话级追踪与成本监控不能省
最后补一点部署环节里容易被忽略的观测维度。AI应用的观测不能只看服务指标,还要看对话级的行为:用户和模型之间的每一轮交互,模型输出了什么,消耗了多少Token,花费了多少成本,这些都要沉淀成可检索的记录。一方面,它们是排查线上问题的第一手资料——用户说"最近模型回答质量下降了",你要能从历史对话里定位是哪次改动引起的;另一方面,Token成本是AI应用最真实的运营成本,一个提示词改动可能让平均响应成本翻一倍,这种变化如果不可见,团队根本没法做理性决策。
我做AI产品后最深的感受就是:可观测性不是锦上添花,而是AI研发的基本盘。没有对话级追踪,你面对线上投诉时就是盲人摸象;没有成本监控,你就可能在不知不觉中把收入全烧在Token上了。
6. 流程重构后的真实踩坑记录:团队、工具与工程实践
6.1 人机协作分工的重新磨合
流程重构最大的阻力往往不在工具层面,而在团队习惯上。我们团队前期试过让所有开发都直接上Agent流水线,结果一半人很兴奋,另一半人极度抵触。抵触的原因是角色认知的冲击:很多工程师担心"我会不会变成提示词填写员",这种焦虑真实存在,不能靠发个公告就消除。
后来我的做法是重新定义分工:让Agent负责机械性高、模式明确的任务,比如写单元测试、重构命名、补文档;让人类负责需要判断力的任务,比如定义产品意图、审核输出质量、设计评测集。这个分工方式讲清楚之后,抵触的声音少了很多。而且数据显示,代码审查里Agent发现的问题和人类发现的问题重叠度很低——Agent更擅长发现逻辑遗漏,人类更擅长发现产品意图不匹配,两者其实是互补关系,而不是替代关系。
6.2 过度自动化:前期盲目追求全自动吃过的亏
AI流程改造有个非常常见的误区:一上来就追求全自动。我们前期搭了一条所谓"全自动流水线",Agent可以自主改代码、跑测试、合并分支。听起来很酷,但实际跑起来第二天就出事了——一个Agent在一次重构中顺手删了一个看起来没用的工具函数,结果另一个服务在运行时直接抛异常。事后排查,这个函数只在某个边缘分支里被调用,静态分析没告警。更要命的是,Agent删它之前甚至没有发出任何提醒,因为它判断"这个函数已经没有任何调用方"。
那次事故之后我把自动化程度降了一个级别:涉及删除、修改公共接口、改动配置文件的动作,一律强制人工确认;只有新增文件和新增函数可以自主执行。这个配置一直用到现在,再没出过类似的事故。我的体会是,自动化的边界不是"它能不能做",而是"它做错了你承不承担得起"——承受不起的动作,就坚决留在人工手里。
6.3 评测集过拟合:一个让我追了三天的问题
还有一个坑很经典:评测集过拟合。有一次我们对某个核心功能做优化,评测集分数从85一路涨到94,所有人都很高兴,觉得这个方向走对了。结果发布之后,线上用户反馈精准度反而下降了。后来定位到原因:评测集里的测试输入和我们往提示词里注入的少量示例高度相似,模型相当于在背答案,评测分数虚高;线上真实输入和那几条例子的分布差异很大,模型就露馅了。
这个教训让我意识到,评测集必须定期打乱、引入新的真实场景样本,最好还能做一个"区分度报告"——如果某组样例所有版本都满分,说明它已经不具备测试价值了。另外,评测集本身要避免和训练数据或提示词里的示例过近,否则测的就是记忆力而不是能力。
6.4 多Agent协作的一些实测建议
最后分享一下多Agent协作的实测建议。多Agent看问题的视角确实不一样,尤其是在复杂代码库重构时,让一个Agent负责改代码、另一个Agent负责审查代码,能同时兼顾效率和风险。但协作的前提是必须把各自的任务边界划清楚——你给每个Agent的提示词里,一定要明确"你的职责范围是什么、你不许碰什么",否则两个Agent会互相干扰甚至互删文件。
我目前跑得比较顺的模式是分角色协作:提出方案的角色、实现代码的角色、审查输出的角色、执行评测的角色分开。每个角色各自有独立的会话和上下文,最后的决策由人工统一汇总。这种模式比把所有事情塞给一个Agent要慢一些,但稳定性和可控性高出不少,对于生产环境来说,可控性远比速度重要。
最后再分享一点实际操作中的体会。Anthropic重构研发流程这件事,最打动我的不是某个具体工具,而是他们用这套流程验证了一件事:在AI时代,研发流程的核心不是"控制人"而是"控制风险",不是"消灭不确定性"而是"让不确定性可观测、可评测、可回滚"。我们自己的团队把这套思路落地之后,发布频率从每周一次提到了每天两到三次,线上事故率反而下降了。流程本身不产生价值,价值产生于它是否匹配了你所处的技术现实——AI时代的现实就是,我们现在面对的不再是确定性代码,而是一套概率系统,所有流程都该按这个前提重新设计一遍。