Multi-signal scoring engine: heuristic rules + evaluator rubrics + LLM-as-Judge + multi-reviewer blind panel.
improvement-learner(learner 做 6 维结构分析,discriminator 做语义评分)improvement-gate(discriminator 只打分不做决策)improvement-executor(discriminator 不修改任何文件)improvement-generator4 种模式可以独立或组合使用,从纯启发式到全信号融合逐步增加评估深度。 默认模式(Heuristic only)零成本、确定性,适合快速过滤。 加入 evaluator evidence 后,利用 task_suite 执行结果作为评分依据,更贴近实际效果。 加入 LLM Judge 后引入语义理解,但会消耗 token 且结果有随机性。 Panel 模式引入多视角盲审,捕捉单一审阅者无法发现的偏差。
ModeFlagScoringHeuristic only(default)category bonus + source refs + risk penalty+ Evaluator--use-evaluator-evidenceHeuristic 70% + evaluator 30%+ LLM Judge--llm-judge {claude,openai,mock}Heuristic 60% + LLM 40%+ Panel--panel2+ reviewers independently, cognitive label decidesAll combined--panel --llm-judge mock --use-evaluator-evidenceFull
Tradeoff: single reviewer speed vs. multi-reviewer accuracy.
之所以引入 panel 盲审而非依赖单一评分器,原因是:
问题: 为什么不直接用 LLM judge 替代所有启发式规则?Because LLM judge 有 token 成本(每个候选约 500-1000 tokens)且存在随机性。启发式规则是确定性的、零成本的,适合作为第一层过滤。组合使用时,启发式占 60% 权重、LLM 占 40%,既保证了稳定性又引入了语义理解。
当 panel 结果全是 hold 时,通常是以下原因之一:
source_refs(引用来源),导致 source_ref_bonus = 0risk_level 被标为 high,导致 risk_penalty 过大正确用法: 多审阅者盲审 + LLM 语义打分 $ python3 scripts/score.py --input candidates.json --panel --llm-judge mock --output scored.json → 输出包含: panel_reviews: [{reviewer: "structural", score: 7.5}, {reviewer: "conservative", score: 5.0}] cognitive_label: "VERIFIED" (2人同意) llm_verdict: {score: 0.78, decision: "conditional", dimensions: {clarity: 0.85, ...}}
常见误解: --panel 和 --llm-judge 互斥 → 错!两者可以同时使用。每个审阅者独立调用 LLM judge,得到独立的语义分数。 → 如果只用 --panel 不加 --llm-judge,panel 只做启发式评分,不做语义评估。
score.py 是核心入口,接收 candidates.json,输出 scored.json。
所有模式共用同一个入口,通过 flag 组合控制评分深度。
--llm-judge 支持 3 种 provider: claude(最准)、openai、mock(测试用,零成本)。
--panel 会自动创建 structural 和 conservative 两个独立审阅者。
输出的 scored.json 可直接传给 executor 或 gate 消费。
使用 --verbose 可查看每个审阅者的详细评分过程和 judge_notes。
bash
# Basic scoring (heuristic only, fastest)
python3 scripts/score.py --input candidates.json --output scored.json
# Full pipeline: panel + LLM judge
python3 scripts/score.py \
--input candidates.json --panel --llm-judge mock --output scored.json
Panel-only mode (no LLM, lower cost):
bash
# Panel blind review without LLM judge — heuristic scoring only
python3 scripts/score.py \
--input candidates.json \
--panel \
--output scored.json
LLM-judge-only mode (no panel, single reviewer):
bash
# Single reviewer + LLM semantic evaluation
python3 scripts/score.py \
--input candidates.json \
--llm-judge claude \
--use-evaluator-evidence \
--output scored.json
RequestDeliverableScoreJSON: per-candidate scores, blockers, recommendations, judge_notesPanelJSON: panel_reviews[], cognitive_label (CONSENSUS/VERIFIED/DISPUTED), aggregated_scoreLLM judgeJSON: llm_verdict with score, decision (accept/conditional/reject), 4 dimensions, confidenceCombinedAll above fields merged into a single scored candidate object
输出中的 cognitive_label 含义:
decision 字段的三态语义:accept 直接通过,conditional 需要满足附加条件(记录在 judge_notes),reject 直接拒绝。
--use-evaluator-evidence 的数据源Pipeline 中的数据流: generator → discriminator → evaluator → executor → gate