跳到主要内容

64 篇博文 含有标签「testing」

查看所有标签

让合成评估数据保持真实

· 阅读需 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)和错误记忆累积的驱动,性能出现明显且持续的下降。生产工程师则将其称为留存用户群无声流失的原因。

Agent 测试金字塔:为什么 70/20/10 的分层对 Agentic AI 行不通

· 阅读需 14 分钟
Tian Pan
Software Engineer

每一个从"我们有个聊天机器人"升级到"我们有个 Agent"的工程团队,都会撞上同一堵墙:他们的测试套件开始失去意义。

经典测试金字塔——70% 单元测试、20% 集成测试、10% 端到端测试——建立在三个基本假设之上:单元测试运行成本低、与外部系统隔离、结果确定可重复。Agentic AI 系统同时打破了这三个假设。所谓的"单元"是一次消耗 token 且每次返回不同结果的模型调用。一次端到端运行可能耗时数分钟,消耗的 API 预算足以让一位初级工程师整个迭代周期的测试都无法证明其合理性。而隔离性几乎无从实现,因为 Agent 的智能恰恰来自于与外部工具和状态的交互。

为什么你的 AI 演示总是优于最终上线表现

· 阅读需 9 分钟
Tian Pan
Software Engineer

演示非常精彩。模型流利地回答了每一个问题,总结文档时没有出现幻觉,并处理了你提出的每一个边缘情况。利益相关者印象深刻。上线日期也就此定下。

发布三周后,准确率徘徊在 60% 左右。用户感到困惑。工单堆积如山。在演示中表现出色的模型,在处理生产环境流量时却步履维艰。

这不是一个关于模型好坏的故事,而是一个几乎每个构建 LLM 功能的团队都会遇到的错配故事:你测试的输入并不是用户发送的输入。

行为契约:编写工程师真正能测试的 AI 需求

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数在 QA 阶段夭折的 AI 项目,死因并非模型不好,而是没有人在构建之前就"好"的定义达成共识。工单里的验收标准往往写着"摘要功能应生成准确、相关的摘要"——当工程师问"准确"是什么意思时,得到的答案是"看到就知道"。这不是行为需求,这是一种期许。

问题在于团队把原本用于确定性软件的需求流程照搬到了本质上具有随机性的系统上。当你为数据库查询写 assertTrue(output.equals("Paris")) 时,测试的通过与否是完全确定的。但把同样形式的断言用在 LLM 上,得到的是一个对所有有效的同义表达都失败、对所有自信的幻觉都通过的测试。单元测试在骗你,而它所依据的规格从来就不是为"生成输出分布而非单一值"的系统设计的。

集成测试的幻象:为什么模拟工具输出会隐藏智能体的真实失败模式

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的智能体通过了每一项测试。CI 流水线显示绿色。你发布了它。

一周后,一位用户报告说他们的批量导出任务悄无声息地只返回了 200 条记录,而不是 14,000 条。智能体访问了分页 API 的第一页,得到了一个干净的响应,以为没有更多内容了,然后就继续下一步了。你的模拟(Mock)一次性返回了全部 200 个条目。而真实的 API 从未告诉智能体还有另外 70 页。

这不是模型的失败。模型的推理是正确的。这是测试基础设施的失败 —— 这种现象在团队构建和测试智能体系统(agentic systems)时非常普遍。

你的 LLM 评估套件中的古德哈特定律:当优化分数破坏系统时

· 阅读需 10 分钟
Tian Pan
Software Engineer

Andrej Karpathy 直言不讳:AI 实验室正在"过拟合"Arena 排行榜。某头部实验室在公开发布前私下评估了 27 个模型变体,只发布了表现最佳的那个。研究人员估计,仅凭选择性提交就可以将排行榜分数人为提高多达 112%。所有人都视为基准真相的众包评估系统已经成为博弈目标——一旦成为目标,它就不再是有效的衡量标准了。

这就是古德哈特定律在发挥作用:当一个指标成为目标时,它就不再是好的指标。这一规律在经济学和政策领域已被充分理解了数十年。在 LLM 工程中,它正在实时摧毁评估套件,而构建这些套件的团队往往浑然不知。

AI Agent 的混沌工程:在生产环境之前注入你的 Agent 将真正面对的故障

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 Agent 在预发布环境中运行完美。它调用正确的工具,推理多步骤计划,并返回精心打磨的结果。然后生产环境来了:地理编码 API 在 7 步计划的第 3 步超时,LLM 在句子中间返回不完整的响应,而你的 Agent 自信地编造数据来填补空白。直到客户发现,没有人注意到。

