跳到主要内容

134 篇博文 含有标签「evals」

查看所有标签

Eval 差异分析作为分支保护:交付分数变化,而非分数下限

· 阅读需 11 分钟
Tian Pan
Software Engineer

我曾合作过的一个团队拥有一套看起来很清爽的评估门禁(eval gate):每个 prompt PR 都必须在黄金测试集(golden set)上获得 0.85 以上的评分,否则合并按钮就会保持灰色。他们为此感到自豪。但在六周后,平均质量已从 0.93 悄然滑落至 0.87 —— 每个 PR 都通过了门槛,每个 PR 都成功上线,而且没有任何一个改动需要为这种质量回退负责,因为它们都没有违反规则。这个门槛是根据上个季度的质量快照设定的,而不是根据上周的质量。

这就是绝对阈值评估门禁的失效模式:一个将评分从 0.92 降低到 0.86 的 PR 可以绿灯通过,而一个将评分从 0.80 提升到 0.84 的 PR 却会被挡在门外。团队学到的是“只要过线就能发布” —— 这是一个关于质量的故事。但你真正需要的信号是“如果这个改动在重要的切片(slices)上没有发生回退就发布” —— 这是一个关于回退检测的故事。

测试覆盖率工具在十年前就解决了这个问题。它们报告相对于父提交(parent commit)的差异,并将其细化到每个文件。评估门禁还没赶上这个进度。

评估集也有季节性:为什么质量在报税季的第一个周一会下降

· 阅读需 13 分钟
Tian Pan
Software Engineer

在 1 月下旬的一个周一早上,仪表盘发出了第一次回归预警。支持助手的质量得分一夜之间下降了 3 分。周末没有发布 Prompt 变更。没有更换模型。评估套件——团队在 6 个月前构建的一个包含 800 行数据的精选黄金集 (gold set)——也没有任何变化。有人开了一个故障单 (incident)。

经过两天的二分定位 (bisecting) 之后,得到的答案平淡无奇且是结构性的。那是美国国税局 (IRS) 开启当年税务申报后的第一个工作周一。一半的入站查询已从“我的薪水到账了吗”变成了“我该如何申报来自支付 App 的 1099-K 表单”。在夏季采样的评估集对 1099-K 毫无头绪。模型并没有变差。是客户变了。评估标准是针对一个已经不存在的客户群进行校准的。

这种模式在每一个拥有季节性用户的产品中每季度都会重复出现——报税季的金融科技、季度末的销售工具、开学季的教育产品、退货季的电子商务、订票季的旅游产品、投保季的医疗保健。将“评估集视为固定资产”是一种舒适的抽象,但在一个无人更新的日程表上,这种做法是错误的。

LLM SDK 升级税:为什么补丁版本更新实际上是一次伪装的模型发布

· 阅读需 11 分钟
Tian Pan
Software Engineer

我上个季度合作的一个团队在周二凌晨 2:14 向生产环境推送了一个回归错误。值班警报触发了,因为其摘要代理(summarization agent)下游的 JSON 解析器以“尾随逗号错误”拒绝了二十分之一的响应。模型没变。提示词(prompt)没变。评估套件在前一天晚上的通过率为 96.4%,稳稳高于 95% 的准入门槛。改变的只是 package.json 中的一行:模型提供商的 SDK 从 4.6.2 升级到了 4.6.3。补丁更新(Patch bump)。由依赖机器人自动合并。发布说明里写着“内部清理”。

所谓的“内部清理”是一个收紧的 JSON 模式解析器,它删除了一个宽容的后备路径,而这个路径此前一直在默默修复模型工具调用输出中反复出现的尾随逗号怪癖。模型的行为没有改变。但 SDK 对该行为的解释改变了。团队的评估套件从未发现这个回归,因为评估套件运行的 SDK 版本与依赖机器人刚刚推送的版本不同。

这就是 LLM SDK 升级税,它是当今生产环境 AI 中最隐蔽、代价最昂贵的故障模式之一。SDK 不是被动的传输工具。它是你提示词行为的积极参与者,而那些在没有评估的情况下升级 SDK 的团队,实际上是在进行一场伪装的模型发布。

12 个月的 AI 功能悬崖:为什么你的生产模型在无人标记的日历上悄然衰减

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个功能发布时通过率为 92%。发布演示稿(Launch deck)为此庆祝。12 个月后,同样的功能通过率降到了 78% —— 没有事件报告,没有部署失败,没有任何单一的变更可以追责,仅仅是无人负责监控的缓慢侵蚀。团队将其归咎于“幻觉”或“用户行为转变”,选了一名初级工程师去调查,并设定了一个“提高质量”的季度 OKR。OKR 没能达成。该功能上线了一个道歉对话框,告诉用户 AI 有时会犯错。六个月后,它被弃用,取而代之的是一个发布时通过率为 91% 的新版本,循环再次开始。

