跳到主要内容

131 篇博文 含有标签「evaluation」

查看所有标签

知识污染问题:当你的 RAG 系统忽略自身检索结果时

· 阅读需 9 分钟
Tian Pan
Software Engineer

一个团队为内部文档构建了 RAG 流水线。检索效果看起来不错——相关段落都被召回了。但在生产环境中,用户持续收到过时的答案。深入查看日志后他们发现,模型返回的是训练数据中的事实,而非它被给予的文档内容。检索成功了,但模型就是没用上它。

这就是知识污染问题:模型的参数记忆——训练期间编码进权重的知识——压制了检索到的上下文。这种失败悄无声息、表现自信,也是生产环境 RAG 系统中最常见的故障模式之一。

LLM 输出的基于属性的测试:发现你的评估集从未想过的 Bug

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的评测集(eval suite)显示准确率为 94%。但用户反馈,对于名字不是 "John" 或 "Alice" 的情况,该功能是失效的。这两者都是事实,而它们之间的差距有一个专门的名字:你精心挑选的测试集只编码了你已经预料到的失败模式。

基于属性的测试(Property-based testing,简称 PBT)诞生于 1999 年,旨在揭示确定性软件中正是这一类的盲点。将其应用于 LLM 输出时,它会自动生成数以万计的对抗性输入变体,探测手写测试用例在结构上无法触及的领域边界。2025 年的一项 OOPSLA 研究发现,平均每个基于属性的测试发现的变异 Bug 数量大约是普通单元测试的 50 倍。另一项研究测量出,PBT 和基于示例的测试(EBT)在不同的 Bug 上会失败——将两者结合后,检测率从 68.75% 提高到了 81.25%。这 12.5 个百分点的差距并非舍入误差,它代表了单一方法无法察觉的整整一类故障。

本文面向那些已经拥有评测集,并希望找出那些评测集在结构上无法发现的 Bug 的工程师。

掩盖检索器 Bug 的 RAG 评估反模式

· 阅读需 12 分钟
Tian Pan
Software Engineer

RAG 系统中存在一种常见的失败模式,数月内都不会被察觉:你的检索器(retriever)返回了错误的文档,但你的生成器(generator)足够擅长即兴发挥,以至于端到端的质量分数依然保持绿色。你不断调整提示词(prompt)。你升级模型。但都无济于事。这个 Bug 存在于上游三层,而你的指标对其视而不见。

这就是检索器评估反模式(retriever eval antipattern)——将整个 RAG 流水线作为一个整体进行评估,这让生成器吸收并隐藏了检索失败。其结果是,你无法区分是“生成器失败”还是“检索器失败”,从而使得系统性的改进几乎变得不可能。

你团队的基准测试正在互相欺骗:共享评估基础设施的污染问题

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的红队刚完成了一次越狱扫描。他们发现了三个新型攻击向量,将其整理成文档,并把这些提示词放入共享提示词库,供其他人学习。一周后,安全团队运行基线评估,报告鲁棒性提升了 12%。所有人都在庆祝,却没人问为什么。

实际发生的是:安全团队的基线评估悄悄纳入了红队的攻击提示词。模型并没有变得更健壮——是评估被污染了。你的基准测试现在衡量的是对已知攻击的免疫力,而非对新攻击的泛化能力。

这就是共享评估基础设施污染问题,它比大多数团队意识到的要普遍得多。症状是指标被人为拉高,根本原因是把评估基础设施当生产基础设施来对待——优化了共享和效率,而非隔离性和保真度。

AI 的测试金字塔倒置:为什么单元测试是 LLM 功能的错误投资

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的团队上线了一个新的 LLM 功能。单元测试全部通过,CI 是绿色的,你部署了。然后用户开始反馈 AI "就是不好用"——回答格式奇怪,智能体选错了工具,在多步骤任务进行到一半时上下文丢失。你查看测试套件,它仍然是绿色的。每个测试都通过了。但这个功能是坏的。

这不是运气不好,而是当你把确定性测试哲学应用于概率性系统时必然发生的结果。经典测试金字塔——宽泛的单元测试底座、较小的集成测试中间层、狭窄的端到端测试顶端——建立在一个如此根本的假设之上,以至于没有人会把它写下来:代码每次都做同样的事情。LLM 在每个层面都违反了这个假设。建立在其上的测试策略需要从头重建。

你一直在忽略的偏见审计:如何为 LLM 流水线构建人口特征公平性

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个团队发布了一项由 LLM 驱动的功能。它通过了安全过滤器,通过了准确性评估。但用户开始投诉。六个月后,一名研究人员运行了一项包含 300 万次对比的研究,发现该系统在输入完全相同的情况下,有 85% 的时间选择了与白人相关的名字,而选择与黑人相关的名字仅占 9%。

这不是安全问题。这是一个公平性问题,两者需要完全不同的工程应对方案。安全过滤器防范伤害。公平性检查衡量你的系统是否能为每个人产生同样优质的输出。一个模型可以满足你所有的内容策略,但仍可能诊断出黑人患者的死亡风险高于同样患病的白人患者,或者为女性生成的简历比男性更单薄。这些差异对于拦截脏话的护栏来说是不可见的。

大多数团队从未构建过第二种检查。这篇文章将探讨你为什么要构建它,以及具体如何去做。

Eval 异味目录:让你的 LLM 评估套件比没有评估还糟糕的反模式

· 阅读需 15 分钟
Tian Pan
Software Engineer

