目标:针对每道prompt,通过分析2个模型(exp/base)各7个变量,找出Workflow哪个环节/节点出了问题,最终输出一份标准化归因备注。
每个模型有7个变量:
needs_human_review、review_reasons、review_rubric、review_claim_judgment、review_label_mapping、review_score_gate、judge_summary
一、分析顺序(7个变量按此顺序看)
步骤 | 看哪个变量 | 一句话目的 |
|---|---|---|
1 |
| 先看总开关:True=有技术问题,False=正常产出 |
2 |
| 如果有技术问题,定位是哪个节点出了问题 |
3 |
| 检查Rubric本身设计有没有问题 |
4 |
| 逐条核对模型对每个claim打的分数对不对 |
5 |
| 核对标签选得对不对、档位准不准 |
6 |
| 确认最终分数怎么算出来的、哪步压了分 |
7 |
| 如果前面6个不够用,看完整汇总JSON(前6个变量的超集) |
两个模型都要看:先看exp模型的7个变量,再看base模型的7个变量(带
_2后缀),分开归因。
二、详细执行步骤
前置准备
每道题你会拿到以下数据:
用户问题(Prompt)
exp-answer + 人评分/标签/备注
base-answer + 人评分/标签/备注
exp模型7个变量 + base模型7个变量(带
_2后缀)
Step 0:通读题目和两个回答
先读Prompt和两个模型的回答,自己心里有个判断:这两个回答质量怎么样?哪个好?各自有什么问题?这样后面看变量时心里有底。
Step 1:看 needs_human_review(总开关)
exp模型看 needs_human_review,base模型看 needs_human_review_2
值 | 含义 | 下一步 |
|---|---|---|
| 正常产出,无技术异常 | → Step 3 |
| 有技术问题,需要定位 | → Step 2 |
Step 2:看 review_reasons(定位技术问题)
exp模型看 review_reasons,base模型看 review_reasons_2
如果 needs_human_review = TRUE,看 review_reasons 里的内容,对照下表定位问题节点:
review_reasons里的文本 | 问题出在哪个节点 | 机评分可不可信 | 你该做什么 |
|---|---|---|---|
| ③裁判模型 + ⑤修复模型都失败了 | 不可信 | 从头人工评,标T层 |
| ⑧人标校准节点没产出标签 | 分数可信,标签不可信 | 自己补标签,标L层 |
| ①输入合同节点 | 可能不可信 | 先看Rubric对不对,标R层 |
| ⑧校准失败但⑨兜底成功 | 分数可信,标签是兜底合成的 | 标签仅供参考,标T层 |
| ⑧校准模型编了不存在的标签 | 标签不可信 | 自己补标签,标L层 |
| ⑧校准模型档位错误 | 标签不可信 | 自己定档位,标L层 |
| ⑧校准模型 + ①输入合同 | 标签不可信 | 该标签已拦截,标C层 |
| ⑧校准模型 + ①输入合同 | 标签不可信 | 该标签已拦截,标C层 |
review_reasons为[](空列表)= 没有技术异常,正常产出。
如果两个模型都没技术问题 → 进入 Step 3
Step 3:看 review_rubric(R层:Rubric质量)
exp模型看 review_rubric,base模型看 review_rubric_2
解析这个JSON,看两个字段:
rubric_quality:ok= 没问题,suspected_issue= 有问题issues:问题列表,每条有claim_id、issue_type、reason
issue_type含义速查:
issue_type | 含义 | 举例 |
|---|---|---|
| 考点重复 | Claim1和Claim4检查的是同一个内容 |
| 权重失衡 | 必答点权重和重要点权重差不多 |
| 考点过细 | 要求精确到"5~10分钟"才给满分 |
| 漏主需 | Rubric没覆盖用户核心需求 |
| 无关考点 | 考了跟问题无关的内容 |
| 锚点模糊 | 0/1/2分标准不清晰 |
你需要判断:
如果
rubric_quality = suspected_issue,这个问题是否导致了机评偏差?比如:Rubric说claim过细,模型按过细的标准扣了分,人评认为不该扣 → 分差来自R层
Step 4:看 review_claim_judgment(J层:逐claim裁判)
exp模型看 review_claim_judgment,base模型看 review_claim_judgment_2
解析这个JSON数组,逐条核对:
每条claim有:
claim_id → 考点编号
claim → 考点文本
importance → 必答点/重要点
weight → 权重
claim_score → 模型打的分(0/1/2)
failure_type → pass/missing/incorrect/contradicted/irrelevant/not_applicable
evidence → 模型引用的回答原文
reason → 模型打这个分的理由
confidence → high/medium/low核对方法:
重点看
claim_score不是2的条目 → 这是模型认为回答有问题的地方看模型的
evidence和reason,判断打分对不对对比你作为人评的判断:这条claim应该打几分?
如果模型给了2分但你认为该给0分 → J层分歧(裁判偏松)
如果模型给了0分但你认为该给2分 → J层分歧(裁判偏严)
failure_type核对要点:
failure_type | 含义 | 常见错误 |
|---|---|---|
| 满分通过 | 模型可能对有错误的回答给了pass(偏松) |
| 没写 | 模型可能把"写了但错了"标成missing(应该是incorrect) |
| 写错了 | 正确标注 |
| 前后矛盾 | 模型可能漏标了矛盾 |
| 答非所问 | 模型可能把部分相关当成irrelevant(偏严) |
Step 5:看 review_label_mapping(L层:标签选择)
exp模型看 review_label_mapping,base模型看 review_label_mapping_2
解析这个JSON数组:
每个标签有:
claim_id → 标签来自哪个claim
base_label → 标签名(如"主需真实性")
tier → 档位(0/1/2/3)
label_with_level → 完整标签(如"主需真实性-1")
evidence → 标签依据
reason → 为什么选这个标签
confidence → 置信度
is_non_score_affecting → 是否不影响总分的轻微标签核对方法:
空列表
[]+ final_score=3 → 正常(无问题无标签)空列表
[]+ final_score<3 → ⑧校准节点失败(已在Step 2定位)有标签 → 逐个对比人评标签:
对比结果 | 归因 | 说明 |
|---|---|---|
标签相同、档位相同 | L层无问题 | 继续看Step 6 |
标签相同、档位不同 | L层-档位不准 | 模型对严重程度判断有偏差 |
标签不同(机评选A人评选B) | L层-标签选错 | 看reason和evidence,判断谁对 |
机评标签比人评多 | L层-标签过度映射 | 模型可能把小问题放大了 |
机评标签比人评少 | L层-标签遗漏 | 模型可能漏判了某个问题 |
常见标签选错模式:
机评选的 | 人评选的 | 错误原因 |
|---|---|---|
信息缺失 | 主需真实性 | 把"说错了"标成"没写"(经典错误) |
主需真实性 | 次需真实性 | 把次需错误升成了主需 |
内容价值 | 主需真实性 | 该归到具体标签却用了兜底标签 |
信息缺失 | 丰富度 | 维度不够被标成了信息缺失 |
Step 6:看 review_score_gate(S层:分数计算)
exp模型看 review_score_gate,base模型看 review_score_gate_2
解析这个JSON,按顺序读分数链路:
claim_score_100 ← claim加权得分(0-100分制)
↓ 阈值映射
claim_mapped_score ← 映射到0-3(≥86→3, ≥65→2, ≥40→1, else→0)
↓
calibration_proposed_score ← 校准模型建议的总分
↓ 三取最小
required_claim_cap ← 必答点封顶分
minimum_effective_label_tier ← 标签档位上限
↓
final_score ← 最终分 = min(三者)
cap_reasons ← 封顶原因说明判断方法:
如果
final_score = calibration_proposed_score→ 没被压分,校准建议就是最终分如果
final_score < calibration_proposed_score→ 被硬约束压了:required_claim_cap < proposed→ 必答点封顶(回Step 4查哪个必答点0分了)minimum_effective_label_tier < proposed→ 标签档位压制(回Step 5查标签档位)
看人评分 vs 机评分的分差来自哪一步:
人评和
claim_mapped_score差距大 → J层问题(claim分数不对)人评和
calibration_proposed_score差距大 → L层问题(标签/建议分不对)人评和
final_score差距大但前两者都对 → S层问题(硬约束过严或过松)
Step 7:看 judge_summary(完整汇总,按需查看)
exp模型看 judge_summary,base模型看 judge_summary_2
这个变量是前面6个变量的超集(全部信息打包在一起),正常情况下不需要看。只有在前面6个变量信息不够用时(比如需要看 production_export 确认最终输出的分值/标签/备注),才解析这个JSON。
三、归因层级判定
完成Step 1-6后,填写归因表:
归因层 | 代号 | 命中条件 | 影响程度 |
|---|---|---|---|
Rubric设计 | R | review_rubric.rubric_quality = suspected_issue | 考点本身不合理导致分差 |
逐Claim判断 | J | review_claim_judgment中有claim分数你不同意 | 裁判标准偏松/偏严 |
标签选择 | L | review_label_mapping的标签或档位你不同意 | 标签选错/档位不准 |
分数约束 | S | review_score_gate的硬约束压制不合理 | 分数被压太多/压太少 |
非分值告警 | N | review_reasons有格式类告警 | 非核心问题但需记录 |
上下文门控 | C | review_reasons有上下文门控告警 | 无多轮/多模但输出了对应标签 |
技术异常 | T | needs_human_review=True | 节点运行失败,结果不可信 |
一道题可以有多个归因层,分主归因和次归因。
四、备注格式可以参考
每道题分析完后,按以下格式填写备注(两个模型分开写):
【题目】{用户问题}
===== exp模型 =====
机评分:{exp机评结论} 人评分:{exp-得分} 分差:{机评-人评}
机评标签:{exp-标签}
人评标签:{exp机评结论_2}
【主归因】{R/J/L/S/N/C/T}层 - {一句话说明}
【次归因】{R/J/L/S/N/C/T}层 - {一句话说明}(如无次归因写"无")
【R层】Rubric质量:{ok/suspected_issue};issue_type:{具体问题};是否影响分差:{是/否}
【J层】分歧claim:{claim_id列表};模型给的分数:{x分};你认为该给:{x分};分歧原因:{一句话}
【L层】标签差异:{机评标签 vs 人评标签};差异类型:{标签选错/档位不准/标签遗漏/标签过度/无差异}
【S层】claim_score_100={x} → claim_mapped={x} → proposed={x} → cap={x} → label_cap={x} → final={x};分差来源:{哪一步}
【T层】needs_review={True/False};review_reasons={具体内容或"空"}
【修改建议】{如果让你改这个Workflow,你会改哪个节点/规则?}
===== base模型 =====
机评分:{base机评结论} 人评分:{base-得分} 分差:{机评-人评}
机评标签:{base-标签}
人评标签:{base机评结论_2}
【主归因】{R/J/L/S/N/C/T}层 - {一句话说明}
【次归因】{R/J/L/S/N/C/T}层 - {一句话说明}(如无次归因写"无")
【R层】Rubric质量:{ok/suspected_issue};issue_type:{具体问题};是否影响分差:{是/否}
【J层】分歧claim:{claim_id列表};模型给的分数:{x分};你认为该给:{x分};分歧原因:{一句话}
【L层】标签差异:{机评标签 vs 人评标签};差异类型:{标签选错/档位不准/标签遗漏/标签过度/无差异}
【S层】claim_score_100={x} → claim_mapped={x} → proposed={x} → cap={x} → label_cap={x} → final={x};分差来源:{哪一步}
【T层】needs_review={True/False};review_reasons={具体内容或"空"}
【修改建议】{如果让你改这个Workflow,你会改哪个节点/规则?}五、示例(用第1题"吸烟后测量血压"演示)
【题目】吸烟后测量血压突然升高是怎么回事?
===== exp模型 =====
机评分:3 人评分:3 分差:0
机评标签:(空)
人评标签:(空)
【主归因】无(机评人评一致)
【次归因】无
【R层】Rubric质量:suspected_issue;issue_type:duplicate(Claim1与Claim4重复)+importance_mismatch(必答点权重偏低);是否影响分差:否(本题未触发分差)
【J层】分歧claim:无(9条claim全部2分,与人评一致)
【L层】标签差异:机评无标签,人评无标签;差异类型:无差异(3分无问题,标签为空正确)
【S层】claim_score_100=100 → claim_mapped=3 → proposed=3 → cap=3 → label_cap=3 → final=3;分差来源:无分差
【T层】needs_review=False;review_reasons=空
【修改建议】Rubric中Claim1(解释原因/机制)与Claim4(尼古丁机制)内容重复,建议合并或区分。必答点权重(0.10)与重要点(0.07)差距过小,建议调大必答点权重。
===== base模型 =====
机评分:3 人评分:3 分差:0
机评标签:(空)
人评标签:(空)
【主归因】无(机评人评一致)
【次归因】R层 - Rubric诊断claim8过细,但未影响本题分差
【R层】Rubric质量:suspected_issue;issue_type:over_specific(claim8要求精确到"5~10分钟"过于苛刻);是否影响分差:否(base模型碰巧答了5~10分钟,但换一个回答可能就误判)
【J层】分歧claim:无(9条claim全部2分,与人评一致)
【L层】标签差异:无;差异类型:无差异
【S层】claim_score_100=100 → claim_mapped=3 → proposed=3 → cap=3 → label_cap=3 → final=3;分差来源:无分差
【T层】needs_review=False;review_reasons=空
【修改建议】claim8(测血压前静息要求)对"怎么回事"类机制问题过于细化,建议降为附加点或放宽锚点标准。