SuperAPI AI 工具集

ai-prompt-regression-testing

测试与质量

查看项目

更新于 10-25 02:03

技能介绍

用途

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、中继器、签名密钥或区块链部署。真实集成可能有其自身的依赖。
  • 精确文本匹配不适用于许多有效的开放式输出;嵌入和评判器存在盲点,不能替代强制性的行为检查。
  • 黄金集必须经过审查/版本化;仅仅命名它并不会创建它。
  • 此条目不包含提供方适配器、评判器、数据集或可运行套件。使用项目提供的材料,并说明实际执行了什么。
  • 有限测试集无法证明未来的提示词行为或不存在注入。