测试 AI 应用,并不是把传统断言全部换成“让另一个模型打分”。一个基于大模型的产品仍然包含大量确定性软件:鉴权、接口、数据库、队列、权限、计费、工具执行和前端交互。这些部分依旧应该用单元测试、契约测试、集成测试和端到端测试保证。
真正新增的工作,是如何验证带有概率性的模型行为,以及模型、检索、工具和业务流程组合后是否仍然可控。
先按系统层次拆开
| 层次 | 主要风险 | 更合适的验证方式 |
|---|---|---|
| 普通应用代码 | 逻辑错误、权限、并发、数据一致性 | 单元、契约、集成、性能与安全测试 |
| 模型调用 | 指令遵循、格式、内容质量、成本 | 固定评测集、结构化输出校验、人工抽检 |
| RAG | 召回遗漏、错误引用、过期知识 | 检索指标、引用核对、答案忠实度 |
| 工具调用 | 选错工具、参数错误、重复执行、越权 | schema 校验、mock、轨迹回放、幂等与授权测试 |
| 工作流 / Agent | 路由、循环、停止条件、失败恢复 | 状态机测试、trace 评测、故障注入 |
| 线上系统 | 分布漂移、长尾、安全和成本失控 | 采样审计、告警、反馈回流、灰度和回滚 |
分层的意义在于让失败可定位。如果只保留一个“总体得分”,检索、模型、工具和业务规则中的问题会混在一起。
评测集比提示词更值得先建设
一个可用的评测集至少应包含:
- 高频正常场景;
- 业务关键边界;
- 历史线上失败;
- 对抗性和提示注入样例;
- 权限不足、工具超时、空结果等系统故障;
- 明确的期望行为和不可接受行为。
样例数量不是首要目标。先覆盖风险分层,再逐步扩充。每条样例最好记录来源、版本、适用范围、标注人和变更原因,避免业务规则更新后仍拿旧答案做回归。
评测数据应与训练、调优数据隔离。含有用户或生产信息的样例要先脱敏,并遵守数据保留与访问控制要求。
不同任务需要不同指标
分类与抽取
适合使用准确率、精确率、召回率、F1、字段级 exact match 和 schema 校验。能用确定性程序判断,就不要优先使用模型裁判。
RAG 问答
至少分开看:
- 检索是否找到了必要证据;
- 返回的证据是否相关;
- 答案是否被证据支持;
- 引用能否定位到真实来源;
- 无证据时是否拒答或表达不确定。
只看“答案读起来不错”会掩盖检索失败和无依据生成。
工具调用与 Agent
关注:
- 工具选择是否正确;
- 参数是否完整、精确;
- 是否遵守读写权限;
- 是否出现重复调用或无限循环;
- 工具失败后能否安全停止、重试或降级;
- 最终任务是否完成,而不只是输出一段合理文字。
轨迹正确和最终结果正确都要测。有时结果碰巧正确,但中间调用已经越权或产生了不必要副作用。
LLM-as-a-Judge 只能在校准后使用
模型裁判适合难以用规则表达的语义质量,例如完整性、相关性、语气和多维评分。但它本身也有偏差和随机性。
使用时至少做到:
- 先写清评分 rubric,并给出不同分数的样例;
- 优先做成分类、成对比较或按明确标准评分;
- 用领域专家标注集测量裁判与人的一致性;
- 把严重错误单独做硬规则,不让平均分掩盖;
- 定期抽样人工复核,特别是模型或提示词变更后;
- 保存裁判模型、提示词和参数版本。
“裁判模型和被测模型不同”可以减少部分同源偏差,但不能替代校准。
发布前后的测试不是一回事
离线评测回答的是:“在已知样例上,新版本是否退化?”
线上监控回答的是:“真实流量里是否出现了评测集没有覆盖的新问题?”
上线后值得观察:
- 任务完成率与人工接管率;
- 拒答、重试和工具失败分布;
- 用户负反馈及其对应 trace;
- 延迟、token、调用次数和单任务成本;
- 安全策略触发与越权尝试;
- 不同用户群、语言和场景的质量差异。
生产坏样例经过脱敏、去重和人工确认后,应进入回归集。评测集如果长期不吸收真实失败,很快会变成只证明旧版本没问题的静态题库。
安全测试要覆盖整个系统
AI 应用常见风险不只包括“越狱”:
- 用户输入或检索文档中的提示注入;
- 模型泄露系统提示词、密钥或隐私数据;
- 工具参数被构造成越权请求;
- 外部内容污染知识库;
- 模型输出被下游当作代码、SQL 或 HTML 直接执行;
- 过度授权的 Agent 在错误判断后产生真实副作用。
防护应落在权限、隔离、输入输出校验、最小授权、人工确认和审计日志上,而不是期待一段系统提示词解决所有问题。
测试工程师的工作发生了什么变化
传统能力没有失效,但需要补充三类能力:
- 评测设计:把模糊的“回答要好”拆成可标注、可回归的标准;
- 数据分析:理解抽样、置信区间、分布变化和指标间的权衡;
- 系统治理:能沿 trace 判断问题来自模型、检索、工具、数据还是业务流程。
测试工程师仍然要做风险判断:哪些失败必须阻断发布,哪些可以灰度观察,哪些需要产品重新定义需求。AI 能帮助生成样例和整理证据,但很难替团队承担这个责任。