跳到主要内容

撤回的代价:为什么撤回一项 AI 功能比上线它更难

· 阅读需 11 分钟
Tian Pan
Software Engineer

你现有的发布流程是为发布不可逆、回滚无成本的世界设计的。AI 颠覆了这一点。一旦某个功能上线了一个季度,撤回它的破坏成本就会超过发布它的成本 —— 而且你对该功能收到的最响亮的客户反馈,将是在你取消它的那天,而不是它发布的那天。

团队会为每次 AI 发布构建一个紧急开关(kill switch)。但没人会去拉动它。不是因为功能完美无缺,而是因为等到有人想撤回时,撤回的成本已经复合增长,超过了发布标准所考虑的任何因素。功能旗标(Feature flags)假设世界是对称的:开启前的系统和开启后的系统是同样有效的静止点,你可以根据喜好在它们之间移动。AI 功能默默地打破了这一假设,而团队围绕可逆旗标构建的发布流程,则悄无声息地忽略了这种不对称性。

团队第一次注意到这一点,是在有人提议弃用该功能时。

发布是对称的,而撤回不是。

我们通常所说的软件回滚在机械上是对称的:撤回部署,系统回到之前的状态,用户看到的是一小时前看到的内容。AI 功能假装符合这种模式。它们隐藏在旗标后发布,拥有紧急开关,操作手册上写着“如果质量下降,就把旗标切回到关闭状态”。

该操作手册遗漏的是用户。发布前一天,用户自己写邮件。发布后一天,助手帮他们起草。三个月后,那种能够凭空写出邮件第一句的“肌肉记忆”已经萎缩。切换旗标并不能让用户回到发布前的状态。它将用户带回了一个他们已不再拥有的工作流,带回了一种他们已不再练习的习惯,这种摩擦在最上游就会显现出来 —— 在开始、构思、选择写什么的那个时刻。

这不是关于认知依赖的假设。这是你关闭功能时收到的运营信号。支持工单(Support tickets)不会说“我无法使用助手”,而是说“我无法开始了”。投诉的性质更像是生产力故障(productivity outage),而不是功能故障,因为该功能已经变成了隐形的脚手架,移除它就移除了用户已不知道如何重建的结构。

不对称性在于:发布是在用户现有的工作流之上增加了一种能力。而撤回则是移除了一项已经成为工作流本身的能力。

回滚操作手册未涵盖的三种失败模式

紧急开关处理的是简单情况:模型产生了错误答案,指标很差,你关闭它,质量恢复。这是编写操作手册时针对的情况。难办的情况是质量没问题,但团队仍想撤回功能,其原因与模型本身无关。

定价决定架构导致的成本超支。 一个以固定人头费定价的功能遇到了随对话长度扩展的推理账单,到了第三季度,单位经济效益(unit economics)已不再成立。团队想要撤回成本最高的变体。然而,到那时,用户已经围绕更长的对话构建了整个工作日。所谓的“更便宜的替代方案”并不是原有方案的缩小版 —— 它是另一个东西,而这种差异本身就是破坏。

合规性要求撤回模型能够处理的功能。 法务在六个月后发现了监管风险:在受监管行业中的索赔证明、Prompt 中缺失的司法辖区免责声明,或者是模型偶尔产生的违禁对比陈述。解决办法是移除该能力或对其进行严格限制。对于已经围绕更广泛的能力构建了工作流的用户来说,这被视为没有替代方案的功能停机,因为团队在发布时将合规性视为一个阻塞点,而不是一个会随着时间推移塑造产品的持续约束。

模型弃用迫使行为改变。 供应商退役了底层模型。替代模型在基准测试中表现“更好”,但在语气、拒绝姿态、格式习惯以及用户无意识构建的细微便利性上有所不同。OpenAI 在 2026 年初退役 GPT-4o 引导了数千人签名的请愿书、有组织的 #Keep4o 抵制活动,以及区分“工具依赖”(instrumental dependency,即模型融入了工作流)和“情感依恋”(relational attachment,即用户对模型对话风格的情感纽带)的学术文章。那些原本认为模型升级是中性的团队,在更换模型的当天发现,模型就是一个产品表面,而更换模型就是一次产品变更。

在这三种情况下,紧急开关在操作上是可用的,但在决策上(politically)是不可用的。没有人会去拉动一个会产生比该团队那年发布的任何事故都要大的客户反馈的旗标。

回撤计划:作为发布的准入条件

AI 功能的标准发布清单通常包括评估(evals)、延迟预算、成本上限、回滚程序以及紧急开关(kill-switch)测试。但通常不包括的是一个可信的未来停用计划。这里的 “可信” 意味着:如果该功能必须在 12 个月内退役或降级,用户体验会是什么样子,以及团队是否真的会在压力下执行它。

这与紧急开关不同。紧急开关处理的是二元情况——功能开启或关闭——并假设关闭状态是可以接受的。而回撤计划则是针对关闭状态不可接受的情况而设计的策略性降级路径:即使团队正在停用用户正在使用的版本,用户也需要该功能以某种形式继续工作。

