跳到主要内容

160 篇博文 含有标签「evaluation」

查看所有标签

你的评估准则是真正的产品规格书 —— 且没有产品经理签过字

· 阅读需 13 分钟
Tian Pan
Software Engineer

一位产品经理写下了一段话:“助手应当乐于助人、准确且简洁,绝不能让客户感到匆忙。”一位工程师读了这段话,打开一个 YAML 文件,编写了 47 个加权标准,以便 LLM-as-judge 能够为每一个追踪(trace)生成一个分数。六个月后,那个 YAML 文件成了产品的实际规范。每一次发布都受其把关。每一次回归警报都基于它触发。每一个“达到发布质量”的决策都通过它来路由。而产品经理从未读过它。

这是当今 AI 工程中最为常见的、无意间发生的产品所有权转移。评估准则(rubric)不是对规范的衡量 —— 它就是规范,就像编译器不是对语言的描述,而是它的运行真相。就像编译器一样,评估准则也有决定语义的实现细节。哪种失败模式得 0 分而不是 0.5 分?哪个标准的权重是 0.3 而不是 0.05?哪些行为在评估准则中缺失,从而完全未被计算?每一个都是产品决策。而它们都没有出现在最初的任务书中。

少样本腐化:为什么昨天的示例会拖累今天的模型

· 阅读需 11 分钟
Tian Pan
Software Engineer

我合作过的一个团队曾有一个 JSON 提取提示词,其中包含 11 个手工调优的 few-shot 示例。在之前的模型上,这些示例将精确匹配准确率提升了 6 个百分点。模型升级后,同样的 11 个示例反而让准确率下降了 2 个百分点。没有人更改过提示词。没有人更改过评估集。这些示例就是失效了——而且更糟的是,它们开始产生误导。

这种退化并不是新模型的 bug。它是提示词本身的一种“腐化”模式。每当团队在迁移模型版本时将提示词视为固定资产,这种现象就会出现。Few-shot 示例并不是提示词独立的一部分,它们是“模型-提示词对(model-prompt pair)”的一部分。在不重新评估另一方的情况下迁移其中一方,会产生任何绑定在单一模型版本上的评估套件都无法捕捉到的退化。

你的 LLM Judge 存在长度偏见、位置偏见和格式偏见 —— 且无人审计你的模型

· 阅读需 13 分钟
Tian Pan
Software Engineer

我上个季度合作的一个团队看着他们的 LLM-as-judge 分数在六周的提示词(prompt)迭代中从 78% 飙升至 91%。他们发布了产品。但用户却非常讨厌它。新的提示词产生了更长、格式更丰富、听起来更自信的回答 —— 而评委(judge)爱死了每一个回答。团队并没有构建出更智能的提示词。他们只是对评委的偏见进行了逆向工程。

这是团队中没人审计的失败模式。LLM-as-judge 有据可查的系统性偏见:无论质量如何,更长的回答得分更高;在两两比较中,第一个选项胜出的概率高于随机概率;且看起来像评委自身训练分布的输出得分高于不符的。如果你在十二个月前接入了一个 LLM 评委,且从未针对人类进行重新验证,那么你的分数就不是质量信号 —— 它们衡量的是你的提示词学会如何操纵其评估器的程度。

令人沮丧的是,捕捉这一点的审计方法很直接,防止它的校准纪律也很廉价,但几乎没有团队会执行其中任何一项。

你的模型路由是基于评估集训练的,而不是你的真实流量

· 阅读需 12 分钟
Tian Pan
Software Engineer

我上个季度交流过的一个团队发布了一个模型路由(model router),在离线基准测试中获得了 96% 的路由准确率,并使平均推理成本降低了 58%。但在运行三周后,支持工单开始集中在特定的用户群体中——即那些通过 API 运行脚本化批量查询的企业管理员。低成本路径向这些用户发送了大量垃圾回复。路由完全按照设计运行,但设计本身错了。

这个故事代表了常态,而非特例。“能用小模型就用小模型,必须用大模型时才用大模型”的架构是生产环境下 LLM 系统中最可靠的成本杠杆之一,在标准基准测试中记录的成本降幅在 45% 到 85% 之间。但每个路由演示中引用的节省数字都假设了基准测试的分布。生产流量并不具备这种形态,而两者之间的差距正是质量回退(quality regressions)存在的地方——这些回退集中在你的离线评估(eval)从未设计覆盖的细分领域。

多模态评估漂移:为什么在文本表现稳定的情况下,图像和音频路径会出现回退

