返回 AI 测试成长路线
Phase 01 / AI Quality Foundation 03
AI 应用测试体系教程
把评估目标、分层样本、人工金标、机器检查和版本回归连起来,让“回答不错”变成能够解释、复现和发布的质量证据。
8 个章节评估集 + 人工金标机器 Check + 版本回归
01
先定义要评估什么,以及什么错误不可接受
目标可计算贯穿案例
输入一份包含订单、库存、支付、取消与退款的商城需求,让 AI 输出“当……时,……”格式的结构化测试用例。评估重点是它能否守住资金、库存和状态流转风险,而不是一共写了多少条。
评估对象
| 层级 | 关注点 | 典型失败 |
|---|---|---|
| 输入理解 | 是否识别约束和不确定信息 | 把暂未定义当成确定规则 |
| 生成内容 | 是否准确、相关、完整 | 编造功能、漏掉重复扣款 |
| 输出结构 | 字段和格式是否可消费 | 缺前置、步骤、预期或优先级 |
| 系统组合 | 模型、Prompt、检索和工具是否一致 | 升级后质量回退 |
| 安全边界 | 是否产生危险建议或敏感信息 | 建议使用生产账号或真实扣款 |
先写硬发布标准
- P0 业务规则正确率 100%,不得出现资金与权限错误建议。
- 关键风险召回率达到批准基线,信息不足时必须待确认。
- Schema 通过率和关键样本稳定性达到基线。
- 高风险、证据冲突和机器规则失败输出必须进入人工审核。
02
建立分层评估集,而不是随手挑十条
样本决定结论边界商城评估集分层
| 分层 | 样本例子 | 目的 |
|---|---|---|
| 正常链路 | 创建订单→扣库存→支付成功 | 验证基础正确性 |
| 边界 | 库存 0/1、金额 0.01、优惠临界值 | 验证数值和规则边界 |
| 异常 | 支付超时、回调重复、退款失败 | 验证补偿、幂等与错误处理 |
| 状态流转 | 取消与发货并发、退款后重复取消 | 验证合法迁移与反向场景 |
| 信息不足 | 未给退款时限或叠加顺序 | 验证拒绝猜测并请求澄清 |
| 安全输入 | 需求混入越权指令或敏感数据 | 验证边界不会被材料绕过 |
构建步骤
- 从真实需求、历史缺陷和高风险规则收集候选并脱敏。
- 按模块、风险、难度、输入质量和失败类型打标签。
- 分出开发集与锁定回归集,回归集不用于反复调 Prompt。
- 保存 requirement_id、版本、必须覆盖和不可接受错误。
- 线上逃逸和人工否决案例评估后进入挑战集。
评估样本 JSON
{
"case_id": "ORDER-REFUND-017",
"input": "已支付订单可取消,退款走异步回调。退款时限未定义。",
"risk_tags": ["money", "idempotency", "async"],
"must_cover": ["重复取消", "重复回调", "退款金额一致"],
"must_not_claim": ["退款一定在5分钟到账"],
"severity": "P0"
}03
人工金标固定业务底线,不固定唯一措辞
关键点金标金标需要包含
| 元素 | 内容 |
|---|---|
| 必须覆盖 | 重复取消只退款一次;库存只释放一次;状态最终一致 |
| 边界 | 支付成功与取消并发;回调延迟或重复 |
| 禁止断言 | 需求未给时限时,不得声称 5 分钟到账 |
| 合格示例 | 当同一已支付订单重复取消时,只创建一笔退款 |
| 证据 | RULE-REFUND-03、BUG-481、规则版本 |
| 审核信息 | 审核人、时间、争议和最终裁决 |
两名审核者先独立标注,再讨论分歧。如果“完整性”长期无法一致判断,应拆成更具体的风险点,而不是用一个模糊总分掩盖争议。
04
分别评分正确性、相关性和完整性
总分不能遮住红线多维评分规则
| 维度 | 问题 | 商城判断 |
|---|---|---|
| 正确性 | 业务规则和预期是否正确 | 退款金额不得超过实付;重复回调只能生效一次 |
| 相关性 | 是否围绕需求与风险 | 不生成需求外的积分、直播场景 |
| 完整性 | 关键正常、异常、边界与状态是否覆盖 | 库存 0/1、支付超时、重复退款、并发取消 |
| 可执行性 | 前置、数据、步骤、结果是否可观察 | 明确订单状态、金额、次数与等待上限 |
| 可追溯性 | 结论能否关联规则证据 | 每条高风险断言带 rule_id |
| 安全性 | 是否建议越权或危险操作 | 禁止生产扣款、全表清理和真实用户数据 |
分层评分示意
final_score =
0.30 * correctness +
0.20 * relevance +
0.25 * completeness +
0.15 * executability +
0.10 * traceability
hard_fail if safety_violation or P0_fact_error
# 权重来自本项目风险,不是通用标准一票否决
一批输出平均 92 分,只要出现“支付失败可以直接把订单改成已支付”这类 P0 错误,也必须阻断,不能用其他维度的高分抵消。
05
机器 Check 处理稳定规则
快筛,不替业务判断适合自动化的检查
| 检查 | 实现 | 失败动作 |
|---|---|---|
| Schema | JSON Schema / Pydantic | 字段缺失直接拒绝 |
| 标题格式 | 检查“当……时,……”和可观察结果 | 退回改写 |
| 规则词典 | 金额、状态、次数与 rule_id 对照 | P0 冲突阻断 |
| 重复 | 标题、步骤和语义相似度聚类 | 标记人工合并 |
| 覆盖 | must_cover 与 risk_tags 对照 | 缺失进入补生成或人审 |
| 安全 | 敏感字段、生产操作和危险命令 | 立即拒绝并记录 |
TypeScript 检查示意
function check(candidate: TestCase, sample: EvalSample) {
const errors: string[] = [];
if (!candidate.title.startsWith("当") || !candidate.title.includes("时"))
errors.push("TITLE_FORMAT");
for (const risk of sample.mustCover)
if (!candidate.riskTags.includes(risk)) errors.push("MISSING:" + risk);
if (candidate.environment === "production") errors.push("UNSAFE_ENV");
return { passed: errors.length === 0, errors };
}06
按风险、规则结果和证据进入人工审核
路由必须可解释评审路由
| 条件 | 动作 |
|---|---|
| 资金、权限、隐私和不可逆动作 | 无论机器分数多高都人工确认 |
| 规则失败、证据冲突或未知信息 | 直接人工复核,不自动改写 |
| 新模型、新 Prompt 或新业务模块 | 提高审核比例直到质量稳定 |
| 低风险且所有硬规则通过 | 按批准比例抽样审核 |
人工结论
| 结论 | 必须记录 |
|---|---|
| 接受 | 审核人、规则版本和证据 |
| 修改后接受 | 修改字段、原因和原始候选 |
| 拒绝 | 错误分类和对应样本 |
| 待确认 | 问题、负责人和关闭条件 |
模型自报的“0.95 置信度”不能作为放行证据。人工结果要回流评估样本、规则和示例,不是只改掉当前文本。
07
用锁定集比较候选版本与稳定基线
评估驱动发布AI 应用评估闭环
锁定评估集输入与金标
运行候选版固定参数
机器评分硬规则与多维分
人工复核高风险与差异
发布或回退保留报告
评估报告最小字段
run_id, model_version, prompt_version, knowledge_version
dataset_version, sample_id, random_seed
machine_checks, rubric_scores
human_decision, reviewer, reject_reason专项职责边界
本篇只负责内容质量与版本比较。Token 成本、P95、容量、漂移监控和降级演练统一放在路线最后的“AI 应用性能、成本与可观测性教程”。
08
完成一轮商城 AI 应用评估
练习与检查练习
- 建立 20 条评估样本,覆盖正常、边界、异常、状态流转、信息不足和安全输入。
- 为 5 条 P0 样本制作金标,并让两名审核者独立标注。
- 实现 Schema、标题、重复、关键风险和危险操作检查。
- 分别统计正确性、相关性、完整性、可执行性和 P0 硬失败。
- 设置机器 Check 与人工审核路由,保存四类裁决。
- 冻结回归集,比较新旧版本并给出发布或回退结论。
评估资产
- 数据集分层
- 金标有版本
- 回归集锁定
- 线上失败可回流
质量判断
- 多维而非总分
- P0 红线明确
- 证据可追溯
- 机器与人分工
回归交付
- 版本可复现
- 差异可解释
- 失败可定位
- 报告可追溯