先看结果:总体正确率提高1.92个百分点,仍因3个关键漏报禁止发布
启衡部件用AI协助处理供应商质量投诉:读取邮件、照片/OCR、物料与批次、检验记录、供应商风险和遏制规则,抽取问题、判定是否需要停用/隔离、路由质量工程师并起草内部处理单。AI不通知供应商、不关闭投诉、不改变库存状态;任何“可能影响已投产批次”的案例必须交质量工程师。
团队准备1,200个封存回归案例。已知良好发布 C0有1,002个可直接供人确认、141个正确升级、57个重大错误、0个严重,正确系统行为1,143/1,200=95.25%。候选C1换新模型并沿用旧提示词后,有1,051 可接受、115 正确升级、31 重大、3 严重;正确1,166/1,200=97.17%,却把3个跨批次污染案例路由为普通供应商回复。
| 终端 | C0 已知良好 | C1 首个候选项 | C2 修复候选项 |
|---|---|---|---|
| 对审查者可接受 | 1,002 | 1,051 | 1,045 |
| 正确专家升级 | 141 | 115 | 129 |
| 重大错误/不完整 | 57 | 31 | 26 |
| 关键遏制遗漏 | 0 | 3 | 0 |
| 总计 | 1,200 | 1,200 | 1,200 |
| 正确行为 | 1,143=95.25% | 1,166=97.17% | 1,174=97.83% |
C1被否决。调查发现新模型更倾向把模糊严重度补成“外观问题”,旧提示词又把升级写成软建议。团队把遏制规则移到确定性策略网关、明确状态未知时必须升级,并建立C2发布包;C2这才进入1,800例配对后台对照。第一次生产灰度发布又因并发配置错误,把95分位延迟推到13.8秒,团队在20%阶段开始47分钟后完成回滚验证。修复配置形成C2b,必须重新从后台对照和5%流量开始,不能从20%接着跑。
本文公司、质量投诉、1,200/1,800/3,600个任务、比例、延迟、成本、阈值和结果均为虚构教学案例,不是实际企业或模型基准。真实质量、安全、监管、客户与供应商处置由有权限的专业人员负责;0个严重只表示本样本未观察到,不代表未来风险为零。
发布对象不是“模型名称”:任何影响输出或行动的组件都属于发布包
模型升级常与提供商路由、系统提示、示例、检索器、嵌入模型、上下文构建器、工具数据结构、策略、解析器、渲染器、功能开关和并发参数同时变化。若只在表格写“B类模型”,出现差异时无法归因,也无法回到真正已知良好状态。团队因此给完整组合分配固定的发布包编号。
| 组件 | C0 | C2 | 回滚要求 |
|---|---|---|---|
| 模型路由/快照 | M0/S17 | M1/S04 | 别名可指回固定快照 |
| 提示/策略 | p31 / 遏制 r8 | p34 / 遏制 r9 | 不可变产物 |
| 检索/上下文 | idx42 / 构建者 6 | 相同 / 构建者 6 | 无隐藏漂移 |
| 工具/数据结构 | 受理接口v5 / 工单v3 | 相同 | 向后兼容 |
| 解析器/渲染器 | parse12/render9 | parse13/render9 | 旧产物可读 |
| 运行时 | 并发24 / 超时10秒 | 初始并发24,灰度时曾误设为80 | 配置版本化 |
| 评估/门槛 | 套件E7 / 放行门槛G4 | E7 / G5 | 新旧版本桥接报告 |
发布清单包含发布包哈希、负责人、变更列表、假设、风险类别、评估运行、批准、合格范围、功能开关、回滚目标与失效时间。若服务商无法固定模型快照,就记录响应头和小流量验证指纹,承认可重复性降低并加强在线监测;不能把别名相同当成版本相同。
每次候选发布只包含能够解释的最小变更。确需同时改模型和提示词以适配接口,也要在拆分试验里分别运行;运行参数错误归入独立的C2a包,修复后形成C2b。禁止在灰度期间手工改提示词却沿用同一发布包编号,因为同期对照和回滚目标都会失真。
基础设施修订版也不等于AI发布包修订版。容器可以成功回滚,但远端模型别名、提示数据库、功能开关、索引和策略仍是新的,产品行为就没有恢复。回滚控制器必须逐项验证清单中的组件最终解析到了哪个版本。
已知良好不是“现在生产正在跑的版本”:先证明C0可恢复、仍兼容且风险没有过期
生产当前版本可能只是“尚未被替换”,并不天然已知良好。它可能已有未修复的严重问题、依赖即将停用的模型快照、无法读取新的数据结构,或过去一周因来源和策略变化而失去回归资格。团队为C0维护最近验证时间、验证套件、生产暴露量、未关闭事件、依赖期限和回滚演练记录;任何关键证据过期,就不再把它视为已验证的回滚目标。
| 已知良好证据 | C0 记录 | 何时失效 |
|---|---|---|
| 回归测试 | E7:1,143/1,200,关键错误0 | 套件、策略或范围变更 |
| 生产 | 最后 30 天 8,420 任务 | 新关键/未知漂移 |
| 依赖 | M0/S17, index42, 工具 v5 | 快照/工具退役 |
| 兼容性 | 可读取v3至v5版产物结构 | 不可逆的数据结构切换 |
| 容量 | 维持 100% 合格峰值 | 保留端点已移除 |
| 演练 | 2026-07-14在6分42秒内恢复 | 恢复时限或凭证验证失败 |
回滚前不把C0重跑所有业务,但要有新鲜证据。每日冒烟测试验证模型路由、凭证、策略与关键工具;每周回归;每次候选项前做恢复演练。C0有已知57个重大,路由与人工容量要能承担;切回去恢复的是已批准风险状态,不是完美质量。
数据结构变更采用“先扩展、后收缩”:先让C0和C2都能读取新旧字段,观察完成后才删除旧字段。若候选版本写入C0不认识的状态,回滚可能让任务卡死;迁移清单必须列出读写矩阵、数据回填、降级转换与不可逆点。在不可逆点之前必须保持C0可用,越过不可逆点后则应建立新的回滚版本,而不是继续把C0写成名义上的退路。
外部供应商也需要可用性证明。旧快照若只在历史文档存在、实际端点已撤,不能作回滚目标;在备用区域/供应商部署已批准的降级方案并用相同关键套件验证。凭证、配额、网络白名单和数据边界都属于可恢复性,不到事故时才申请。
已知良好版本的负责人每周确认状态,但不能为了发布忽略尚未关闭的事件。若C0出现新的严重问题而C2尚未验证,正确动作可能是缩小范围、改为只读或由人工接管,而不是在两个未知版本中挑总体分更高者。发布仪表盘必须同时显示候选版本证据与降级版本的健康状态。
先写变更假设与风险预算:没有明确预期,就会对任何上线结果事后解释
C2的假设是:新模型改善噪声附件与多部件抽取,确定性隔离门把关键漏报保持在0;代价可能是输入令牌增加14%、95分位延迟增加2秒、正确升级率略有下降,但不得比基线低2个百分点以上。上线要验证的是这些事先写明、可以被证伪的变化,而不是“感觉更聪明”。
| 维度 | 预期 | 否决/护栏 | 负责人 |
|---|---|---|---|
| 正确行为 | 整体通过率至少提高1.0个百分点 | 任一切片不得恶化超过2个百分点 | 质量产品 |
| 遏制 | 提取效果提升 | 严重漏判=0 | 质量总监 |
| 升级 | 减少不必要的 | 必要的升级召回≥98% | 领域负责人 |
| 延迟 | 95分位增幅不超过2秒 | 95分位绝对值不超过10秒 | 平台可靠性负责人 |
| 成本 | +≤30%/任务 | ≤1.40 元/任务 | 产品/财务 |
| 人工工作 | 修正时间缩短 | 重大返工≤3% | 运营 |
风险预算限制候选版本的暴露:关键操作始终由人审批;生产灰度只生成内部草稿,最多影响分流优先级;扩大到20%前至少覆盖所有主要物料和供应商切片;任何跨租户、未经批准的外发或隔离失败都立即停止,不能用总体收益抵消。
变更负责人与启动/终止授权分开。模型工程提交候选项;评估负责人验证套件;质量负责人持关键否决;站点可靠性工程师判断可靠性;业务负责人批准范围;事件指挥官可紧急回滚。没有所有人同意不表示永久停滞,发布策略预先说明谁对哪类信号拥有决定权。
团队还要写清“本轮不证明什么”:不证明中长期供应商质量改善,不覆盖未测试的语言与地区,不允许自动关闭投诉,也不改变库存。发布批准只到内部建议范围,后续扩大能力必须建立新的发布包、风险判断与灰度过程。
回归集必须冻结输入、标准答案、切片和重复规则,不能每次升级都挑有利的题
1,200例来自过去任务与定向风险,去标识后封存输入、来源快照、预期终态、严重程度、允许差异与业务切片。主切片互斥并合计1,200;同一案例可以有多个次要失败标签。候选版本和C0在同一测试框架、相同工具回执上成对执行。
| 主切片 | 案例 | C0 正确 | C2 正确 | 关键 C2 |
|---|---|---|---|---|
| 隔离/领域风险 | 180 | 178 | 180 | 0 |
| 监管/客户通知 | 120 | 117 | 120 | 0 |
| 多部分/多批次 | 210 | 196 | 205 | 0 |
| 噪声附件/OCR | 180 | 169 | 174 | 0 |
| 缺失/冲突证据 | 210 | 190 | 198 | 0 |
| 常规完整案例 | 300 | 293 | 297 | 0 |
| 总计 | 1,200 | 1,143 | 1,174 | 0 |
固定不等于永不更新。生产中的新失败经负责人裁决后加入下一版套件;旧E7保留用于新旧套件桥接,E8重新运行C0和C2,避免只给候选版本增加难题。标准答案、来源或评分规则发生修正时,要生成新的案例版本,不能覆盖历史报告。
高风险180+120=300例各运行3次,要求三次严重错误均为0且判断边界稳定;普通案例按真实的单次使用统计首轮通过率。不能从三次中挑最好答案冒充生产表现。随机参数、采样参数、模型路由和试验编号都要记录。
回归还包括非模型测试:数据结构、工具契约、权限、租户、来源版本、数值与日期、渲染器、延迟与负载、降级路径和审计。模型输出正确但解析器填入了默认严重度,仍是发布失败。E22的分层评估在这里直接成为发布门槛,不需要重新发明一个总分。
C1为何被阻止:整体改善掩盖了关键切片退化和过度自信
C1的3例都属于同一种复杂组合:照片模糊、邮件说问题次要,但检验表显示多个批次使用了同一设备。模型抽取出外观缺陷后给出“常规路由”,没有保留设备共因和状态未知;自动评分只看到文字完整,确定性跨批次规则又因输入字段缺失而没有触发。领域专家在300例高风险复核中发现了这个漏洞。
| 案例 | C0 行为 | C1 行为 | 发布影响 |
|---|---|---|---|
| Q-188 | 升级设备共因 | 常规供应商回复 | 关键否决 |
| Q-404 | 挂起/询问批次映射 | 推断单个批次 | 关键否决 |
| Q-731 | 状态未知→质量工程师 | 确信的外观缺陷 | 关键否决 |
1,166比1,143多23个正确,但不能用23个低/中风险改善抵消3个关键漏报。发布聚合器先检查运行有效性与关键否决,再看重大、切片、延迟和成本;分数不加权洗平不可接受风险。
修复不能只在提示词里加一句“务必谨慎”。上下文构建器要明确输出批次数、设备关联和证据冲突;只要出现多批次或状态未知,策略就强制转给质量工程师;提示词明确不得自行降级,界面同时展示路由原因。C2既要通过原来的3例和相邻正反案例,也要证明没有把所有常规问题都升级。
拆分试验显示:只换模型时,C1得到1,166个正确、3个严重;加入提示词后是1,169个正确、1个严重;再加入结构化字段和确定性策略,C2达到1,174个正确、0个严重。变更顺序存在交互,不能把差值说成各组件独立的因果贡献;但移除策略会让Q-404再次失败,证明关键控制确实有效。
修复产生新包和全量回归。不能只重跑失败三例,也不能修改C1记录为“已通过”。被拒放行保留证据,未来相似模型升级先看失败签名。
离线通过后先做后台对照:复制真实输入,但不改变用户看到的结果和业务动作
后台对照阶段将1,800个真实形态输入同时送给C0与C2,用户仍只看到C0。候选路径中的所有写入工具都被禁用或替换成不会落地的模拟接口,输出只进入对照库,再由规则、自动评分和风险抽样复核。这样既能看到真实生产分布、来源、延迟和成本,又不会让尚未验证的候选版本改变业务分流。
| 后台对照终态 | C0使用相同输入 | C2 | 处理 |
|---|---|---|---|
| 接受无需实质性修正 | 1,288 | 1,404 | 评审员样本 |
| 小幅编辑 | 336 | 302 | 差异原因 |
| 正确升级 | 102 | 66 | 容量/必要性审计 |
| 重大返工 | 74 | 28 | 失败归因 |
| 关键遏制遗漏 | 0 | 0 | 强制否决 |
| 正确/有用行为 | 1,726/1,800=95.89% | 1,772/1,800=98.44% | 成对证据 |
后台对照按同一任务成对比较,不把不同日期的流量硬凑在一起。C2的66个升级少于C0的102个,专家必须检查其中是否存在漏升;必要升级召回达到预定门槛,28个重大错误进入新案例评审。抽样时尽量不让人工评审员看到版本标签,减少“新模型应该更好”的先入为主。
后台对照不能验证用户交互、界面可用性、队列竞争和真实操作延迟,也可能因为候选版本不写入业务系统而缺少反馈。因此,通过这一阶段只代表可以进入小流量灰度,不代表已经在生产中成功。候选工具调用仍限于读取,还要防止双路运行把第三方请求量、费用或调用速率推到危险水平。
污染控制同样重要:候选结果不能写回知识库、案例状态或用户历史,C0后续输入也不能引用C2草稿。若两条路径共享缓存,缓存键必须包含发布包编号,否则候选结果可能改变对照组。后台对照数据必须标明版本,并防止它回流到训练数据或封存验证集。
1,800例来自预定的最低7天观察期,或各关键切片达到样本门槛,两者以较晚者为准;不能因为前200例表现漂亮就提前结束。节假日、供应商集中事件和新产品若未覆盖,报告必须明确标为“未测量”,并相应限制灰度范围。
稳定分桶而不是每次请求随机:同一任务必须始终落在同一包
灰度发布先排除外部通知、库存写入、法律挂起、未支持语言,以及没有人工复核人的队列。其余任务使用带密钥的稳定哈希,按租户和任务编号分桶;同一任务的重试、续办和人工返回始终保持原分组,防止上下文与状态跨越C0和C2。
| 路由输入 | 使用 | 避免 |
|---|---|---|
| 分桶键 | 匿名租户 + 任务 | 把邮箱或个人身份信息直接交给开关服务商 |
| 资格 | 产品/语言/风险/评审员 | 模型自报风险决定自己流量 |
| 桶 | 确定性 0–9999 | 每请求随机 |
| 分配 | 发布包C0/C2 + 当前阶段 | 仅记录可变别名 |
| 决策日志 | 标记/版本/原因/变体 | 只记“功能开启” |
稳定分桶还可以避免重度用户被过度抽样,并支持成对或按租户群组分析;但同一租户共享人员或知识仍可能让两组相互影响,报告必须说明群组效应和污染。若候选版本会更新共享状态,优先按租户或队列隔离,否则就继续停留在后台对照,不能假设每次请求彼此独立。
OpenFeature的评估上下文与分桶键提供了跨供应商的功能开关评估概念,官方文档也提醒使用定向数据时要妥善处理个人身份信息。本文只借用这种供应商中立的设计思路:开关服务返回结果、版本、原因或错误并写入追踪记录,评估失败时默认回到C0;敏感供应商信息不得放入第三方评估上下文。
内部测试员、员工覆盖、紧急排除与百分比规则的优先级必须固定并经过测试。手工把某个任务切到候选版本,必须记录原因和失效时间,不能用来删掉失败案例、美化结果。分桶函数或版本一旦变化,就可能导致任务重新分组,因此本身也要作为发布变更接受审计。
同一任务若持续数天,发布包编号必须写入持久状态;阶段比例变化不能迁移已经开始的任务。只有到达预先定义的安全检查点、数据结构兼容且经人工决定时才允许迁移,避免一半步骤由C0执行、另一半由C2执行。
灰度计划同时规定流量、最短时间、最小样本、覆盖和扩大权限
C2b计划为后台对照→5%→20%→50%→100%。每个阶段都要同时满足最短观察时间、最小样本量和关键切片覆盖,才允许退出;流量百分比只针对符合条件的任务,不能拿全站流量作分母掩盖实际暴露。扩大阶段必须由发布控制器读取门槛,并由指定负责人确认质量信号。
| 阶段 | 合格分配 | 最小观测 | 启动条件 |
|---|---|---|---|
| 后台对照 | C2重复运行100%,C0对外服务 | 1,800,且至少7天 | 离线门槛 + 后台对照门槛 |
| 灰度1 | 5% C2 / 95% C0 | 至少60个C2任务,且至少1个工作日 | 关键错误0 + 操作健康 |
| 灰度2 | 20% / 80% | 至少240个C2任务,且至少2天 | 切片覆盖 + 人工评审 |
| 灰度3 | 50% / 50% | 至少600个C2任务,且至少2天 | 质量、延迟与成本 |
| 完整 | 100% C2, C0 预热 | 1,800 完整审计后 | 回滚目标保留 |
夜间低流量达到48小时但没有高风险物料,不算覆盖;反之一天积累样本也需经历至少一个交接/峰值周期。周末业务不同则单列。阶段计时器从最后一次包/配置变化重置,避免修参数后沿用旧观察时间。
自动扩大只适用于结构化、低风险且信号稳定的阶段;本案例每次扩大都由质量负责人和站点可靠性负责人共同确认。严重错误、越权或数据泄漏会自动停止并通知;质量差异不明确时,先暂停在当前比例或回到C0,再由专家判断。自动化不能剥夺人的停止权。
灰度暴露预算按最坏情况设置:5%阶段最多60个C2任务,即使全部出错,也有人在外部动作发生前复核。随着阶段扩大,证据和恢复能力都应更强。不可逆、高后果的决策可能永远只允许后台对照或人工批准,不会因为灰度发布成熟就自动获得全自动权限。
每个阶段都生成决策记录:发布包与阶段、合格分母、候选组与对照组计数、指标与切片、事件、评审覆盖率、决策、批准人和下一门槛。聊天里的“看起来稳定,开到50%”不算发布记录。
异步和跨天任务按“开始时的发布包 + 最终结果”归属,不能用当天请求量判断观察是否充分
质量投诉可能上午创建、下午补照片、第二天由工程师确认、14天后重新开启。阶段流量升到20%时,5%阶段仍有未完成任务;若按当天完成量归组,耗时长/失败任务会从候选项分母消失。分配在任务开始时固定包,所有结果沿task_id回填原群组,阶段关闭后仍等待规定滞后窗口。
| 时钟/窗口 | 开始 | 终端/使用 |
|---|---|---|
| 服务延迟 | 模型/工具请求 | 秒, 即时门 |
| 草稿质量 | 评审员接收产物 | 分钟/小时, 阶段门 |
| 路由正确性 | 专家确认 | ≤3 天, 临时→最终 |
| 遏制 | 风险已识别→已验证操作 | ≤48小时, 安全门 |
| 重新开启/迟漏 | 案例已关闭→重新开启 | 14–30 天, 发布后 |
每个阶段都有分配截止时间、活跃队列、终态计数,以及被截断或仍待处理的数量。5%阶段的60个候选任务中若只有45个到达终态,质量率只能暂写为“x/45,另有15个待处理”,不能把45当作全部分母。扩大条件要求足够的终态样本和关键切片覆盖,而不只是“已经分配60个”。超时任务按预定规则标为“延迟”或“未知”,并触发复核,不能直接排除。
阶段比例变化只影响新任务。在途C2仍会在仪表盘产生结果,因此回滚后看到候选事件不等于路由失败。清单要区分“停止前已分配”“停止后才启动”和“停止后非法新分配”;真正异常的是停止生效后仍出现新的候选分配,而不是旧任务正常收尾。
长任务的指标窗口不得短于业务步骤本身。15分钟的95分位适合观察接口延迟,却不适合判断需要三天才能确认的路由正确性;用短窗口逼出业务结论,只会奖励容易完成的简单案例。放行决策要把即时技术门槛、阶段质量门槛和到期业务复核分别列出,状态可以是“技术通过、质量待定”,不能合并成一个绿色标记。
跨阶段共享专家队列会污染同期对照:候选版本升级减少,可能让对照组更快得到处理。团队要记录队列等待、复核人员和工作负载,并按任务分组比较实际投入;必要时隔离队列或采用分时切换。无法隔离时必须报告干扰,不能把周转时间差直接解释成模型带来的因果效果。
放行门槛必须同时看绝对值与同期对照:两边一起变坏时,相对比较会骗人
灰度组与对照组共享企业资源系统、文字识别服务和处理队列,依赖故障可能让两边同时变差。Google的站点可靠性工程实践提醒,共享依赖会导致隔离不完整,因此需要同时使用绝对服务目标。团队据此先看严重错误、安全和绝对服务门槛,再看候选组与对照组的差异和业务趋势。
| 信号 | 绝对门 | 相对门 | 窗口 |
|---|---|---|---|
| 关键隔离 | C2=0 | 不低于 C0 | 即时/累积 |
| 重大返工 | C2不超过3% | 比C0至少低1个百分点 | 每日 + 累积 |
| 必要升级召回 | 至少98% | 不得恶化超过1个百分点 | 专家已评审样本 |
| 供应商或应用错误 | 不超过2% | C2比C0高不超过1个百分点 | 连续两个15分钟窗口 |
| 95分位延迟 | 不超过10秒 | C2比C0高不超过2秒 | 连续两个15分钟窗口 |
| 成本/任务 | ≤1.40 CNY | ≤C0×1.30 | 每日 |
| 人工修正 | 无恶化 | 中位数提升 | ≥100 已评审 |
严重使用事件级即时否决,不等统计显著;错误/延迟需要连续两个窗口防短暂噪声,但严重泄漏/越权一次即回滚。小样本率同时报计数,1/20不能只显示5%;阶段末看切片,不用整体淹没某供应商/附件类型。
比较相对差异时,两组必须使用相同的资格规则和时间窗口。功能开关的分配日志要连接到每个任务,排除已存在任务或不合格任务时遵守事先登记的规则;对照组不能拿上个月的历史基线替代。报告还要保留分配失败、组间交叉和人工覆盖,不能悄悄只分析成功完成者。
重复查看数据会增加误判机会;团队要预先写好观察窗口、放行门槛和决策规则,不能在每次波动后更换指标。置信区间或序贯分析可以辅助判断普通质量差异,但不能取代风险否决、样本代表性和专业判断,更不能把统计显著性当作安全证明。
早期信号包括规则失败、状态未知、来源缺失、降级运行和人工大幅编辑;滞后结果包括投诉是否关闭、遏制是否及时和是否返工。阶段早期先由前者决定是否继续,业务结果到期后再确认;没有滞后数据只能标为待处理,不能默认通过。
一次47分钟回滚实例:质量没有恶化,但错误并发把95分位延迟推到13.8秒
C2a在5%阶段的60个候选任务表现正常。升到20%后,运行时并发从24误设为80;前47分钟共有240个合格任务,其中48个分到C2。供应商返回了7次限流错误,占48个候选任务的14.58%;9个任务进入降级路径,95分位延迟从C0的6.2秒升到13.8秒,连续两个15分钟窗口同时突破10秒绝对门槛和比C0高2秒的相对门槛。
| 时间 | 证据 | 控制器/操作 |
|---|---|---|
| 10:00 | 阶段 20%, C2a=80 并发 | 开始, 计时器重置 |
| 10:15 | 95分位12.9秒,限流错误5/31 | 首次突破,不扩大 |
| 10:30 | 95分位13.8秒,限流错误累计7/48 | 二次突破,自动暂停 |
| 10:32 | 分配标记→C0 | 新任务路由至 C0 |
| 10:39 | 9 降级产物已评审 | 无关键/重复影响 |
| 10:47 | C0的95分位恢复到6.3秒,队列恢复中 | 回滚已验证 |
| 11:03 | 所有进行中终端/已对账 | 事件范围已关闭 |
这里的“47分钟”是从20%阶段开始,到C0恢复绝对服务门槛所用的时间,不代表根因修复已经完成。站点可靠性工程师保留C2a的产物和分配记录,不删除失败证据;候选版本虽然没有观察到严重质量错误,但可靠性门槛已经足以否决发布。即使模型输出更好,等待过久和降级重试也会造成重复操作与人工绕过。
团队把C0和C2的共享依赖、发布包运行参数差异与供应商回执放在一起核对,最终把根因定位到并发配置。并发修回24后形成C2b,先经过负载测试和600例后台对照,再从5%重新开始,不能回到20%延续旧计时。所有门槛的观察窗口都要清零,决策记录则链接C2a事件,保留完整因果链。
48个候选任务中的7次限流错误和9次降级尝试,不能相加成16个独立失败:7次限流调用可能经过重试或超时,最终导致9个任务尝试降级,两项指标的统计单位不同。每个任务的最终状态要单列,避免重复计数放大或缩小影响。
如果C0同时延迟13秒,两组的相对差异可能很小,但绝对门槛仍会暂停扩大并处置共享事故;是否回滚候选版本,要看它是否造成资源竞争。灰度版本不是默认的罪魁祸首,也不能因为两边都坏就继续发布。
回滚不是把功能开关拨回0:新请求、在途任务、候选产物和外部影响需要分别处理
控制器先把新的合格任务指向C0,并验证功能开关的实际评估结果;尚未开始的C2作业取消后重新排到C0;已经开始的短调用可以完成,但产物要标为“停止后完成的候选结果”并强制复核;长任务默认固定在C2直到安全检查点或人工接管,不能中途换版本;已经发生的写入则逐项核对回执。
| 停止时的对象 | 回滚操作 | 证明 |
|---|---|---|
| 新请求 | 路由C0 | 开关详情 + 发布包解析结果 |
| 排队中的 C2 作业 | 取消/重新排队并新运行 | 无双重执行 |
| 进行中生成 | 完成/隔离或取消 | 终端 + 产物变体 |
| 待人工评审 | 标记候选, 可选重新生成 | 评审员决策/差异 |
| 已批准操作意图 | 冻结/重新验证策略 | 批准/产物绑定 |
| 已完成工具影响 | 不能声称“模型回滚即可撤销” | 回执 + 对账或补偿 |
AI回滚不能撤回已经发出的邮件、改过的库存,或已经作出的人事与交易决定。本案例中的候选版本不能直接写入业务系统;若未来扩大权限,操作意图必须绑定发布包、产物和批准记录。回滚时先冻结尚未执行的意图,已经执行的则进入业务补偿或事件流程。删除候选输出,不等于现实世界已经恢复。
C0必须可用且容量足够:旧模型端点、提示词/策略/索引、容器/配置与凭证在观察期保持预热;定期回滚演练验证。若供应商撤下旧快照,预先准备已批准的降级包,而不是故障时临时选择。
新旧数据结构必须双向兼容:C2新增字段不能让C0解析器崩溃;数据库迁移采用先扩展、后收缩的方式,并保留旧读取路径。Kubernetes Deployment可以提供受控发布、修订版和基础设施回滚,但只覆盖其管理的工作负载模板;远端模型、功能开关、数据和业务影响仍要由应用层处理。
回滚完成必须同时满足:新流量100%进入C0、C2队列中的每项都能解释、所有进行中任务到达终态、候选产物已有处置、工具影响完成对账、C0恢复服务目标、事件记录与用户影响范围已经建立。只看到旧版容器实例启动,远远不算完成。
修复后用900个候选任务与2,700个同期对照做生产比较,分母必须对应真实暴露
C2b重新启动后,三个阶段共覆盖3,600个合格任务:5%阶段有60个候选任务和1,140个对照任务,20%阶段为240比960,50%阶段为600比600;合计候选任务900个、对照任务2,700个。稳定分桶、相同时间窗口和相同人工策略共同保证两组仍可比较。
| 生产信号 | C2b候选组 | C0同期对照组 | 决策 |
|---|---|---|---|
| 正确/有用终端 | 878/900=97.56% | 2,580/2,700=95.56% | 目标已达成 |
| 重大返工 | 22/900=2.44% | 120/2,700=4.44% | 低于 3% |
| 关键隔离 | 0/900 | 0/2,700 | 未观测到关键 |
| 中位数人工修正时间 | 2.1分钟 | 3.4分钟 | 观测到的提升 |
| 95分位延迟 | 8.4秒 | 6.1秒 | 绝对值通过,但相对高2.3秒,失败 |
| 成本/任务 | 1.34 CNY | 1.02 CNY | +31.37%, 相对失败 |
这张表没有被强行做成“全部通过”:质量和重大返工确有改善,延迟绝对值不超过10秒,却比对照组高2.3秒,突破了2秒相对门槛;成本1.34/1.02=1.3137,增加31.37%,也略高于30%门槛。团队在50%保持两天,不升到100%,先由负责人决定继续优化,还是明确接受新的成本与延迟权衡;不能只挑正确率宣布成功。
团队后来压缩了上下文,但没有改变业务字段,并将改动独立形成C2c。这个版本仍必须运行受影响的回归与新旧版本桥接,并至少重新经过5%和20%观察,不能藏在C2b标签下现场修改。若业务负责人接受成本超限,也必须形成新的风险决定,写明理由、预算和失效时间,而不是移动仪表盘阈值掩盖失败。
成本分母按分配的任务计算,不能只统计成功返回的模型调用。C2遇到限流后,既要支付候选调用,也可能支付重试或C0降级调用,失败任务同样产生费用;后台对照同时运行C0和C2,其双路成本属于验证预算,不是稳定运行时的单任务价格。报告要拆出模型、检索与工具、观测、人工复核和事件处置费用,并把缓存命中、免费额度和迟到账单按同一价格版本对账。否则1.34元很可能漏掉最昂贵的失败路径。
候选组的878和对照组的2,580都使用同一套终态定义;人工评审覆盖率和未知结果分别报告。让用户自行选择是否使用候选版本会引入偏差,因此本案采用稳定分配;即便如此,仍存在租户间影响和时间变化,所以结论只是“在这个范围下具备发布证据”,不是“模型普遍更优”。
样本数量不是目标本身。若900个候选项没有高风险附件切片,仍不能放行;若严重出现1个,即使置信区间宽也立即停止。切片与绝对风险优先于整体。
这900个候选任务并非全靠自动评分当天定论。所有确定性关键信号、全部升级和重大错误、人工覆盖,以及按物料和供应商分层抽取的15%普通通过案例,都由质量工程师复核;其余结果先记为临时,待业务终态到期后再冻结。评审覆盖率要按候选组和对照组分别展示;如果候选组审得更多,报告就不能把较低错误率直接归因于模型。
分配后未运行、运行后无产物、产物未送达复核人、复核尚未结束和业务结果未到期是五种不同缺失。每类都有计数和原因;供应商错误造成的无输出仍属于候选暴露,不能从质量分母删掉,只能按终端策略记失败/降级/无效。真正测试框架无效由独立负责人确认、C0/C2同时重跑。
人工分歧进入正式裁决。例如C2升级一个“疑似跨批次”案例,工程师A认为必要、工程师B认为过度时,不能挑较宽松的标签来判定候选版本成功;应先查案例来源、风险策略和交接是否可执行,再形成标准答案修订。争议未解决前保持当前阶段,不能用发布时间催促裁决。
不同变体的错误暴露也记录影响:候选项草稿是否被用户看见、是否被编辑、是否触发后续查询。即使最终由人修正,主要草稿仍算系统故障和人工成本;反过来,正确候选项被旧UI裁剪属于完整发布失败,不从模型分数中剔除。发布面对的是用户实际得到的系统行为。
业务结果有延迟,也受人工与流程影响:全量后仍需保留抽查和回滚窗口
模型分流正确不等于投诉真正更快关闭。业务层跟踪遏制耗时、首次路由正确、工程师活跃分钟数、供应商往返、重新开启与漏遏制未遂事件;结果按原分配归因,即使后来回滚,防止只统计幸存候选项。
| 结果 | 可用性 | 使用 |
|---|---|---|
| 审核员接受、编辑或升级 | 分钟/小时 | 灰度阶段的主要质量信号 |
| 遏制措施已验证 | 24–48小时 | 安全/运营放行门槛 |
| 投诉正确路由 | 3 天 | 工作流有效性 |
| 重新开启/延迟发现 | 14–30 天 | 回归反馈 |
| 供应商缺陷减少 | 数月,且混杂因素多 | 战略结果,不作为单次放行门槛 |
进入100%阶段后,仍可保留例如5%的后台对照,或定期抽取C0配对样本,但必须考虑用户公平、旧版风险和运行成本,不能机械地永久维持两组试验。若已知C0明显较差,高风险范围可改用离线对照、短时回切或专家标准答案,具体设计由业务与伦理要求共同决定。
全面发布后前1,800个任务继续100%风险抽样的严重、全部主要/覆盖和分层10% 通过审计。若后到业务结果恶化,允许回滚或缩范围;“已全量”不是不可逆组织承诺。
人类适应会改变结果。复核人知道新模型后可能少检查,培训/界面变化与候选项同时发生会污染比较;放行尽量一次一个变量,记录复核时长、覆盖与曝光。发现自动化偏见时可增加盲化抽查、证据展示或降低范围。
用户需要知道当前是受控发布。界面显示内部试用标签、证据与“最终决定仍由质量人员负责”,但不显示会诱导评价的模型品牌;反馈入口绑定任务/包/产物。被回滚的候选项产物继续明确标记,不能让用户误以为它已由C0重新生成。若某类建议不再可信,主动通知仍在处理该产物的复核人。
培训与支持也按阶段扩展。5%只覆盖值班质量组并给出失败上报方式;20%前确认第二班次和地区支持;50%前验证专家队列与事件轮值。如果使用者不知道怎样识别状态未知、证据缺失或遏制信号,即使技术指标通过也不能扩大。反馈入口不能只是一个自由文本邮箱,而要提供“错误路由”“证据缺失”“不安全的高置信表达”“延迟”等可关联到任务和发布包的原因。
回滚后的沟通区分“停止新分配”和“已有结果是否撤回”。若只是延迟,告知等待/已自动切回;若质量风险,冻结相关候选产物并列出复核范围;若外部影响,进入正式事件通知。为了避免恐慌而说“系统维护”会破坏后续审计,也让使用者继续依赖候选结果。
业务关键绩效指标不允许抵消严重。平均关闭时间缩短但出现漏遏制,仍停止;反之正确升级增加导致队列超容量,也不能只报安全率,需人力/路由重新设计。质量、风险、容量和价值是共同放行门槛。
功能开关只是路由控制,不等于发布治理;每次评估都要记录版本、原因和降级结果
每次任务创建时,功能开关评估都要返回开关键与版本、匿名分桶键、资格结果、版本与发布包、原因、错误或默认结果,以及时间戳,并写入运行清单。开关服务不可用时默认C0并告警;客户端显示的开关值不能作为服务器授权或工具策略的依据。
if not eligible(task): return C0(reason="不在灰度范围")
bucket = keyed_stable_hash(task.tenant + task.id, rollout_salt)
variant = C2 if bucket < allocation else C0
if flag_error or bundle_unresolved: variant = C0
persist assignment before starting run; never change for retries
| 开关控制 | 负责人 | 失败测试 |
|---|---|---|
| 合格规则 | 产品/风险 | 排除的关键项从未 C2 |
| 百分比/阶段 | 发布控制器 | 精确桶边界 |
| 包解析 | 平台 | 别名不匹配导致 C0 失败 |
| 紧急终止 | 事件指挥官 | 2分钟内传播生效 |
| 覆盖 | 命名操作员及过期时间 | 无静默永久覆盖 |
| 审计 | 独立日志 | 分配可重构 |
紧急停止开关每月演练,覆盖服务商中断、软件工具包缓存过时和部分区域故障;控制台显示0%后,还要抽查生产清单,确认任务真的进入C0。若开关传播的服务目标是2分钟,风险预算就必须计入这2分钟可能产生的额外暴露。
分桶键不得包含明文邮箱或供应商名称;评估上下文保持最小化,并确认服务商是否会持久保存这些数据。百分比精度、哈希算法和上下文合并方式在软件工具包升级时都要做兼容测试,避免同一任务被重新分桶。
路由还要每日反向核对:先从业务任务总表抽样,确认资格判定、分桶结果、实际发布包和页面标记一致;再从候选执行记录反查每个任务是否确属当期名单。只检查开关服务自身日志,会漏掉应用绕过统一工具包、缓存旧值,或后台批处理没有接入统一路由等问题。发现一例非法交叉就暂停扩大,先确定受影响的分母;核对结论写入发布台账。
功能开关也要设清理期限:C2成为新的稳定版本后,旧开关、人工覆盖、兼容代码和热降级路径要按回滚窗口清理,同时保留发布证据。永久开关会让系统状态组合迅速膨胀;但清理前必须确认旧发布包不再有进行中任务,也不再承担回滚职责。
回滚还是向前修复,要按影响、恢复时间和可逆性选择,不能等事故发生再争论
已知良好C0可立即恢复且候选项影响在扩大时,优先回滚;若C0本身有同一严重漏洞或旧供应商不可用,可能向前推进到预先验证热修复/降级。不可逆业务影响先遏制/对账,再决定软件版本。决策树在上线前批准。
| 条件 | 默认 | 例外 |
|---|---|---|
| 关键候选项仅限 | 立即回滚 | 无安全授权则无 |
| 延迟/错误候选项仅限 | 暂停→回滚 | 快速配置向前推进且仅预测试 |
| 共享依赖故障 | 暂停所有发布, 事件 | 路由替代依赖 |
| C0不安全或不可用 | 已批准的降级包Cfb | 受控的紧急修复 |
| 已完成的外部影响 | 遏制/对账/补偿 | 无法通过回滚擦除 |
| 测量不确定 | 冻结暴露 | 辩论期间不要扩展 |
回滚的风险也计入:切回C0会增加重大返工,队列容量是否足够;缓存/模式是否兼容;旧模型是否仍满足当前策略。已知良好有过期和持续回归,不等于永远安全。
向前推进不得在生产边改边试。热修复包有最小回归、负责人、范围与回滚目标;若时间不足满足底线,就缩功能、只读或人工接管。业务截止日期不是跳过关键放行门槛的理由。
事件指挥官拥有停止权,发布负责人决定恢复,领域负责人决定风险可接受,站点可靠性工程师验证技术恢复;角色可由同一人兼任但责任记录分开。供应商公告不是恢复证据,本地指标与业务对账才是。
每次回滚做事后复盘:哪个放行门槛发现、从首次信号到停止/恢复多久、暴露多少任务、在途/副作用是否完整、为何预生产未捕获、需新增什么案例/对照。回滚不是发布团队失败,而是控制按设计工作;隐藏回滚才会让系统变脆。
发布权限与门槛变更也要版本化:同一人不能提交候选、放宽门槛并批准全量
放行策略把构建、评估、风险接受、运营与业务批准分开。小团队可由同一人兼任部分角色,但候选项提交者不能单独改严重定义或在失败后批准例外;高风险放行至少有独立领域/风险签署。所有决策绑定包和证据快照。
| 决策/行动 | 授权角色 | 所需证据 |
|---|---|---|
| 注册候选项 | 模型/发布工程师 | 清单及变更复核 |
| 认证评估有效性 | 评估负责人 | 运行有效性及套件报告 |
| 关键范围批准 | 领域/风险负责人 | 0 关键及限制 |
| 扩大阶段 | 业务负责人 + 站点可靠性负责人 | 放行门槛快照及容量 |
| 紧急停止 | 值班/事件指挥官 | 信号/案例; 无预批准延迟 |
| 调整放行门槛/接受残留 | 命名风险授权 | 理由/范围/过期 |
| 关闭发布 | 发布负责人 | 完整审计及待解决问题 |
门槛调整必须在看到结果前完成;若看到C2b成本+31.37%后把30%改32%,这是残留风险决策而非“原放行门槛通过”。记录旧/新值、原因、预算、影响、批准人和过期,并让下一包重新评估。严重=0这类底线不由普通业务负责人放宽。
发布冻结用于数据不可信、事件、关键负责人缺席或多项并发变化。冻结时保持当前安全分配,不自动扩大;紧急安全修复可走单独热修复策略,但仍有最小套件、回退和记录。发布日期、供应商合同到期或已投入成本不构成跳过证据的理由。
仪表盘需要双人复核,但不能变成“人人都签,所以没人负责”。评估负责人只确认测量有效,站点可靠性工程师只确认可靠性,领域负责人确认严重行为,业务负责人确认价值与范围;最终由发布负责人确认这些责任均已满足。某一栏标为“未测量”时,不能用其他绿色栏代替。
功能开关控制台、模型网关、评估结果和放行账本的写权限要分离,并定期复核。紧急访问必须自动通知、短期有效并接受事后复核。否则操作者既能给自己分配流量、隐藏失败又能修改门槛,所有灰度数字都会失去治理意义。
持续回归把生产新失败送回套件,但不能训练后再用同一批灰度数据验证
上线后按日运行规则和冒烟测试,按周运行1,200例套件;发布包、模型或服务商发生变化时运行完整回归。团队持续监控模型路由、来源、提示词、工具、策略、延迟、成本和结果漂移。即使本方没有部署,服务商后台发生变化也要生成“检测到变化”事件,并重新触发灰度和回归。
| 触发 | 必要响应 | 发布状态 |
|---|---|---|
| 模型/提供商快照变更 | 指纹及全面回归 | 冻结扩展 |
| 提示/策略/工具变更 | 新包及受影响的套件 | 候选项 |
| 关键生产事件 | 案例及遏制所有相似范围 | 回滚/停止 |
| 切片漂移或未知状态上升 | 样本、来源与根因分析 | 保持或缩小范围 |
| 成本/延迟漂移 | 路由/容量复核 | 护栏决策 |
| 审核员行为变更 | 审计/用户界面/培训 | 产品变更包 |
生产案例经去标识、权限裁决后进入未来回归;若用来调C2c,不再作为独立留置证明C2c,另保留未见案例或时间切分。事件案例永远保留为强制回归,即使已修复。
监控告警必须带上发布包、版本、合格分母和同期对照,避免把流量构成变化误判为模型漂移。整体指标稳定但多批次切片下降时,仍要触发切片告警;使用量低时,“0个事件”不能证明安全,仪表盘必须同时显示实际暴露量与评审覆盖率。
定期重评C0 降级。若新策略/来源/模式使C0无法安全运行,构建新已知良好的降级并演练后再淘汰;发布历史保留。Kubernetes 修订历史或容器镜像仅是其中一层。
失败候选版本退役后,其凭证、路由、功能开关和存储产物要按策略处置,同时保留必要的发布与事件证据。不能因为它不再上线,就让远端端点、接口密钥和隐藏覆盖长期存在。
交付模型发布包:发布前先证明会停、会退、会处理在途任务,而不只是证明候选版本能运行
| 产物 | 最低内容 | 接受 |
|---|---|---|
| 发布清单 | 完整发布包、哈希、变更、假设和负责人 | 可复现的版本组合 |
| 回归报告 | C0/候选项配对、切片、试验、否决 | 关键 0 |
| 后台对照报告 | 相同输入的结果、成本与覆盖率 | 无业务副作用 |
| 路由规范 | 资格/键/桶/变体/降级 | 稳定分配 |
| 灰度计划 | 阶段、时间、数量、覆盖率、门槛和批准人 | 事先登记 |
| 决策仪表盘 | 绝对及相对质量/风险/运营/成本 | 分母可见 |
| 回滚矩阵 | 新建/排队/进行中/产物/影响 | 演练通过 |
| 放行账本 | 阶段决策/事件/覆盖 | 完整审计 |
| 发布后计划 | 结果/回归/漂移/退役 | 命名轮班表 |
来源边界:Google站点可靠性工程工作簿的灰度发布章节用于部分流量、限时验证、候选组与对照组、逐步扩大、共享依赖与隔离限制,以及绝对指标;Kubernetes Deployment官方文档用于滚动更新、暂停、恢复、修订版与基础设施回滚,并不覆盖完整的AI发布包;OpenFeature官方文档用于评估上下文、分桶键、确定性分阶段发布,以及个人身份信息注意事项;NIST AI风险管理框架用于生产监测、第三方模型监测、事件、恢复、变更管理和持续改进。这些来源都不提供本案例中的1,200、1,800和3,600个任务,也不提供本文门槛、金额、延迟或结果。来源核验于2026-07-21。
- Google SRE Workbook:Canarying Releases
- Kubernetes Documentation:Deployments
- OpenFeature:Evaluation Context
- NIST AI RMF Core
今天选一个准备升级的内部AI任务,先把当前已知良好版本拆成模型、提示词、上下文、工具、策略、解析器、运行时和功能开关八类版本;从最近的真实失败中建立20个回归案例,再写出一个不能被整体分数抵消的关键否决项。随后用稳定任务键做5%后台对照与小流量灰度,预先写明两个停止信号,以及每种在途状态的处置动作。真正的发布演练不是让新模型回答一次,而是主动触发一次模拟延迟:值班人员必须在两分钟内停止新分配,说明所有在途任务和外部影响,并验证C0恢复。做不到这一步,团队就还没有安全升级模型的能力。