LLM API 调用在生产环境中有 1-5% 的失败率——速率限制、超时、服务器错误。对于每个任务进行 10-20 次工具调用的多步骤 Agent,这意味着相当比例的任务至少会遇到一次故障。问题不在于你的 Agent 是否会遇到故障,而在于你是否曾经测试过它遇到故障时会发生什么。

LLM 系统的基于属性的测试:即便输出多变也需遵循的不变量

· 阅读需 14 分钟
Tian Pan
Software Engineer

一家金融科技公司的产品团队发布了一款基于大语言模型 (LLM) 的文档摘要生成器。他们的评估数据集包含 200 个经过人工筛选并附带人工评分的示例,质量得分达到 87%。在生产环境中,当用户上传短备忘录时,系统偶尔会返回比原始文档更长的摘要。评估数据集中没有任何篇幅少于 300 字的备忘录。而“对于摘要任务,输出长度 ≤ 输入长度”这一属性从未被测试过。直到一位客户截下了这个荒唐的界面并将其发布到网上,才有人察觉到这个问题。

这就是属性测试 (Property-Based Testing, PBT) 所填补的核心空白。评估数据集衡量的是你“想到的”测试场景中的准确性。而属性测试衡量的则是,在所有可能发生的情况中,你的系统是否始终遵守了预定义的契约。

智能体测试的模拟环境:构建代价为零的沙箱

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 Agent 在预发布环境中通过了每一项测试。然后它进入了生产环境,发送了 4,000 封电子邮件,向一名客户收取了两次费用,并删除了一条本不该触碰的记录。预发布测试没有错 —— 它们只是测试了错误的东西。预发布环境让 Agent 看起来很安全,因为所有它可能破坏的东西都以错误的方式被伪造了:Mock 得足以不崩溃,但也真实得足以让你误以为测试是有意义的。

这就是“模拟保真度陷阱”。这与普通的软件测试失败不同。对于确定性函数,镜像生产环境 Schema 和 API 的预发布环境通常就足够了。对于 Agent 来说,行为产生于推理、工具输出以及跨多步轨迹的累积状态之间的相互作用。如果在这些维度中的任何一个上与生产环境存在偏差,预发布环境都会产生对其实际行为过度自信的 Agent。

组合测试鸿沟:为什么你的智能体通过了每一项测试却在协作时失败

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的规划智能体(planner agent)在评估套件中的通过率为 94%。你的研究智能体(researcher agent)得分甚至更高。你的合成智能体(synthesizer agent)完美通过了你投喂的每一个基准测试。你将它们组合成一个流水线,部署到生产环境,然后眼睁睁地看着它产生自信的错误答案——而任何单个智能体都不可能独立生成这些错误。

这就是组合测试鸿沟(composition testing gap)——这是一个系统的盲点,即经过独立验证的智能体会以单智能体分析无法预测的方式失败。对多智能体 LLM 系统(multi-agent LLM systems)的研究表明,67% 的生产故障源于智能体之间的交互,而非单个智能体的缺陷。你测试的是原子,但交付的是分子,而分子的行为并非原子属性的简单叠加。

如何在 CI 中对 AI Agent 工作流进行集成测试,而无需完全 Mock 模型

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数构建 AI Agent 的团队在经历第一次生产事故后,都会发现同一个测试陷阱。你有两个明显的选择:在 CI 中进行实时的 API 调用(缓慢、昂贵、且具有非确定性),或者将 LLM 完全 Mock 掉(快速、廉价、但内容空洞)。这两种方法都会以不同但可预见的方式失败,而第二种方法的失败模式更糟糕,因为它是隐形的。

Mock 掉 LLM 的团队可能会跑六个月的全绿 CI,发布到生产环境后,才发现代码库中一直潜伏着一个 bug:在 8 步循环的第 6 步,Agent 处理畸形工具响应的方式有问题。那个总是返回 "Agent response here" 的 Mock 根本没有触及编排层。实际的工具分发、重试逻辑、状态累积和兜底路由代码从未被测试过。

好消息是还有第三条路。它与其说是一种单一的技术,不如说是一个由三层测试组成的架构,每一层都旨在捕获不同类别的失败,且无需承担其他方法的成本。