一个有效的回撤计划在发布前需要回答四个问题:

  • 降级阶梯是什么? 如果我们承担不起当前版本的推理成本,用户会退而求其次使用哪个更便宜的变体?我们如何沟通能力的这种变化,以便用户理解刚刚发生了什么?“分层门控的上下文窗口” 和 “以摘要作为成本控制” 这种具体的手段,能让计划变得切实可行,而非纸上谈兵。
  • 迁移方案是什么? 如果底层模型被供应商停用了,我们是锁定一个特定版本,还是保留一份之前行为的副本,亦或是提供一个设置让用户自行选择?发布时没有回答这个问题的团队,在供应商的停用日期到来时,将被迫在压力之下做出回答。
  • 沟通曲线是什么? 一个用户感知不到的功能,比一个用户主动选择加入的功能需要更长的公告期。停用通知、产品内提醒、工作流替代方案——这些都是产品工作,而不是发布日志的文案,它们需要数周没人安排过的工作量。
  • 当反馈袭来时,团队实际上会做什么? GPT-4o 退役的那天,最响亮的信号不是技术性的,而是情感性的。没有预演过应对方案(我们说什么、谁来说、我们根据反馈改变什么、我们坚持什么)的团队,会在公众面前即兴发挥,而这种即兴发挥将是大多数用户多年后对该功能唯一的记忆。

如果团队无法具体回答这些问题,那么该功能就不具备发布条件——这不是因为它在技术上不成熟,而是因为组织尚未意识到:只要用户继续依赖它,组织就必须承诺运营该功能,而这段时间可能比任何记录在案的产品路线图都要长。

从一开始就为可逆性而设计

这其中有些是技术性的,但大部分不是。

明确固定模型版本。 一个直接指向供应商 “默认(default)” 别名的功能,会把供应商的停用时间表当成自己的。固定到具体命名的版本,能将模型生命周期变成团队的一个决策,而不是一件被动发生的事情。这还使得迁移方案变得可测试:当新版本发布时,团队可以并行运行,观察行为差异,并有预见性地编写迁移计划。

将用户可见的产品与底层能力解耦。 功能是 “撰写草稿回复”,而能力是 “在特定温度(temperature)下使用特定提示词的特定模型”。将两者视为独立的层,意味着你可以在不重命名功能的情况下更换能力,并且可以在不告诉用户 “你的功能没了” 的情况下,将能力降级——切换到更小的模型、更短的上下文或更保守的拒绝姿态。

将静默依赖作为一等公民指标进行追踪。 团队的仪表盘通常衡量功能使用情况,却很少衡量功能的关键性(criticality)——即这种运营信号能告诉你:“如果这个功能明天消失,有多少比例的用户不得不改变他们的工作方式。” 一个简单的代理指标是在小样本群体中有意进行短暂的停机,以支持工单量和流失信号作为反馈。这虽然让人感到不安,但在你真正需要使用紧急开关的那天到来之前,这是了解紧急开关实际代价最便宜的方法。

将沟通视为功能的一部分,而非发布的一部分。 那些发布 AI 功能时只写一篇博客文章却不再有后续沟通机制的团队,实际上是在把沉默作为一种产品决策。用户在这种沉默中养成习惯,并从这些习惯中学习功能的作用。当团队最终想要更改功能时,他们必须打破这种沉默,而之前的沉默越久,打破时的震动就越大。

适配的发布流程

针对 AI 功能的发布工程需要假设:每一次成功的发布都是一项承诺,其生命周期终点的成本将比起点更高。这改变了团队运营模式中的几件事。

它改变了发布标准:除了评估和成本预算,一个可信的回撤计划也是 “具备发布条件” 的一部分。它改变了紧急开关的用途:它是针对灾难性质量回退的运行手册,而不是 “我们想停用这个功能” 的战略答案。它改变了沟通准则:成功的功能会产生向用户解释变动的维护负担,而这种负担不会出现在团队现有的任何容量规划计算中。它改变了团队对采用率(adoption)的看法:被深度采用的功能就是深度束缚的功能,组织发布新功能的欲望应该与其支持现有成功功能的累积成本进行权衡。

这一切背后的核心逻辑是,AI 功能的生命周期具有一种不对称性,而团队现有的发布流程——围绕可逆的功能旗标(feature flags)和幂等部署(idempotent deploys)构建——往往在潜意识中忽略了这一点。发布只是轻松的前半段。撤回(如果发生的话)才是组织尚未设计好的部分。而 “我们发布了这个功能” 与 “我们在其整个生命周期内负责任地运营这个功能” 之间的区别,决定了一个团队是被自己的旧账搞得措手不及,还是能够应对自如。

团队第一次不得不停用的 AI 功能会教会他们这一点。早点学会这一点的团队,在停用功能时的痛苦会更少。而晚点学会的团队会发现,产品中最受喜爱的功能往往是回撤成本最高的功能,而这份代价需要用客户信任来偿还——这是紧急开关永远无法定价的货币。

References:Let's stay in touch and Follow me for more thoughts and updates