这并非运气不好。这是 AI 功能运行的“第二时钟”,一个在发布时没有人会在日程表上标注的时钟。传统软件也有功能衰减 —— 依赖漂移、代码库腐化、缓慢积累的半成品重构 —— 但这些衰减是发生在工程团队已经理解并预留预算的时钟上。AI 功能具备上述所有问题,此外还有一系列传统摊销假设无法建模的并行衰减源:模型弃用、厂商权重轮换、用户输入的分布偏移、不断叠加的 Prompt 补丁、评估器(Judge)校准偏移,以及不再能代表生产流量现状的评估集的悄然老化。

在下一个 AI 功能发布之前,而不是之后,必须落地的架构认知是:AI 功能具有非零的基础维护成本。功能在发布时并没有“完成”。它已经进入了一个无法逃避的维护周期,而那些没有为这个周期预留预算的团队,终将通过惨痛的方式发现这一点。

两个 PM 的难题:当提示词所有权与产品所有权发生偏离时

· 阅读需 12 分钟
Tian Pan
Software Engineer

周二早上收到了一张支持工单:一名客户收到了关于退款期限的、言之凿凿的错误回答。工程团队调取了追踪记录,发现模型识别错了意图。产品 PM 查看仪表板,发现上个迭代发布的“极速退款”入口触发了一个 Prompt 从未针对其进行过调优的意图。平台 PM 指着评估套件(eval suite)说,测试全是绿色的。两人在技术层面都是正确的。但客户得到的回答依然是错的。

这就是“两个 PM 问题”,大多数 AI 团队都存在这个问题,只是没有给它命名。产品 PM 负责面向用户的界面——意图、成功指标、支持升级路径。平台或 ML PM 负责 Prompt、模型选择、评估套件和成本上限。两者的路线图在季度规划层面是协调的,但在每周发布层面却在背道而驰,因为两个 PM 在不同的仪表板上针对不同的指标进行优化,且有着不同的变更控制流程。

这种有趣的失效模式并不是因为两个 PM 意见不合,而是因为他们都在各自的职责范围内正确地完成了发布,却共同导致了一个无人负责的退化(regression)。

智能体完成任务时房间已空:异步后台任务中的过时上下文交付

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个需要 90 秒才能完成任务的后台智能体,其操作基于的是 90 秒前的世界快照。当它返回结果时,用户可能已经导航到了不同的视图,开始了一个新的对话,归档了原始请求,或者完全关闭了标签页。大多数智能体框架无论如何都会交付结果,修改状态以反映结果,并将这次往返视为成功。但这并不是成功。这是智能体在一间空屋子中结束。

这种失败模式比直接丢弃结果更糟糕。丢弃结果只是一次投递失败——虽然烦人但可以恢复。而应用陈旧的结果则是对一个用户不再提出的问题的回答,它是针对不再匹配的状态编写的,往往会覆盖用户已经开始的新工作。用户会注意到发生了他们没有要求的事情,却无法重构原因,从而对系统失去信任,这种信任损失是简单的超时永远不会造成的。

解决办法不是更快的智能体,而是一个交付时的相关性门控,它将返回的时刻视为一个全新的决定,而不是派发时刻预设的定论。

为什么弃用 AI 功能比你想象的更难:用户构建了你看不见的信任脚手架

· 阅读需 11 分钟
Tian Pan
Software Engineer

2025 年 8 月,当 OpenAI 试图从 ChatGPT 中移除 GPT-4o 时,遭遇了强烈的抵制——有组织的标签、付费用户威胁取消订阅、几天内的公开反转——最终迫使公司将其恢复为默认选项,并承诺在未来任何移除之前提供“实质性通知”。替换它的模型在团队关注的每一项基准测试中都表现得更好。但这并不重要。用户已经花了几个月的时间来了解该模型的怪癖,根据其失效模式校准自己的判断,并将它的特定措辞整合进团队从未检测过的工作流中。用“更好的版本”替换它,会让这种校准归零。

这种失效模式是标准的弃用策略手册所未涵盖的。下线一个常规的 SaaS 功能——宣布、迁移、灰度发布移除、退役——假设用户契约是 API 接口。而对于 AI 功能,契约是模型的观察行为:措辞、倾向、失效模式,以及它处理歧义的特定方式。用户在这些行为之上构建了“脚手架”,而这些脚手架大多存在于他们的头脑中、笔记本电脑上以及你的团队从未触及的下游系统中。

LLM 工具表面的契约测试:当供应商更改字段而你的智能体静默适应时

· 阅读需 12 分钟
Tian Pan
Software Engineer

上周二,某供应商在工具响应中将 "items" 更改为了 "results"。智能体没有崩溃。它围绕新结构重新进行了规划,返回了一个看起来很自信但丢失了三分之二行数据的答案,而轮值工程师在 3 天后因为客户询问导出数据为何缺失才发现。没有抛出异常。没有触发报警。运行在供应商变更前冻结的固定集(fixture)上的评测套件(eval suite)一直保持绿灯。