· 阅读需 13 分钟
Tian Pan
Software Engineer

仪表板显示,这个版本的质量提升了两个点。文本评估套件运行正常。你的模型供应商发布了一个新的 Checkpoint,在你跟踪的每个公开基准测试上都超过了前一个版本。你推进了发布。一周后,支持团队标记了一个隐蔽但持续增长的工单量上涨,内容关于上传的屏幕截图 —— 用户反映模型“读错了图表中的数字”或“漏掉了表格中的一行”。几天后,音频转录的投诉接踵而至,主要来自非美式英语使用者。这些都没有出现在你的评估流水线中。发布看起来很健康。但事实并非如此。

这就是多模态评估漂移(Multimodal Eval Drift),几乎每一个在以文本为核心的架构上硬塞进视觉和音频功能的团队都在发布这种问题。曾经适用于文本的评估规范 —— 黄金集(Gold Sets)、LLM 作为评委(LLM-as-judge)、漂移仪表板、以及决定是否发布的综合评分 —— 在多模态领域仅剩空名。每个模态的失败率不具可比性,捕捉文本错误的评分标准(Rubrics)捕捉不到图像错误,而且产生文本黄金集的标注流水线是针对每半年发布一次的工作量校准的,而不是针对伴随每次 Checkpoint 更新而来的多模态退化。

正确的心智模型是:多模态并不是同一个模型上的一个开关 —— 它是一个具有不同失败分布的不同产品面,而忽视了这一区别的评估规范在每次模型发布时都在输出隐形的退化。

智能体动作空间的可达性分析:为你从未测试过的分支提供评测覆盖

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的团队第一次意识到 Agent 可以调用 revoke_api_key 是在某个早晨,一位好心的用户输入了:“这个 Token 感觉太旧了,能帮我轮换一下吗?” 这个工具是在六个月前作为认证团队 MCP 服务批量导入的一部分注册的。它通过了 Schema 验证,出现在目录枚举中,然后就一直闲置在那里。没有任何评测(Eval)调用过它,也没有任何生产环境追踪(Trace)触及过它。直到某条提示词(Prompt)、某个规划器(Planner)决策,事件频道(Incident Channel)才发现该工具竟然存在。

这就是隐藏在每一个拥有复杂工具目录的 Agent 中的失效模式。四十个注册函数和一个可以组合它们的规划器,产生了一个你从未观察到的计划可达图的长尾。假设“我们测试了常用路径”掩盖了一个事实:危险的分支几乎从定义上来说就是你从未见过的那一个。

你的影子评估集是一个合规性定时炸弹

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 AI 技术栈中最危险的数据存储是那个无人设计的存储。这一切始于一次冲刺期间的 Slack 消息:“真实用户是捕捉真实 Bug 的唯一途径 —— 让我们把一定比例的生产流量接入评估流水线,以便我们可以每晚进行回放。”六名工程师给这条消息点了赞。九个月后,该存储桶包含了 430 万条追踪(traces),当失败率上升时,评估任务会呼叫值班人员,而失败案例会被逐字发送到一个有 40 人阅读的 Slack 频道。这些追踪包含电子邮件地址、公司内部名称、部分信用卡卡号、员工电话号码,以及用户解释其愤怒原因的客户支持对话记录。

没有人梳理过数据流。没有 DPIA(数据保护影响评估)涵盖它。上季度的隐私审查查看了模型供应商的 API;但它没有查看你的评估任务。然后,一份数据主体删除请求送达,团队发现“删除该用户的所有数据”这句话已经无法对应到他们实际能做的任何事情。

用于多轮 Agent 评估的合成用户:当你的测试固件需要“反击”时

· 阅读需 11 分钟
Tian Pan
Software Engineer

单轮评估擅长一件事:在用户输入一次后便离开的任务中对模型进行排名。但对于你实际发布时会遇到的故障模式,它们毫无用处。比如在第三轮对话时就忘记用户目标的 Agent;在礼貌的重复询问下(“你确定吗?能再检查一下吗?”)就屈服并推翻正确答案的 Agent;或者在第四轮对话时还在问第二轮已经问过的澄清问题的 Agent,因为它读不懂自己的历史记录。这些问题都不会出现在对话仅进行一次交互就结束的基准测试中。

