Prompt Regression 用于将两个提示词进行头对头比较,并以统计严谨性判断候选版本(candidate)在每项评估维度上更好、更差还是持平。
适用时机:修改了系统提示并想验证是否真的更好;迭代 RAG 答案模板;优化智能体的分步指令;需要用数据支持提示词变更决策。
工作流程要求为每个检查项创建任务并按顺序完成:加载并分析提示词(对比 baseline 与 candidate 的差异);根据提示词变化与任务类型推导对比维度;为每个维度选择评分器(pairwise、judge 或 rule);运行位置去偏比较(交换聚合以消除顺序偏差);计算统计量(每个维度的胜率与 bootstrap 95% 置信区间);呈现结果(含置信区间的逐维度判定)。
快速路径:运行内置脚本,无需手写胜率与 bootstrap 数学(交换聚合与置信区间容易写错):
python scripts/pairwise.py --comparisons comparisons.jsonl --candidate candidate --baseline baseline
每行比较记录为 {"id","model_a","model_b","score","dimension"?},score >= 0.5 表示 model_a 获胜。每个查询输出两行并交换 A/B 以去偏。脚本报告逐维度的候选/基线/平局率、bootstrap 95% 置信区间以及判定(BETTER / WORSE / TIED / INSUFFICIENT_EVIDENCE / INCONCLUSIVE;仅当 better 时退出码为 0)。可用 --self-test 验证。
步骤说明如何推导维度并生成比较(可用 OpenJudge 或任意评判器),内联代码片段是脚本背后的参考实现。
第一步:加载与分析提示词。读取 baseline 与 candidate 提示词,识别任务类型(chatbot、RAG 生成、代码审查、翻译、摘要、智能体指令或其他)、变化内容(新增约束、语气变化、新示例、输出格式不同、指令扩写或缩短)以及变更意图(用户想解决什么问题)。
第二步:推导对比维度。根据任务类型与变化内容推导 3-5 个对比维度。不同任务类型有维度模板:聊天/对话类包括答案相关性、语气适当性、事实准确性、简洁性、指令遵循;RAG 生成包括忠实性、引用准确性、完整性、无幻觉;代码审查/生成包括缺陷检测、误报率、可操作性、代码风格;智能体指令包括工具选择、步骤效率、错误恢复、输出格式。每个维度需要 id(slug)、一句话描述和评分器类型。
第三步:选择评分器。优先级:能用规则检查则用 FunctionGrader 或 StringMatchGrader(免费、确定性,如输出长度、关键词存在、JSON 有效性);有参考答案则与参考答案做 pairwise;主观质量无参考答案则做 pairwise A/B 比较;需要单输出判定则用 judge(每个输出二分类通过/失败)。
第四步:运行位置去偏比较。LLM 评判器存在位置偏差,先展示的回答获胜概率高 5-15%。交换聚合可消除该偏差:每次比较以交换位置运行两次,只保留一致的胜出。示例代码使用 openjudge.graders.llm_grader.LLMGrader、openjudge.graders.schema.GraderMode、openjudge.runner.grading_runner.GradingRunner 与 openjudge.analyzer.pairwise_analyzer.PairwiseAnalyzer 构建带交换位置的数据集并分析胜率。
第五步:计算统计量。每个维度报告候选胜率、基线胜率、平局率、bootstrap 95% 置信区间与判定(better/worse/tied/inconclusive)。PairwiseAnalyzer.analyze 将 score >= 0.5 视为 model_a 获胜,使用行的 metadata.model_a / metadata.model_b;需从数据集与结果推导每次比较的获胜者列表,再对该列表做 bootstrap,不要索引 PairwiseAnalysisResult 对象(它没有逐样本行)。示例代码给出 per_comparison_winners 与 bootstrap_win_rate 函数,并根据置信区间给出判定逻辑(ci_low > 0.5 为 BETTER;ci_high < 0.5 为 WORSE;区间窄且跨 0.5 为 TIED;区间过宽为 INCONCLUSIVE)。注意交换聚合下每个查询产生 2 行比较,按行 bootstrap 是简单做法;更紧的估计可按查询 bootstrap 并平均每个查询的 2 个交换行。
第六步:呈现结果。示例报告列出维度、候选/基线/平局百分比、95% 置信区间与判定,并给出总结与候选更差维度的失败案例。
常见错误:不做位置交换(LLM 评判器位置偏差 5-15%,会导致系统性偏差);样本少于 10 个(n=10 时 bootstrap 置信区间半宽 ±15% 以上,n=5 时 ±25% 以上,结果只是噪声,最少 10 个,建议 30 个以上);只做单一“整体”比较而不分维度(会掩盖某些维度提升、某些维度下降);把平局当作“无差异”(真实平局与数据不足在没有置信区间时看起来一样,必须报告置信区间);不固定模型版本(baseline 与 candidate 若在不同模型版本上运行,模型漂移会污染提示词比较,须同一模型、同一版本、同一温度)。
后续技能:03-align-human 用人类偏好校准 pairwise 评判器;02-metric-design 将已验证维度转为长期评分器;04-eval-report 将提示词比较结果纳入综合报告。