这种失败模式是十年前微服务中发明契约测试(contract testing)要捕捉的,而如今几乎没有智能体技术栈具备相应的对策。HTTP 服务有 Pact、schemathesis 和 oasdiff 位于消费者和提供者之间,拒绝让破坏性变更上线。你提供给智能体的工具——REST 端点、内部 RPC、供应商 SDK、MCP 服务器——都没有类似的保障。模型吸收了变化,优雅地进行了适应,并生成了一个看似正确但质量下降的答案。

确定性预算:将随机性视为按层面的分配,而非全局开关

· 阅读需 12 分钟
Tian Pan
Software Engineer

Temperature 之争是 AI 工程中最具宗教色彩的争论,也是最没效率的争论之一。每个团队都会形成两个阵营:决定论者希望将所有地方的 Temperature 都固定为 0,因为他们无法调试不稳定的系统;而创意论者则希望调高它,因为这样输出结果感觉更“有灵性”。两者都错了,因为他们都在错误的层面上回答这个问题。Temperature 不是一个全局设置。它是一项预算——就像任何预算一样,它应该被分配,而不是被宣告。

高效的框架很简单:系统中每个模型调用都有其目的,随机性要么在那个层面(surface)发挥作用,要么就不该存在。决定下一个调用哪个工具的规划器(planner)无法从变化中获益;选错一个工具就是调试噩梦,而且没有任何创意上的好处。如果一万个用户看到的摘要措辞都一模一样,那么为他们总结搜索结果的响应合成层很快就会显得呆板——SEO 团队最终会标记这些样板内容。一个让模型提出备选方案供人类选择的头脑风暴层,在 Temperature 为 0 时表现反而 更糟;多样性本身就是其核心功能。

如果你无法清晰地说明随机性在特定调用位置的作用,你就不应该为此付费。

评估作者的单一文化:为什么你的基准测试会变成一张自画像

· 阅读需 12 分钟
Tian Pan
Software Engineer

绿色 CI 并不意味着“这个提示词有效”。绿色 CI 的本质是“编写评测的工程师想不出这个提示词会如何出错”。这是两个截然不同的断言,而它们之间的差距正是生产事故的温床。一个评测套件并不是对模型的测量——它是对编写者的冰冷写照。他们的方言、领域知识、资历、偏好的失败模式,以及他们在编写测试用例时恰好使用的模型。根据构造,工程师没想到的测试内容统统未经测试。更糟糕的是:他们会从同一个视角不断扩展套件,因此随着套件的增长,盲点并不会缩小,反而会变得根深蒂固。

这就是评测作者单一化(eval-author monoculture)问题,也是当今 AI 工程中讨论最少、风险最高的可靠性问题。团队痴迷于裁判偏差、位置偏差、冗长偏差、泄漏和污染——但上游偏差其实是最初决定测试用例的人的偏见。其他任何评测误差来源都会被它放大。如果你的套件是由一个人编写的,那么你就拥有了一个带有性格的基准测试,而这种性格正是你的 CI 能够捕获风险的无形天花板。

评估框架(Eval Harness)而非提示词,才是你真正的供应商锁定

· 阅读需 11 分钟
Tian Pan
Software Engineer

商业计划书中每一个“如果需要,我们会直接更换供应商”的计划,其预算表中都有提示词改写的支出。但没有一个计划包含评估套件的预算。这就是问题所在。提示词是显性耦合——那是你编写的部分,你可以通过 grep 搜索到的部分,也是一个初级工程师在一个下午就能改写的部分。而评估框架(eval harness)则是隐性耦合,当你真正尝试迁移时,它会吞掉你四分之一的路线图进度。

这种模式在议价能力变得至关重要时就会显现。你的合同到期了。竞争对手发布了一个在你的领域基准测试表现更好的模型。输出 token 的定价发生了变化。你准备让候选模型跑一遍评估套件来做决定,结果不到一天你就发现,你无法信任该框架产生的任何评分,因为框架本身是针对现有供应商编写的。你不是在比较模型,而是在拿一个模型与一个针对另一个模型校准过的测量工具进行比较。

评估集作为模拟器的偏移:当离线指标提升而生产表现恶化时

· 阅读需 12 分钟
Tian Pan
Software Engineer

LLM 产品中最昂贵的失败模式并不是一次糟糕的发布。而是连续六次好的发布——从内部所有计分板来看都是如此——而与此同时,用户的信任却在悄悄流失。离线评估分数在每个周五的演示中稳步上升。每周业务回顾中的 CSAT 曲线先是持平,然后下降,接着没人知道它是什么时候开始下降的,因为没人在交叉分析这两张图表。等到复盘总结(postmortem)点出问题时,团队已经花了两个季度的时间,针对一个在第三个月左右就不再符合现实的数据集来调优提示词(prompt)。

这就是“评估集即模拟器漂移”(eval-set-as-simulator drift),也是我所知道的一个最典型的例子:一群跳过了必读清单的 LLM 团队,正以极其惨痛的代价重新发现一个古老的机器学习教训。评估套件(eval suite)并不是一个固定的基准。它是一个模拟器,而一个从未根据它声称要预测的系统进行重新校准的模拟器,最终预测的将是另一个不同的系统。