用途
AI Prompt Regression Testing 用于在固定评估集上,将提示词改动与已观测基线进行比较。它适合以下场景:检测结构化输出模式(schema)、事实性、拒答行为、工具选择或任务完成度方面的回归;在结果存在噪声、缺失或矛盾时,记录一个可复核的决策。
主要能力
该技能围绕一套回归测试工作流展开,核心能力包括:
- 定义任务、代表性用例和禁止出现的结果,使用合成数据或经批准/脱敏的数据,并在运行前冻结用例 ID 与数据集修订版本。
- 记录基线/候选提示词摘要、可用的确切模型/版本、推理设置、工具版本和评估环境,避免硬编码旧的模型系列选项或在比较之间静默更换模型。
- 预先声明检查项与验收规则:对结构化输出使用确定性的模式/字段检查,对工具使用行为检查,对开放文本使用明确的人工/评分标准。相似度不能证明事实或代码正确性。
- 在相同权限与预算下运行匹配的基线/候选用例,记录延迟/成本,并在变异性重要时重复运行。超时、缺失输出或评判器错误属于不完整,而非通过或零成本结果。
- 将评判器输出视为带有局限性的证据:在可行时进行盲测/随机化呈现,对照人工标注示例进行校准,并记录评判器身份/评分标准。不要要求模型验证私有推理,也不要将评判器的置信度当作客观正确性度量。
- 逐用例审查差异,报告分母、失败和不确定性。即使总体相似度提升,也必须让强制性的安全/模式失败保持可见。使用预先声明的规则,而非结果出来后才选择的阈值。
- 将脱敏报告和确切产物存储在授权位置,针对所述数据集决定保留/修订/拒绝;部署是单独的步骤。
回归登记表
该技能定义了回归登记表的字段:
| 字段 | 类型 | 示例/含义 |
|---|---|---|
| case_id | string | PTEST-001;文本 ID,不是 SERIAL |
| dataset_revision | immutable reference | 确切的用例清单、预期检查和标签 |
| prompt_revision | string | 基线/候选摘要 |
| model_runtime | string | 可用的确切 ID/版本及设置 |
| check | string | 必需的 JSON 字段或经批准的评分标准 |
| result | enum | pass / fail / incomplete |
| evidence | reference | 脱敏的实际输出、工具轨迹或观测到的检查 |
| judge_configuration | optional object | 确切的评判器 ID/评分标准/版本及校准限制 |
| latency_ms | nonnegative number or null | 未观测到则为 null;绝不编造 |
| cost | amount/currency or null | 实际计费依据;未知保持未知 |
| run_revision | immutable reference | 将报告绑定到实际运行 |
ID 和状态必须在 SQL/JSON/CSV 表示中保持一致。不要将私有提示词、用户消息或令牌存储在公共电子表格或 Notion 登记表中。
使用方式
该技能提供了一套工作流步骤(定义任务与用例、记录环境、预先声明检查、运行匹配用例、处理评判器输出、逐用例审查、存储报告),以及一个回归登记表结构。它还附带一个 Python 3 辅助函数示例,用于汇总已复核的用例状态:
def summarize_regression(results, expected_case_ids):
if not isinstance(expected_case_ids, list) or not expected_case_ids:
return {"status": "incomplete", "reason": "missing case inventory"}
if any(not isinstance(case, str) or not case for case in expected_case_ids):
return {"status": "incomplete", "reason": "invalid case IDs"}
if len(set(expected_case_ids)) != len(expected_case_ids):
return {"status": "incomplete", "reason": "duplicate expected case IDs"}
if not isinstance(results, list) or any(not isinstance(row, dict) for row in results):
return {"status": "incomplete", "reason": "invalid results"}
by_id = {}
for row in results:
case = row.get("case_id")
if not isinstance(case, str) or case not in expected_case_ids or case in by_id:
return {"status": "incomplete", "reason": "unexpected or duplicate result"}
if row.get("result") not in ("pass", "fail", "incomplete"):
return {"status": "incomplete", "reason": "unknown result"}
by_id[case] = row["result"]
failed_cases = [case for case, result in by_id.items() if result == "fail"]
if set(by_id) != set(expected_case_ids) or "incomplete" in by_id.values():
return {"status": "incomplete", "reason": "missing or incomplete case",
"failed_cases": failed_cases, "evaluated": len(by_id)}
return {"status": "regression" if failed_cases else "checks-passed",
"failed_cases": failed_cases, "evaluated": len(by_id)}
print(summarize_regression(
[{"case_id": "PTEST-001", "result": "pass"}],
["PTEST-001", "PTEST-002"],
))
预期输出:incomplete,原因为 missing or incomplete case。对于所有观测到的 pass 状态,输出为 checks-passed,意味着仅那些记录的检查通过;它不是发布或一般质量证书。
适用场景
- 在固定评估集上比较提示词改动与已观测基线。
- 检测结构化输出模式、事实性、拒答行为、工具选择或任务完成度的回归。
- 在结果存在噪声、缺失或矛盾时记录可复核的决策。
限制
- 此通用提示词工作流不需要 RPC、中继器、签名密钥或区块链部署。真实集成可能有其自身的依赖。
- 精确文本匹配不适用于许多有效的开放式输出;嵌入和评判器存在盲点,不能替代强制性的行为检查。
- 黄金集必须经过审查/版本化;仅仅命名它并不会创建它。
- 此条目不包含提供方适配器、评判器、数据集或可运行套件。使用项目提供的材料,并说明实际执行了什么。
- 有限测试集无法证明未来的提示词行为或不存在注入。