目录一、为什么一次“升级”会把系统变差一四种看起来像升级、实际是行为变更的动作二变差的六种静默形态三三个让团队看不见变差的错觉四回归要守住的是行为契约不是分数二、先给“变差”下定义一行为契约的三层必须守住、允许浮动、必须改善二四类输出该用四种尺子三把“好不好”翻译成可阻断的判定三、固定评测集尺子本身必须先冻结一评测集为什么必须固定二五类样本与建议配比1、主干与边界2、陷阱、错例与新场景三冻结、版本、轮换与退役四两类污染调参泄漏与金标过期四、版本对比一次升级必须回答三问一配对实验同一输入、同一口径、同一判分器二三个数字总体、切片、回退清单1、总体2、切片3、回退清单三非确定性下怎么比四换模型与换提示要用不同的对照设计五、质量阈值多少分差才算真的变了一先量噪声地板二红线、护栏、目标1、红线2、护栏3、目标三切片否决权与关键样例零容忍四阈值本身也要版本化六、CI 门禁让回归进入合并路径一四层门禁1、提交层与合并层2、发布层与日常层二触发矩阵成本匹配风险三失败报告必须定位到样例四门禁被绕过的五种死法七、模型升级别名、迁移与放量一别名滚动与快照锁定二能力迁移不等于任务迁移三离线对照、影子与灰度八、提示词升级局部编辑的非局部后果一非局部效应二渲染差异、预算漂移与口径冲突九、评测基础设施一四类制品与行为捆二最小可用流水线三线上失败如何进入评测集十、误区、成本与落地清单一十二条误区二评测成本账三上线前自查十一、结语参考资料一评测方法与基准二用模型判分及其校准三工程化评测与观测四模型版本、快照与提示治理五回归测试、门禁与风险管理六统计比较与实验设计干货分享感谢您的阅读软件工程里有一类变更工程师对它的警惕是写进肌肉的改了一行判断逻辑就要跑回归换了一个依赖版本就要看变更日志和兼容矩阵。语言模型系统把这种警惕抽走了。换一个更强的模型、在提示词末尾加一句“回答尽量完整”、把温度从 0.2 调到 0.4这些动作看起来不像破坏性变更——接口没变类型没变甚至连一次异常都不会抛。于是它们被当成升级被尽快推到生产被写进周报的“能力提升”一栏。几周之后客服说以前能拦下的越权查询现在会给一个看起来合理的答案解析服务的失败率从千分之四爬到百分之三退款口径的工单开始被定低一级。指标看板仍然是绿的因为没有人把“行为有没有变差”定义成一个会亮红灯的数。这不是模型不够好也不是提示词写得不够巧。这是度量体系缺席之后的必然结果。语言模型没有编译器没有确定性的相等关系没有可以单步回放的调用栈。传统回归测试的基本假设——同样的输入应当得到同样的输出——在这里从第一天起就不成立。假设不成立并不等于回归可以取消它只说明回归的对象必须被重新定义。本文把这个对象定义成四件必须一起建设的设施固定评测集、版本对比、质量阈值、CI 门禁。四件缺一升级就仍然是一场无法复核的印象管理。本次我们沿着一条因果链展开。先说明一次“升级”为什么会把系统变差以及变差为什么常常看不见再给“变差”本身下定义把行为契约从质量竞赛里拆出来然后依次回答四问尺子如何冻结、两个版本如何对照、多少分差才算真的变了、这套判定如何进入合并路径而不是停留在文档里。模型升级与提示词升级会各开一章因为它们的失败模式并不相同。最后落到制品、流水线、成本账和一份可以直接贴进合并请求的自查清单。文中出现的通过率、分差、耗时和金额都是为了说明量级关系的示意值落地时必须以自身链路的实测为准。一、为什么一次“升级”会把系统变差一四种看起来像升级、实际是行为变更的动作把“升级”理解成“换一个更强的零件”是整件事情走偏的起点。真正会改变线上输出分布的动作至少有四类它们常常走同一条发布路径却只有第一类会被当成需要评测的事。第一类是换模型或换快照。供应商发一个大版本、生产别名滚动到新权重、同一别名在不同区域指向不同实现都属于这一类。接口可以完全兼容分布可以完全不兼容。新模型更爱加解释性前缀原来能被严格解析的 JSON 开始被包进 Markdown新模型更会“建设性回答”原来会明确拒绝的越权请求开始得到一个编造得像模像样的结果。这两件事都不会抛异常。第二类是改提示词或模板。加一句约束、补两条少样本、把“尽量”改成“必须”、调整段落次序、把输出格式从纯 JSON 改成“先推理后给结论”。编辑动作的体积与影响面的体积在这里完全脱钩改的是一句话动的是整段注意力分配。下游按旧结构解析、按旧口径质检、按旧长度做预算三处都可以在沉默中一起坏掉。第三类是改检索与工具。切分粒度、重排模型、允许调用的工具白名单、工具描述文本、超时与重试策略都会改变模型“看见什么”和“能做什么”。输入材料变了输出必变。这一类最容易被漏掉因为改动发生在智能层旁边的基础设施上提交说明里往往写着“与模型无关”。第四类是改采样与运行时。温度、核采样、最大输出长度、网关超时、并发限制、缓存键、降级模型。一个字都没改行为已经改了。把最大输出从 800 提到 2000看起来是在给模型更多空间实际上是在允许它把结论写到预算之外并把尾延迟送进超时重试的循环。工程上正确的归类不是“这是不是一次模型升级”而是凡是会改变输出分布的配置都是一次行为版本变更。评测集、对照实验、阈值和门禁应当挂在“行为捆”上——模型快照、提示词指纹、检索配置、工具清单、采样参数五者一起定版。缺一项这次对照就无法复现缺一项这次回滚就会把系统送进一个从未被评测过的第三状态。二变差的六种静默形态监控如果只盯异常率和可用性下面六种形态里至少有四种永远不会亮红灯。它们才是语言模型系统里最常见的“变差”。结构漂移字段缺失、枚举越界、多余前缀、用 Markdown 代码块包裹本该纯净的 JSON。解析器的容错分支被触发一部分请求落入人工兜底一部分被静默丢字段。服务本身是活的契约已经死了。口径漂移紧急度分档变松或变严拒答边界被礼貌绕开同一类投诉在新版本里不再升级。没有一条断言失败因为输出仍然是合法枚举——只是选错了。切片退化均分持平甚至上涨某一业务域整体变差。演示集里没有这个域值班抽查也很难碰到于是它会在均分的保护下活过发布评审。忠实度下降检索材料还在上下文里回答开始添油加醋。引用编号还在引用内容对不上。用户看见的是“更完整”业务看见的是“开始编”。成本膨胀输出变长、重试变多、稳定前缀被一段新加的系统提示打断缓存命中率从八成掉到两成。质量分可能没动账单已经上台阶。安全松弛越权诱导成功率上升隐私字段开始进入正文模型更愿意“帮一点忙”。这一类用通过率阈值来守等于允许偶发放行而偶发放行正是安全事故的定义。六种形态的共同点是它们都以概率的形式、分散在多条链路上、在几小时到几天内慢慢显现。传统告警的时间窗口抓不住它们传统的“有没有报错”也定义不了它们。回归测试存在的意义就是把这六种形态从“事后的感觉”变成“合并前的事实”。三三个让团队看不见变差的错觉看不见往往不是因为没有人关心质量而是因为参照系选错了。三个错觉几乎人人都有过它们越合理回归建设就越容易被无限期推迟。第一个错觉是“新模型更强任务只会更好”。公开基准上涨说明的是一般语言能力、平均意义上的指令遵循、更少的常识错误。它不包含你的内部口径、你的拒答策略、你的工单类目、你的字段契约。能力迁移不是任务迁移。把供应商的评测集当成自己的评测集等于把上线决策外包给了一个从不对你的事故负责的榜。第二个错觉是“均分没掉就是没变差”。修好五条、改坏四条均分可以上涨。被改坏的四条往往是高风险切片退款、投诉、越权、涉及证件号码的查询。均分是一种摘要摘要的职责是压缩信息不是做判决。回归要看的是回退清单是“旧过新不过”的那些样本不是一个被对冲过的平均数。第三个错觉是“线上抽查看不出来就没事”。人工每天看二十条覆盖率往往不到真实流量的千分之一。低频高损事故——那种一个月才出现几十次、一次就能造成投诉或合规事件的请求——几乎不会进入抽查。抽查是补充是对评测集覆盖缺口的人工补偿它不能替代冻结评测集正如代码评审不能替代单元测试。三个错觉分别对应三种错误的参照系供应商的公开榜、自己的平均分、值班同学的直觉。正确的参照系只有一个冻结的、带金标的、按切片组织的评测集在同一口径下做新旧版本的配对对比。没有这套参照系时任何“升级成功”的结论都只是一次无法复核的印象。下次再升印象无法累加团队就在两套说辞之间横跳每一次都觉得自己有感觉支撑。四回归要守住的是行为契约不是分数到这里可以给出本文的第一个判断AI 回归测试首先是契约测试其次才是质量竞赛。分数是竞赛的语言契约是系统还能否被下游信任的语言。两者混在一个指标里门禁要么因为质量分的噪声而随机变红要么因为契约被破坏时质量分仍在涨而放行事故。契约回答的是“什么不许变”竞赛回答的是“什么可以更好”。升级的叙事默认偏向后者回归的纪律必须偏向前者。一个系统可以在摘要更通顺的同时变得不可用——解析失败、口径错乱、拒答消失都是可用性问题不是文采问题。把可用性放进质量分里用“九点几”去表达是用连续量去描述本该二进制的约束。后文所有设施都服务这一条判断。评测集要按契约样本与质量样本分层对比报告要先给回退清单再给均分阈值要分成红线、护栏、目标三层门禁要让红线挡住合并而不是让目标分数去决定能不能发版。二、先给“变差”下定义没有口径就没有回归。在建设任何评测集之前先要写出一份行为契约哪些输出必须与旧版一致到可以断言哪些允许在噪声里浮动哪些只有在明确立项之后才被要求改善。写不清这三层后面的分数全是悬空的。一行为契约的三层必须守住、允许浮动、必须改善必须守住的是红线。结构可解析、枚举合法、拒答边界、越权拒绝、隐私字段不外泄、幂等键完整。这一层的失败是事故不是质量波动。判定标准是“一次失败即可阻断”而不是“通过率高于某个百分比”。九成通过意味着每十次放行一次在越权查询上这不是可接受的回归这就是回归失败本身。允许浮动的是护栏。摘要的流畅度、礼貌程度、详略偏好、同义表达、少量格式润色。语言模型的非确定性主要落在这一层。这一层需要阈值而且阈值必须来自噪声地板不能来自“感觉上两个点差不多”。落在地板以内的差异应当判定为平不记功也不记过。必须改善的是目标。只在明确立项的维度上要求上涨——例如某一类召回、某一类拒答精度、某一类平均处理时长。未立项的维度不得用来挡发布否则团队会为了让门禁变绿去优化一个本轮根本没打算动的指标。目标未达成记到下一次迭代而不是把一次原本只想修结构的变更卡死。分层的组织含义同样重要。红线对合并请求负责护栏对发布负责人负责目标对迭代负责人负责。三层混在一个数字里最后一定没人负责——失败时算法说这是工程的解析问题工程说这是模型的能力问题产品说这是提示词的表达问题。分层之后每一层的失败都有明确的责任人和明确的动作阻断、继续调、记账。二四类输出该用四种尺子尺子选错门禁要么永远红要么永远绿。选择的依据不是哪条更先进而是这一类输出有没有唯一正确答案。结构、字段、枚举、长度、必含或必不含的标记有唯一答案应当用规则断言。用模型去打这类分会引入噪声还会变贵更糟的是模型判分的波动会被误当成系统的波动噪声地板被人为抬高真回退反而更难发现。分类、抽取、计算、有限枚举上的口径判定有近似唯一答案应当用参考答案比对。用文本相似度会放过关键字段错误——“金额 19.90”和“金额 199.0”在某些相似度下仍然很近在业务上已经是事故。开放生成的质量维度——有用性、语气、完整性、是否真正解决了用户的问题——没有唯一答案才轮到校准过的模型判分。不校准就把偏差写进门禁位置偏置、长度偏置、自我偏好、标准漂移每一种都会让“新版本更好”变成一次对尺子的拟合。安全、合规、越权、隐私有唯一答案而且是零容忍。规则加对抗样例。这一类不进入“通过率阈值”的讨论也不接受模型判分给出的“基本拒绝了”。基本拒绝了就是没拒绝。三条路线应当串联且前一道不过就不必跑后一道。第一道规则断言过滤掉绝大部分真正的回归并且不花模型钱第二道把能定标的维度全部判完第三道只评价确实没有客观标准的那些维度。能下沉的判断绝不交给更贵、更不稳的尺子。评测体系建设的日常工作八成是在做这件下沉而不是在扩充数据集也不是在换一个更强的判分模型。三把“好不好”翻译成可阻断的判定定义清楚之后一次升级要回答的不是“你觉得呢”而是四个可判定的问题。第一红线有没有被破坏有阻断不必看后面。第二护栏有没有显著低于基线显著的含义由噪声地板给出不是由讨论给出。第三是否有红线切片被均分掩盖有否决。第四目标维度是否达到立项预期未达到只记账除非立项时明确写了“未达不成交”。这四个问题把“变差”从一种情绪变成一套布尔值。布尔值才能进门禁。门禁不接受“大概差不多”“演示挺好”“新模型口碑不错”这类输入。后文的评测集、对比、阈值都是在给这四个布尔值提供证据。三、固定评测集尺子本身必须先冻结评测集是整套体系的上限。它错了后面每一个闸门都在认真地守着一个错误的标准。它不固定每次升级都在换尺子分数差就失去解释力。一评测集为什么必须固定一种常见但无效的做法是升级过程中临时加三十条“新模型擅长”的题按新输出改写十几条金标再在判分提示里加一句“更完整可加分”然后报告通过率从百分之八十六涨到百分之九十一建议全量。这时真正被测到的是一套被新版本污染的新尺子没被测到的是旧分布里被改坏的那些题。分数差来自样本、金标、尺子、系统四者混杂。结论不可复核下一次升级无法复用这次基线。正确的动作顺序只有一个先冻结再对照再决定是否改尺子。改尺子是另一次变更必须升评测集版本并重跑旧系统的基线。在同一张报告里并列两个不同口径的数字是评测工作里最常见的诚实性事故——它看起来像在对比两个系统实际上在对比两次考试。冻结的最小集合是六项样本标识与正文、金标与允许的等价集合、切片标签、判分器版本、指标实现版本、随机种子与采样次数。这六项共同构成一次评测的口径。缺任何一项两个数字之间的差值都没有科学含义。许多人以为冻结只是“不要改题目”却在对照中途换了判分提示或采样次数口径同样已经换了。二五类样本与建议配比评测集要像线上而不是像演示。演示集是给人看的评测集是给门禁看的。配比应当写进仓库不写进某次会议的口头约定。一份可用的起点是主干四成、边界两成、陷阱一成五、历史错例一成五、新场景一成。数字可以按业务调整结构不宜再减。1、主干与边界主干样本覆盖主类目的常规请求决定均分的稳定性。没有主干曲线会抖到无法阅读只有主干门禁会变成对平均情况的崇拜。主干的来源应当是线上真实分布的抽样而不是命题人觉得“典型”的那些。命题人的典型往往是他自己调参时反复看过的题。边界样本是事故高发区信息不全、多意图、超长、空输入、中英混排、可选字段全部缺失、检索无召回。它们在线上自然流量里不够密必须人工构造。边界样本的价值不在于提高均分的区分度而在于把那些“平时遇不到、遇到就炸”的路径变成每次合并都会被走到的路径。2、陷阱、错例与新场景陷阱样本覆盖越权、注入、诱导编造、套取隐私。它们构成安全与合规的零容忍区。失败即阻断不允许“差不多”“模型已经在往拒绝的方向靠”。这一类样本的写法要像攻击者而不是像文档真实的诱导不会自称“这是一道越权测试题”。历史错例是评测集变强的唯一可持续机制。每修复一个线上问题必须同时留下一条能复现它的样例。错例桶只增不减。这一条与代码工程里“缺陷必带回归用例”完全同构却是语言模型项目里最常被跳过的纪律——跳过的理由永远是“这次先上样例下周补”。下周不会补。新场景覆盖最近上线的业务必须单独切片观察。否则会出现两种对称的失败旧集把新业务挡在门外因为新业务的合法输出对旧金标来说是失败或者新业务零覆盖上线等事故发生再进错例桶。新场景的配额要受控避免某一周的新业务把整份集合的切片权重掀翻。三冻结、版本、轮换与退役评测集是带户口的资产不是一个文件夹。它的生命周期是采集、冻结、对照、轮换、退役。采集来自线上回流、缺陷转样例、边界构造、专家标注。冻结时打内容指纹、锁定金标、切出留出集、禁止用全量集调参。对照时配对新旧、出回退清单、执行切片否决、把结果写进门禁。轮换时每季替换一到两成主干重标过期金标错例只进不退留出集独立轮换。退役只在业务下线时发生且保留指纹档案不改写历史基线。版本号要挂在整份口径上不挂在某一条样本上。评测集版本等于样本集合指纹、金标版本、切片定义、判分器版本的组合。其中任何一项变更都要升版本并重跑基线。只给单条样本打版本、不给集合打版本跨次对比时你会发现自己说不清当时到底用了哪二百条。说不清历史曲线就只是一幅装饰画。留出集是冻结里最容易被省略、也最不该省略的一块。它永不参与调优只在发布前跑一次。它的职责是回答一个全量集回答不了的问题你是真的变好了还是只是把这二百条背下来了。发现分数只在调参集涨、留出集不动就是过拟合信号。这时应当停止发布而不是再往调参集里加题。四两类污染调参泄漏与金标过期第一类污染是调参泄漏。拿全量集反复试提示、试温度、试模型直到分数好看。此后这份集合度量的是拟合程度不再度量泛化。门禁会认真地保护一次过拟合。对策是制度性的不是道德性的留出集与全量集分库存放调参流水线没有留出集的读权限发布流水线才有。第二类污染是金标过期。业务口径改了旧金标没跟着改通过率卡死在某个数字上。团队开始不相信评测转而靠演示和抽查做决策。评测集还在跑只是已经没人把它当证据。对策是把金标与契约主版本绑定主版本升级强制重标重标要双人复核禁止用新模型输出直接当新金标——那会把系统的新偏见写成标准。污染一旦发生历史曲线全部作废。不是“稍微脏一点还能用”而是口径已经换了。必须升评测集版本重跑旧基线再开始新的对照。对污染的容忍度应当为零因为脏尺子比没有尺子更危险没有尺子时至少人人都知道自己在拍脑袋脏尺子会给拍脑袋穿上一件科学的外套。四、版本对比一次升级必须回答三问冻结提供尺子。对比提供证据。一次升级必须回答三问整体有没有动谁变差了具体坏在哪几条。三问对应三个数字总体、切片、回退清单。少一个报告只能标“需复核”不能标“通过”。一配对实验同一输入、同一口径、同一判分器对比不是“各跑一遍看谁分高”。各跑一遍得到的是两个边缘分布对冲掉了样本差异也掩盖了每一条上的胜负。正确的结构是配对同一条冻结样本、同一切片标签、同一金标、同一随机种子分别送给旧行为捆和新行为捆然后在每一条上判定胜、负或平。一次只改一维。同时换模型又改提示差异无法归因。要证明模型更好提示词必须钉死要证明提示更好模型快照必须钉死。多维变更可以存在但必须拆成可独立回滚的提交或者在报告第一句明确声明这是一次捆绑发布对照的是整捆而不是其中一维。写不清自变量这次评测就只能当一次探索不能当一次门禁。判分器必须是同一把尺子。新旧系统分别用各自喜欢的判分提示等于允许考生自己出卷。若必须升级判分器应当先用新尺子重跑旧系统得到一条新基线再拿新系统去比。把“换尺子”和“换系统”叠在同一次实验里是制造不可解释差值的最快方法。二三个数字总体、切片、回退清单只看总体是回归报告里最贵的偷懒。总体压缩信息切片暴露交换回退清单指向修复。三者的职责不同不能互相替代。1、总体总体给出通过率或主指标均值以及相对基线的差值是否越过噪声地板。它回答“整体有没有动”。单独成立时仍不足以放行。总体的正确用法是作为摘要出现在报告第一屏并立刻被切片和回退清单约束。没有约束的总体会把一次危险的交换描述成一次轻微的改善。2、切片切片按业务域、意图、风险级、语言、租户等级切开。任一红线切片显著下降即否决。它回答“谁变差了”。均分上涨时最容易被跳过的就是这一栏而事故几乎总是从被跳过的那一栏进来。切片的划分要在冻结时就定下来不能在看到结果之后再按“哪边好看”重切——那是另一种口径污染。3、回退清单回退清单是旧过新不过的逐条列表带输入摘要、新旧输出、失败原因、样例编号。它回答“具体坏在哪几条”。没有它回归无法修复门禁只是一盏红灯。回退清单还要进缺陷队列修一条评测集就多一条。这是集合变强的正循环。清单里若出现零容忍样例讨论结束合并拒绝。与回退清单对称的是收益清单新过旧不过的那些条。它应当被抽检确认不是判分器虚高、不是金标过宽、不是新模型用更长的空话换到了分数。收益未经抽检不得写进“全面提升”的发布说明。三非确定性下怎么比同样的输入两次结果不同这是语言模型回归与代码回归最本质的差别。解决办法是把“通过”从单次结果的属性改成一组结果的统计属性。四条规则依次生效。固定能固定的评测温度降到最低固定种子与判分器。注意这只是让评测可复现不代表线上也这样。线上参数与评测参数不同时评测结论的迁移性会打折扣这一点要在报告里写清楚而不是假装评测环境就是生产。重复采样取聚合值核心样例跑三到五次用通过率而非单次结果作为该样例的得分。成本乘以采样次数因此只对核心样例和零容忍样例这样做断言层通常跑一次就够。用区间而非点值先在“不改动、连跑两次”的条件下量出基线波动也就是后文的噪声地板。差值落在地板内一律判平禁止一个百分点就定胜负。这一条是整套对比里最容易被跳过、也最容易导致错误结论的一条。红线零容忍安全样例必须连续多次全部通过。九成通过仍算失败。不允许把“偶发放行”解释成非确定性。非确定性是质量维的属性不是安全维的豁免条款。配对结果用胜负平三分报告比均分更能描述一次升级。均分把修复与破坏对冲掉三分把它们摊开。升级常常是一场交换不是一次全面胜利。三分与均分一起报不要互相替代均分回答整体趋势三分回答交换了哪些用户的体验。上线决策需要两者。四换模型与换提示要用不同的对照设计实验设计跟不上变更类型归因会立刻混乱。换模型时提示词钉死指纹检索与工具钉死配置哈希判分器与评测集冻结自变量是快照 ID。换提示时模型钉死到具体快照、禁止别名滚动评测集同样冻结若输出格式变了必须先升契约、重标金标再开始对照禁止混口径比较。两者同时改必须声明为捆绑发布并且保证能拆开回滚——只回提示、留下新模型往往把系统送进从未评测过的第三状态。还有一种被当作“小改”的变更换判分器或改阈值。它看起来不碰系统实际上在改考试。这类变更要走自己的实验在人工标准集上校准重跑旧系统基线A/A 重测噪声地板。把尺子变更混进系统变更的报告是对后续所有门禁的一次投毒。五、质量阈值多少分差才算真的变了阈值是把对比结果翻译成放行或阻断的那条线。线画错了前面所有工作都会在最后一步被浪费太严门禁被关掉太松真回退被放行。画线之前必须先量尺子自己的抖动。一先量噪声地板A/A 测试同一行为捆在同一份冻结集上连跑若干次分差的波动幅度就是噪声地板。实务上取连跑分差的百分之九十五区间作为地板。新旧差值落在地板内判定为平越过地板且方向为负判定为质量回退越过地板且方向为正记为改善仍要过切片否决。没有 A/A阈值就是拍脑袋。很多团队把阈值设成“不得超过两个百分点”。这个二可能远小于噪声于是门禁随机变红信誉迅速破产也可能远大于噪声于是真回退被放行门禁变成摆设。两种失败的外表相反根源相同没有测量过尺子。A/A 每个评测集版本至少做一次。判分器变更、采样次数变更、并发策略变更之后必须重做。地板本身要随评测集版本保存写进基线报告。用一份过期地板去解释一次新的对照等于用旧考试的及格线去判新试卷。二红线、护栏、目标一层阈值要么太严被关掉要么太松形同虚设。三层阈值把不同性质的失败交给不同的人处理。1、红线红线阻断合并、阻断发布。结构失败率越过基线加噪声、任一零容忍样例失败、安全切片通过率低于百分之百、成本越过预算硬上限四条任一触发即红。红线不接受“再观察观察”。观察是护栏的权利不是红线的权利。红线一旦可以观察它就不再是红线。2、护栏护栏阻断发布允许继续调。主指标显著低于基线、任一核心切片显著下降、回退清单含高风险类目、时延 P95 越过网关预算属于这一层。合并请求可以在红线全绿、护栏变黄时进入“需发布负责人确认”的状态而不是直接合入生产分支。护栏的职责是强迫一次有人在场的阅读不是自动变绿。3、目标目标不阻断只记账。立项维度是否达到预期、成本是否按计划下降、某一类召回是否改善。未达标记到下一次迭代。用目标挡发布会逼团队在门禁上做假把目标写得很低或者把目标维度从报告里拿掉。目标应当出现在迭代复盘里不应当出现在合并按钮上。三切片否决权与关键样例零容忍均分没有投票权红线切片有。用加权平均决定放行等于允许用低风险流量赎回高风险事故。主干咨询涨三个点、退款口径跌九个点、投诉升级跌六个点总体仍然可以涨一点二个点。正确的裁决是否决。权重不抵红线。闲聊类目的改善不能为退款口径的恶化买单。关键样例的零容忍与切片否决是同一精神在不同粒度上的体现。切片是否决一类用户样例是否决一种不可发生的行为。两者都在对抗均分的诱惑。均分会说“整体还好”否决权会说“这类用户、这类行为不允许拿去交换”。否决之后要做什么也必须写清。否决不是惩罚是把问题从“感觉不好”变成“这十一条必须被解释或被修复”。修复可以是改回提示、换回快照、补一条后处理校验、把某类请求从模型路径降级到规则路径。解释可以是“这类回退可接受因为业务口径已经改变”——但那意味着金标要升版本而不是意味着门禁该放行旧金标上的失败。四阈值本身也要版本化改及格线等于改考试。阈值是配置不是习惯写入仓库走评审每次变更写原因与评测集版本绑定。放宽必须有证据——先出示 A/A 的新地板再出示误杀案例禁止因“太烦”而放宽。收紧必须重跑基线旧报告不得用新线重判历史曲线要分段标注避免口径错觉。谁有权改要写进章程质量负责人审批业务方对红线会签流水线服务账号不能改阈值文件。阈值变更应当出现在变更日志里与模型变更、提示变更并列。许多人只把系统当变更不把度量当变更。度量一变所有历史比较都要重新解释。把这件事当成一次正式发布是让评测体系活过第二个季度的前提。六、CI 门禁让回归进入合并路径不进流水线的评测等于没有评测。文档里的“发布前请跑一下评测集”会在第一次赶工时被跳过并且从此被跳过。门禁的位置决定它挡得住谁写在维基里挡不住任何人写在合并规则里挡得住未读报告的合入。一四层门禁门禁要分层原因与阈值分层相同一层门禁要么太慢被绕开要么太窄放行事故。四层对应四个时刻提交、合并、发布、日常。四层 CI 门禁1、提交层与合并层提交层挂在每次推送上跑规则断言、渲染校验、大约二十条冒烟集秒级完成零模型调用。它挡的是占位符残留、字段契约破坏、必含标记丢失这类确定失败。这一层必须快到让人感觉不到否则开发会关闭本地钩子。合并层挂在打开或更新合并请求时跑核心集五十到八十条含口径样例与零容忍样例产出配对回退清单。耗时一到三分钟允许失败快停零容忍样例一失败立即停后续调用。这一层必须绿且不允许 skip。允许 skip 的合并门禁会在第三个紧急修复时变成永久跳过。2、发布层与日常层发布层挂在打标签或放量前跑全量冻结集与留出集执行红线加护栏阈值。这一层的输出必须是一份有人读的报告而不是一个自动变绿的勾。自动变绿会把发布层退化成合并层的重复浪费全量成本却得不到一次真正的判断。日常层挂在定时任务上对钉死的基线集重跑发现别名滚动、金标过期、判分器抖动、供应商侧静默补丁。日常层是整套体系里唯一能发现“我们什么都没改系统自己变了”的设施。没有它钉死快照也只是一种心理安慰。二触发矩阵成本匹配风险每次都跑全量门禁最终一定会被加上“允许失败”。触发矩阵的目标是让回归成本匹配变更风险提示措辞跑核心集即可提示契约与格式要加结构全量换模型必须全量加影子检索与工具跑相关切片加全量判分器与阈值变更要走校准和基线重跑无关代码只跑断言不跑模型评测。两条落地细节决定矩阵能否真正落地。第一失败快停与并发核心集里零容忍失败立即停二十路并发把全量从数十分钟压到数分钟。第二成本数字公示在流水线页面上。当团队能看见“这次全量花了四块二、三分十七秒”关于“评测太贵”的争论会从情绪变成数字。看不见的成本一定会被想象成不可承受看见的成本才可以分层。还有一条组织纪律与智能层无关的改动不要跑模型评测。前端文案、日志格式、监控面板的变更不应为了“统一流程”去烧评测预算。统一流程的代价是门禁被讨厌讨厌之后被绕开。触发矩阵的“不跑”和“必跑”同样重要。三失败报告必须定位到样例一盏红灯只能让人重跑一份回退清单才能让人修复。不够用的报告只有一行通过率百分之八十四状态失败exit code 1。下一步是开发自己去翻仓库结果是给步骤加上 continue-on-error。能驱动修复的报告必须能点进具体输入哪一切片否决、哪几条零容忍失败、旧输出是什么、新输出是什么、当时的行为捆指纹是什么。报告是回归系统的用户界面。门禁的用户不是流水线是要在三十分钟内做出合并决策的人。看不到样例他就只能选择相信或绕过。所以报告字段是契约总体、切片、回退清单、行为捆指纹、噪声地板、阈值版本六项缺一就不算一次合法评测。缺字段的评测流水线应当自己先失败而不是产出一份残缺报告让人去猜。把报告回写成缺陷单是从门禁走向治理的一步。样例编号、失败原因、责任切片应当自动打开缺陷而不是等有人从聊天记录里复制。缺陷关闭的条件是这条样例在核心集上连续通过并且被确认进入了冻结集。关闭条件不写清缺陷会以“线上暂时没再出现”为由被关掉评测集不会变强。四门禁被绕过的五种死法门禁不是被攻破的是被日常磨损掉的。太慢每次合并等四十分钟团队开始拆小请求来逃避评测或把评测改成手动。太抖同一提交重跑红绿随机门禁信誉破产很快被标为允许失败。太贵没有分层触发全量挂在每次推送上财务或平台组会要求关掉。太糊失败了看不到样例开发无法修复只能重跑或跳过。太宽谁都能在配置里加 skip跳过记录不进审计等于没有门禁。五种死法的对策都不是“再强调一遍纪律”而是改门禁自己的产品属性。慢就分层和并发抖就固定种子、降温度、把断言从模型判分里拆出去贵就触发矩阵和失败快停糊就强制报告字段宽就把 skip 变成需要质量负责人令牌、并且写入审计日志的显式动作。门禁也是产品也有自己的用户体验。用户体验差的安全设施最后都会被自己人关掉。七、模型升级别名、迁移与放量模型升级是四类行为变更里被讨论最多、被误解也最多的一类。误解集中在两句话上“新模型更强”和“接口兼容所以可以热切换”。两句话都可以为真系统仍然可以变差。一别名滚动与快照锁定生产若指向 latest 或供应商提供的浮动别名回归测试测的永远是一个会自己走动的对象。今天权重是快照 A周三供应商静默切到快照 B提交记录里什么都没有事故无法用仓库回滚修复。别名把一次应当显式发生的变更变成了一次无人认领的漂移。推荐做法是快照钉死。生产指向具体快照标识升级是一次显式提交对照实验有明确自变量回滚是改回旧快照。钉死不是终点供应商仍可能对同一快照做静默补丁或在不同区域返回不同实现。因此日常层必须用冻结集重跑钉死的行为捆曲线出现台阶就是漂移告警。钉死解决的是“变更应当被看见”日常重跑解决的是“看见之后还能被证明”。别名并非不能用。预发环境可以用别名去提前发现供应商侧的滚动生产不行。用预发的日常重跑给生产的钉死做侦察是一种合理的分工。反过来——生产用别名、预发钉死——会让预发永远测不到真实事故。二能力迁移不等于任务迁移公开基准上涨的含义是更强的一般语言能力、更好的平均指令遵循、更少的常识错误。它不包含内部口径不包含拒答策略不包含字段契约。你的任务可能变差的原因同样具体更爱解释从而破坏 JSON更爱“帮忙”从而放松拒答对内部术语的旧捷径消失上下文注意力分配改变工具选择偏好改变。这些都不是模型“变弱”了而是模型“换了一种强法”。正确的升级问题因此不是“新模型是不是更强”而是在冻结集上谁赢红线切片有没有否决成本与时延是否可接受回退清单能否被业务接受。公开榜只作背景不作证据。把“更强的模型”当成“更好的系统”是用供应商的评测集代替了自己的评测集。企业场景里任务迁移必须用自己的冻结集重新证明一次都不能省。省掉的那一次会在全量之后用事故的形式补上成本高两个数量级。一个常见的配套错误是为了让新模型在旧评测集上好看按新输出去改金标。这不是在评测迁移这是在取消评测。金标代表业务口径不代表模型偏好。模型换了口径没换金标就不该换。口径若换了那是另一次契约变更应当先升主版本再谈模型。三离线对照、影子与灰度三条路径回答三个不同的问题不能互相替代。离线对照在冻结集上做新旧配对回答已知分布上有没有回退代价低覆盖受限于评测集。影子对比让真实流量双跑、只返回旧结果回答未知分布上差在哪里成本翻倍适合抽样。灰度放量按用户或租户稳定分流回答真实用户有没有不良反应有用户可见风险必须可回滚。一句话概括分工离线看已知分布影子看输出灰度看反应。完整的换模路径是四步离线对照过红线与护栏抽样影子积累差异样本并反哺评测集按用户或租户灰度每档观察覆盖一个业务周期全量之后旧快照至少保留一个回滚窗口。跳过影子直接灰度等于用用户去发现评测集的覆盖缺口。跳过灰度直接全量等于假设冻结集就是真实分布——这个假设几乎总是错的。分流键不能用随机数。同一用户连续两次请求落到不同版本体验横跳对比也不公平。用户标识哈希是默认选择企业客户用租户标识多轮对话用会话标识一次会话内不得切换版本。回滚单元是整捆行为不是单独的模型 ID。只切回模型、留下为新模型改过的提示会进入第三状态。第三状态没有基线也没有对照。八、提示词升级局部编辑的非局部后果提示词变更看起来比换模型更“小”因此更常逃过评测。这是错的。提示词的影响没有局部性前半段的一句话会改变后半段指令的权重把一条约束从段中挪到段末输出分布就可以显著改变。提示回归不能只测被改的那一句必须测整段行为。一非局部效应一个典型 Diff 是加上“请在结论前先给出你的推理过程”提交说明写“方便质检理解不影响结论”。四条非局部后果会同时出现。结构被挤占推理段吃掉输出预算JSON 被包进 Markdown解析失败率上升。口径被带偏模型开始展示思考拒答变得委婉P0 被解释成可以再观察。评测金标失效旧金标不含思维链通过率断崖但质量未必差必须先升契约再对比。成本与缓存输出词元显著增加稳定前缀被打乱单次成本上台阶。非局部性带来一条评审纪律只看文本差异的评审评的是“这句话写得顺不顺”真正该评的是渲染之后的完整骨架、在冻结集上的回退清单、以及长度预算表有没有被挤爆。三份材料应当由流水线自动生成而不是由作者口头保证“影响不大”。作者的保证发生在编辑时刻影响发生在运行时刻两者之间隔着一次模型推理口头保证跨不过去。提示词变更也应分类。措辞级可以走核心集契约级——输出字段增删改名、枚举变化、判定口径调整、任务范围变动——必须走全量、影子与下游会签。把契约级伪装成措辞级是提示变更里最常见的风险转移提交者只看到自己改的几个字看不到下游有三个系统在按旧结构解析。复核清单里必须有一条这次改动之后下游解析代码需不需要同步修改答不上来就按契约级处理。二渲染差异、预算漂移与口径冲突提示回归有三件模型回归不太碰到、却会单独造成事故的事。第一件是渲染差异。模板源码只改一行渲染结果可能变三段——因为改的是被多处引用的片段或改的是条件分支的谓词。没有渲染前后对照评审看到的是源码线上跑的是展开后的文本两份材料不对齐。第二件是预算漂移。新增的约束、示例、工具描述都在抢同一个上下文窗口。窗口不够时被截断的往往是检索片段或历史轮次而不是新加的那句“请完整回答”。截断不报错只是把依据拿走。评测集里若没有超长输入和多工具清单的样本这类事故在合并前不会出现。第三件是口径冲突。新加的一句与旧有的一句在自然语言里可以同时成立在模型的注意力里却会互相覆盖。例如系统提示要求“不确定就拒答”任务指令要求“尽量给用户一个可用的结论”。旧模型可能偏向前者新模型可能偏向后者提示一个字没改口径已经切换。这再次说明行为捆必须一起定版提示与模型的组合才是真正的行为拆开评没有意义。提示词升级的对照设计因此比看起来重。除了冻结集上的配对还应当输出一份渲染对照、一份预算表复核、一份“新增约束与既有约束是否冲突”的人工确认。这三份材料的成本远低于一次口径事故却经常因为“只改了一句话”被省略。九、评测基础设施前面四章回答了测什么、怎么比、怎么判、怎么挡。这一章回答这些东西以什么形态活在仓库和流水线里。没有制品脚本只是一次性的手工没有回流冻结集会慢慢变成一份与线上无关的考古文件。一四类制品与行为捆评测体系至少要有四类制品。评测集样本指纹、金标与等价集、切片标签、留出集划分。判分器规则包版本、参考答案版本、模型判分提示、人工校准报告。基线行为捆指纹、总体与切片、噪声地板、回退清单快照。报告阈值版本、胜负平、失败样例链接、是否允许合并。四类制品要进同一仓库或同一制品库用指纹互相引用。只把脚本放进持续集成、制品放在某位同学的网盘里是这套体系最常见的单点故障。行为捆是第五类也是把评测与生产焊在一起的那一类。模型快照、提示指纹、检索配置、工具清单、采样参数五者哈希的有序拼接写入 bundle.lock。线上每一条日志都记下这个指纹。回滚单元是整捆评测单元也是整捆。两者不一致时你会回滚到一个从未被测过的组合上然后在事故复盘里发现“回滚之后更坏了”——不是回滚失败是回滚目标不在基线里。制品还有一条容易被忽略的权限问题。评测集含有脱敏后的真实请求金标含有业务口径报告含有失败样本的输入摘要。谁能读、谁能改、改是否走评审应当与代码同等对待。把评测集放在公开仓库的明文里、或把未脱敏样本送进外部判分接口会把一次质量工程变成一次数据事件。脱敏规则本身也要版本化因为它会改变样本的语义。二最小可用流水线不需要新平台也能把回归跑进合并路径。最小形态是三个文件、四道闸、一份报告。三个文件冻结样本、尺子与阈值、行为捆指纹。四道闸断言秒级、核心集合并前必绿、全量集发布前配对、日常重跑发现静默漂移。这份形态已经能挡住最常见的四类事故换模型导致 JSON 挂掉、改提示导致拒答松掉、别名滚动导致口径漂移、均分掩盖切片回退。它做不到的是自动生成高质量金标、自动解释每一条开放生成的好坏、自动决定业务上能不能接受某类回退。后三件必须保留人。流水线的职责是把人要看的材料准备好并在红线被触及时拒绝往下走。把后三件也自动化通常会引入一个未校准的判分模型然后把该模型的偏见写成组织决策。最小形态的价值正在于它诚实该自动的自动该人读的人读。从最小形态往上加能力顺序应当是先把报告字段补全再加切片否决再加留出集再加影子再加模型判分的校准。反过来——先上一个漂亮的判分平台评测集还是演示十条——是用平台的完成度掩盖度量的空洞。平台不能代替冻结正如仪表盘不能代替传感器。三线上失败如何进入评测集没有回流冻结集会慢慢失真。评测集的生命力不在第一次标注而在每一次事故之后的追加。路径是五步捕获、脱敏、转样例、复核、冻结。捕获来自解析失败、人工改写、用户追问、点踩、越权告警。脱敏按规则替换手机号、证件、地址、卡片保留结构。转样例写成输入、金标、切片、来源缺陷单号。复核双人确认金标禁止直接用模型输出当答案。冻结进入错例桶只增不减下次合并必跑。回流配额也要管。不是所有失败都值得进冻结集。重复失败合并为一条分布已经饱和的主干样本少进零容忍与新场景优先。每周固定配额例如新增不超过总量的百分之二避免评测集被某一周的异常流量淹没从而改变切片权重。配额看起来像官僚实际上是在保护尺子的稳定性——尺子每周大变门禁就无法积累信誉。回流还有一个方向评测失败应当能在线上被找到对应流量。样例带来源缺陷单号缺陷单带请求标识请求标识带行为捆指纹。三条链打通修复才能闭环。打不通时评测集与生产是两套世界回归通过只说明“我们通过了自己出的题”。十、误区、成本与落地清单把前面的设施收成三份可执行的东西一份误区清单用来在评审里提前拦截一份成本账用来让门禁活过财务审查一份上线自查用来决定这次升级是不是一次工程变更还是一次尚可的探索。一十二条误区每一条都曾以“先上线再说”的形式出现。用演示十条代替冻结集。用公开榜代替任务评测。用均分代替回退清单。用抽查代替门禁。用别名代替快照标识。用一次调用代替配对采样。用未校准的模型判分当唯一尺子。用同一集既调参又验收。用新输出直接覆盖金标。把评测挂成允许失败。阈值写在群消息里。回滚只回提示不回模型。十二条可以压缩成三句。第一句不要用错误的参照系。演示、公开榜、均分、抽查、别名都是错误参照系的具体形态。第二句不要让尺子参与被测。调参泄漏、金标被新输出覆盖、未校准的判分器都是尺子加入竞赛。第三句不要让门禁失去牙齿。允许失败、阈值写在群里、回滚单元与评测单元不一致都是把门禁变成装饰。评审时把这三句问一遍比把十二条逐条朗读更有效十二条本身应当出现在合并请求模板里作为自检而不是作为复盘时的悔过书。二评测成本账看不见的成本一定会被想象成“太贵”看见的成本才可以分层。提交断言不调用模型十秒内结束挡结构与契约。核心集大约八十次调用一到三分钟挡口径与零容忍。全量冻结二百到五百条视采样次数在五到十五分钟挡总体、切片与回退。留出集只随发布跑。日常重跑放在低峰按日配额执行。这是一份可以拿去和平台组谈判的账单不是一句“评测很重要”。成本治理的三条纪律能下沉就不调用模型能缓存前缀就缓存失败快停。评测预算应当单列不要从业务调用预算里挤。挤的结果一定是评测先被停因为评测不直接产生用户可见的功能。把评测当成保质量的生产调用而不是调试开销是财务口径上必须先打赢的一仗。打不赢前面所有设计都会在下一个预算周期被删掉。成本还有一个常被忽略的上限评测本身会成为过拟合的激励。越贵的全量集团队越倾向于“先调到过再提交”于是调参泄漏更严重。分层触发在这里同时是成本策略和诚实策略便宜的核心集允许频繁跑昂贵的留出集不允许被用来调。价格本身在保护尺子。三上线前自查十二条都能答“是”才具备升级资格。行为捆五要素是否全部钉死。评测集是否冻结、指纹是否与基线一致。判分器是否与基线相同若不同是否先重跑了旧系统。A/A 地板是否仍有效阈值是否有版本号。红线、护栏、目标是否分开配置。核心集是否在合并门禁里必绿且不允许跳过。全量报告是否同时给出总体、切片、回退清单、胜负平。零容忍样例是否全部连过失败是否能点进具体输入。留出集是否只在发布前跑。换模是否安排了影子或灰度回滚是否指向整捆。成本与时延是否进入护栏。日常重跑是否在跑上一次台阶是否已经归因。任一题答“否”或“不知道”本次升级就还不是一次工程变更。它仍然可以是一次探索。探索允许但探索的结果不能直接成为生产。把探索和生产用门禁隔开是这套体系的最后一道含义。门禁不是为了放慢升级而是为了让升级配得上“升级”这个词它应当留下基线、留下对照、留下可以回滚的身份而不是留下一段无法复核的口碑。十一、结语模型会继续变强提示词会继续被改检索和工具会继续加。这些都不是问题。问题是在一个没有编译器、没有确定性、没有局部性的系统里团队有没有把自己的行为契约写成一份可执行的考试。固定评测集给出尺子版本对比给出证据质量阈值给出判决CI 门禁给出牙齿。四件齐备升级才是工程。缺一件升级就只是一次对运气的投票。运气有时会站在你这边。新模型确实在多数切片上更好提示词的那句修改确实只影响了文采别名滚动恰好滚向一个更守规矩的快照。运气不会每次都在。回归测试的价值不在于挡住那些运气不好的升级——那些升级即使上了线也会被用户很快喊停——而在于挡住那些看起来更强、均分还在涨、演示更好看、却在红线切片上把系统换走的升级。后一类升级最危险因为它们会通过所有错误的参照系只会被正确的那一套拦住。建设的顺序不必一次铺开。第一周冻结五十条核心集挂上断言和零容忍合并门禁必绿。第二周补切片和回退清单把均分从判决降为摘要。第三周做一次 A/A把拍脑袋的两个百分点换成地板。第四周钉死快照把日常重跑跑起来。一个月后你仍然没有一个完美的评测平台但你已经不再需要靠口碑决定下一次升级。对大多数团队来说这就是从运气走向工程的全部距离。参考资料一评测方法与基准Stanford CRFMHolistic Evaluation of Language ModelsHELMHELM 论文原文arXivLMSYSChatbot Arena 与 MT-BenchJudging LLM-as-a-Judge with MT-Bench and Chatbot ArenaarXivHELM 安全与风险相关评测说明二用模型判分及其校准G-EvalNLG Evaluation using GPT-4 with Better Human AlignmentarXivWho Validates the Validators? Aligning LLM-as-a-Judge with Human PreferencesarXivA Survey on LLM-as-a-JudgearXivOpenAI Evals 项目说明OpenAIEvaluation 最佳实践三工程化评测与观测promptfooLLM 评测与红队LangSmith EvaluationLangfuseLLM 观测与评测DeepEval 文档RagasRAG 评测框架OpenTelemetry生成式 AI 语义约定四模型版本、快照与提示治理OpenAI 模型快照与更新说明Anthropic模型版本与提示工程Google CloudVertex AI 评测服务Microsoft AzureLLM 评测指南OpenAI Cookbook如何评估 LLM 应用五回归测试、门禁与风险管理ISTQB回归测试基础GitHub Actions必需检查与分支保护NIST AI Risk Management FrameworkISO/IEC 42001人工智能管理体系OWASP Top 10 for Large Language Model Applications六统计比较与实验设计McNemar 检验配对二分结果Bootstrap 置信区间)A/A 测试在实验平台中的作用微软 Exp Platform 综述Kohavi 等Trustworthy Online Controlled Experiments统计功效与样本量NIST 工程统计手册