我去年合作过的一个团队拥有一套包含 847 个测试用例的评估套件,仪表盘一片绿色,发布节奏从外部看非常有纪律。然而,他们的旗舰摘要功能开始为大约二十分之一的客户支持线程生成言之凿凿的错误摘要。该能力的评估得分在连续六个月里一直保持在 94%。当我们对这套套件进行审计时,发现问题并不在于评估在撒谎。问题在于这些评估已经悄然腐化,测量了错误的东西,惩罚了正确的模型行为,并与它们正在评估的模型共享盲点。这套套件并不是像传统测试那样以一种响亮的方式崩溃,而是像温度计一样坏掉了——无论你把它放在哪里,它都显示室温。

测试异味(Test smells)在传统软件领域已经被研究了二十年。Van Deursen 的目录、xUnit 模式分类以及更近期的工作都记录了那些看起来正常的测试如何能积极地损害代码库——通过编码错误的规范、使重构变得昂贵、以及制造让真正的 bug 隐藏得更深的虚假信心。LLM 评估是一个非常新的领域,以至于同类的文献几乎不存在,但同样的动态已经发生在我交流过的每个 AI 团队中。不同之处在于,LLM 评估异味具有传统测试所不具备的机制:训练数据重叠、随机输出、评委模型反馈循环、能力漂移。你不能只是简单地移植旧的分类体系,你需要一个新的。

用稀疏标注构建 LLM 评估体系:你不需要一万个样本

· 阅读需 14 分钟
Tian Pan
Software Engineer

构建 LLM 应用的团队总会犯同一个错误:他们等待积累足够的标注数据之后,才肯投入评估基础设施建设。他们告诉自己需要 5000 个样本,或者 10000 个。评估系统始终停留在待办事项清单上,而"感觉不错"的主观判断代替了真正的指标度量。ZenML 对 1200 个生产部署的分析发现,即便是成熟的部署,非正式的直觉判断依然普遍存在——许多团队从未真正建立起系统性的评估机制。

数据量直觉是从经典机器学习时代借来的——在那个时代,更多的标注样本确实能稳定提升模型性能。但对于 LLM 评估,这个直觉基本上是错的。对稀疏基准测试的研究表明,20–40 个精心挑选的样本就能可靠地估算完整基准的排名,而 100 个样本产生的平均绝对误差低于 1%,与使用数千个样本相比相差无几。问题不在于数据量,而在于大多数团队跳过了使小规模评估集值得信赖的结构化流程。

本文介绍这个流程的实际操作方式:如何通过主动学习选取合适的样本,如何用弱监督大规模生成噪声标签,如何借助 LLM 评判者进行冷启动,以及如何判断你的小型评估集何时可以正式使用。

裁判模型独立性:当评分者与被评分者共享盲点时,你的评测为何会失效

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的评测套件得分 91%,但用户反映系统感觉不可靠。事后复盘发现了问题所在:你同时用 GPT-4o 来生成响应和评分。这个模型在评判自己的镜像,而它喜欢自己所看到的。

这就是裁判模型独立性问题。它比大多数团队意识到的更为普遍,产生的评分虚高幅度足以影响决策,而且修复方法既不复杂也不昂贵。但你必须知道从哪里找起。

让合成评估数据保持真实

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个安全模型在公开基准测试集上取得了 85.3% 的准确率。当研究人员用并非来自公开数据集的新型对抗性提示进行测试时,这个数字跌至 33.8%。该模型并未真正学会如何推理安全性,而是学会了识别评估数据分布。

这就是合成评估数据核心问题所在:当同一个模型家族既生成训练数据又生成测试用例时,通过评估意味着符合某个共同的统计先验,而非真正展示能力。这是一个看起来像质量保证的反馈循环,直到生产流量到来,数字对不上号才会暴露问题。

这种失败是结构性的,而非偶然的。修复它需要的不仅仅是增加更多合成样本。

多会话评估设计:捕捉随时间推移而恶化的 AI 功能

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的 AI 功能在上线时通过了所有评估。六周后,与其交流最频繁的用户群体的流失率翻了一倍,而你的 CSAT 仪表板却显示出一条无人能解释的平线。提示词(Prompts)没有变,模型没有更换,检索索引增长了,但没人觉得它坏了。上线时的表现第一轮(turn one)很好。真正变质的是在第 400 轮、第 17 次会话、注册三周后发生的事情。

大多数团队的评估套件无法察觉到这种失败。他们测试的是固定数据集上的单轮准确性,如果有追求的话,可能会测试单次会话中的多轮对话,然后就宣布该功能可以上线。真正重要的失败模式——即随着系统积累用户状态而质量下降——存在于评估工具从未设计去覆盖的时间维度中。在记忆研究文献中,研究人员称之为“自我退化”(self-degradation):在初始阶段之后,受记忆膨胀(memory inflation)和错误记忆累积的驱动,性能出现明显且持续的下降。生产工程师则将其称为留存用户群无声流失的原因。

提示熵预算:将输出方差作为生产环境的核心指标

· 阅读需 12 分钟
Tian Pan
Software Engineer

当你的 LLM 功能上线后,监控面板可能会追踪准确率、延迟和错误率。但几乎可以肯定,它不会追踪方差——即同一个提示每次输出差异有多大。这个盲区,正是生产环境 AI 功能悄然崩溃的地方。

方差决定了你的产品是让用户感觉可信赖还是喜怒无常。一个在评估套件中得分 88% 的功能,如果 40% 的时候返回两句话、60% 的时候输出十个段落,其对用户信任的侵蚀速度,会比一个得分 80% 但表现一致的功能快得多。只优化准确率的团队,解决的是可靠性问题的错误一半。

提示熵预算正是填补这一空白的概念:一种结构化的方法,用于衡量、预算和控制模型在相同输入下的输出分布——就像你在 SLO 框架中对待 p99 延迟或错误预算一样。