你可以进行真实用户评估,但每次发布都需要耗费数百小时的人工审查,而且问题往往在发布三周后才浮出水面。或者,你可以构建由 LLM 驱动的合成用户——具有人物角色 (Persona)、目标、耐心和放弃阈值的机器人——每晚针对待选 Agent 运行数千次对话。这是 τ-bench、AgentChangeBench 以及 2025–2026 年大多数生产级对话评估方案背后的方法。这种方法行之有效,直到它失效为止,而它失效的方式往往能让你更深刻地了解你的评估流水线,而不是合成用户本身。

95% 可靠性幻觉:为什么你的 10 步 Agent 在 40% 的情况下会失败

· 阅读需 13 分钟
Tian Pan
Software Engineer

在几乎每一个智能体(agent)项目评审中,都有一个会让谈话戛然而止的时刻。有人画了一张小图表:y 轴是端到端任务成功率,x 轴是工具使用的步骤数。曲线急剧下降。全场陷入沉默,因为屋子里的每个人之前都在争论提示词(prompt)、模型和检索策略——而这张图表在告诉大家,所有的这些争论,都抵不过一个简单的事实:这条链条上的环节太多了。

这一数学原理是可靠性工程中最古老的结论之一,如今被移植到了一个自以为是的新领域。如果流水线中的每一步都以概率 p 独立成功,那么 n 个串联步骤的成功概率就是 p 的 n 次方。代入一些在进度报告中听起来还不错的数字:单步可靠性 95%,十个步骤,端到端成功率就只有 60%。二十步降至 36%。三十步则降至 21%。那个“95% 的时间都能正常工作”的智能体,实际上在三分之一的真实用户请求中都会失败,因为真实的用户请求绝非只有单个步骤。

演示循环偏见:你的开发流程如何悄然演变为针对“有魅力的失败”进行优化

· 阅读需 12 分钟
Tian Pan
Software Engineer

每个 AI 产品团队都会有一种特定的会议,通常发生在周四。有人共享屏幕,在 notebook 里输入一个 prompt,然后运行三四个例子。房间里的人反应热烈。大家惊叹“哇”。有人截图发到 Slack。决策就这样做出了——上线、更换模型、调整 temperature。没有人记录失败率,因为根本没人去衡量它。

这就是演示循环(demo loop),它带有一种几乎没有团队意识到的结构性偏见:它筛选的不是最佳输出,而是最“易读”的输出。几周或几个月下来,你的 prompt 不断演进,最终生成的是那些能“在会议中镇住场面”的答案——自信、流利、格式整齐、切中主题。至于它们是否正确,则是另一个变量,而你的流程并没有衡量这个变量。

其结果就是我所说的“有魅力的失败”(charismatic failure):输出结果在某些方面是错误的,但由于选择压力,你的演示循环已经被训练得会自动忽略这些错误。

你的评测框架是单用户运行的,但你的智能体并非如此。

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 Agent 通过了 92% 的评估测试集。你发布了它。在上线一小时的真实流量中,发生了一些从未在任何追踪(trace)中出现过的事情:Agent 在频率限制(rate-limit)重试风暴中停滞不前,一个客户在工具响应中看到了另一个客户的草稿邮件,你的模型供应商连接池处于 100% 的占用率,而 CPU 却处于闲置状态。这些失败没有一个源自模型。它们存在于你测试的方式与生产环境运行方式之间的鸿沟中。

这个鸿沟表现为同一种形式。你的评估工具(eval harness)在一个固定数据集上一次循环一个 Agent。而你的生产环境则在共享基础设施上同时运行许多 Agent。顺序评估隐藏了每一个前提条件为“两个事物接触同一个资源”的 Bug。在你将对抗性并发(adversarial concurrency)构建到评估工具本身之前,这些 Bug 只会以紧急运维(on-call)报警的形式出现。

评估通过,但工具全是 Mock 的:为什么你的 Agent 最棘手的生产故障从未进入测试框架

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的智能体在评估测试集上达到了 94% 的准确率。然而你的轮值告警却响个不停。房间里没人撒谎,这两个数字都是真实的。实际情况是,测试框架(harness)在测试提示词(prompt),而生产环境在测试智能体(agent),这是两个完全不同的产物,只是恰好共享了权重。

Mock 工具的评估通常是产生这种差距的原因。你用预设的 JSON 存根(stub)了 search_orderscharge_cardsend_email,给模型输入一个用户回合,并对最终响应进行断言。这种运行方式成本低、具有确定性且可复现——这些都是 CI 系统喜欢的特性。但它对工具选择、延迟、速率限制(rate limits)、部分失败和重试行为保持沉默,也就是说,它忽略了那些在事故回顾中占主导地位的失败因素。