复合评分(Composite Scoring)
一句话定义:把一个宽泛的判断拆成多个互相独立的原子维度,每个维度各自打分,再用代码按你掌握的权重(Weight)合成一个总分。 分不是模型给的,是代码算的;模型只负责把每个维度看清楚。
1. 官方定义
“Oftentimes we want to rank a set of items based on several criteria at once. Composite scoring is an easy way to think about this: break the judgment into independent dimensions, score each one separately, and combine them with weights you control in code.”
翻译:我们常常要按多个判据同时对一批条目排序。复合评分是个好用的思路:把判断拆成互相独立的维度,每个维度单独打分,再用”你在代码里掌握”的权重把它们合起来。
patterns.md 的模式表概括为:“Combine several dimensions of analysis into a single score”(把多个分析维度合成一个分数),收益一栏是成本(Cost)、可靠性(Reliability)、速度(Speed)。
2. 为什么必须拆:宽泛问题会藏判断
concepts__how-to-build-with-system-one.md 把”拆解问题”标为全篇最重要的一步:
“This is probably the most important concept in this guide. Broad questions hide several judgments behind one answer. Atomic questions expose those judgments so you can inspect, tune, and combine them in code.”
翻译:这大概是本指南里最重要的概念。宽泛的问题会把好几个判断藏在一个答案背后;原子化的问题把这些判断暴露出来,让你能在代码里逐个检查、逐个调参、自由组合。
官方给的反例是”给这个创业项目打个分”;正确做法是分开问市场规模、技术可行性、差异化程度,然后在代码里加权。同样,“这位候选人好不好”也是坏问题。
3. 官方示例:简历筛选
patterns__composite-scoring.md 的示例是工程岗简历筛选,目标是按多维度排序、挑出前 X 名候选人。
第一步:4 个独立维度各打一次分。 每个维度都是一道 5 档的打分题(Score):
| 维度(问题 ID) | 问什么 | 档位数 |
|---|---|---|
python_depth | 这位候选人的 Python 深度 | 5 档:完全没提到 → 主语言、多个项目 → 深度专精(架构、性能、库) |
team_leadership | 带过/管理过工程团队的程度 | 5 档:完全没提 → 非正式指导或技术负责 → 管理多个团队或整个工程组织 |
system_design | 设计大规模或分布式系统的经验 | 5 档:完全没提架构工作 → 在大规模系统上跨多领域做设计 |
generalist | 在核心专长之外上手陌生工具/角色/领域的证据 | 5 档:只提过一个领域 → 在陌生领域快速上手并交付的记录 |
注意 4 个维度合起来只用了一次请求——它们并行评估,属于典型的 投机式扇出 用法。
第二步:归一化(Normalize)后加权。 因为是 5 档,最高分是 4,所以每个维度的分都 除以 4 压到 0–1:
py = response.answers["python_depth"].score / 4
lead = response.answers["team_leadership"].score / 4
arch = response.answers["system_design"].score / 4
general = response.answers["generalist"].score / 4
# Senior IC(资深个人贡献者)
ic_score = (0.40 * py) + (0.10 * lead) + (0.40 * arch) + (0.10 * general)
# Engineering Manager(工程经理)
em_score = (0.15 * py) + (0.40 * lead) + (0.20 * arch) + (0.25 * general)两套权重对照:
| 维度 | 资深 IC | 工程经理 |
|---|---|---|
| Python 深度 | 40% | 15% |
| 带团队 | 10% | 40% |
| 系统设计 | 40% | 20% |
| 通识广度 | 10% | 25% |
官方对这套做法的说明:
“Each dimension is normalized to 0–1 and weighted. The weights give you an easy way to adjust the relative importance of each dimension, without losing any of the nuance of the individual scores.”
翻译:每个维度都被归一化到 0–1 并加权。权重让你能方便地调整各维度的相对重要性,同时不丢失单个分数里的任何细节。
“This gives you the ability to rank the candidates based on the composite score. But more importantly, it gives you visibility into how exactly the final score is being calculated. If the highest ranking candidates are not matching your expectations, you can adjust the weights to find the right balance.”
翻译:这让你能按复合分数给候选人排序。但更重要的是,它让你看得见最终分数到底是怎么算出来的。如果排名最高的候选人不符合你的预期,你调整权重去找到正确的平衡。
4. 关键性质:改系数,不改提示词
归一化后再合成,好处不只是”总分可调”,还有可解释与可迁移:
- 同一套模型输出可以支撑多套权重。上例中同一个候选人的 4 个原始分数,换一套权重就变成”是否适合当经理”的排序——不用重新问模型。
- 优先级变了改代码里的系数。
primitives.md的原话:“When priorities shift, change the value of weights rather than rewriting a prompt.”(当优先级变化时,改权重的值,而不是重写提示词。) - 单个维度的细节被保留。你随时能回看”他为什么分高”——是 Python 强还是系统设计强。
5. 同族的两种用法
官方在别处给了同一手法的另外两个实例:
- 垃圾邮件风险(
concepts__how-to-build-with-system-one.md的完整工单示例):把 3 个是非题(Noul)的概率加权合成风险分——0.45 × requests_credentials + 0.30 × sender_identity_mismatch + 0.25 × unexpected_reward,再用区间0.4 < spam_risk < 0.6判定”不确定”,交人工复核。 - 答案质量:
0.4 × answers_request + 0.4 × citations_are_supported + 0.2 × (1 − contradicts_context),注意”与上下文矛盾”这一项做了取反。
官方还提示了一条进阶路径:如果下游要接传统机器学习模型,可以直接把这些概率**当作特征(Feature)**喂进去——“Combine independent answers with deterministic rules or weighted sums. For learned composition, use the probabilities as features in a downstream classical machine-learning model.”(用确定性规则或加权求和来组合独立答案;若要做”学出来的”组合,就把这些概率当作下游传统机器学习模型的特征。)
6. 工程要点
- 维度要互相独立,一次请求并行问完;有依赖的才拆成第二次调用。
- 档位用描述定义,不要用数字——模型看不到档位编号,每档都要写清含义(见各维度的 5 档描述)。
- 归一化后再加权:先除以”最高档位”,让不同档数的维度可比。
- 权重是业务决策,不是模型参数,要能在代码里改、能回看、能版本化。
- 别忘了置信度:同一个
score可能来自完全不同的概率分布,排序高分的候选时要把 置信度门控 一起看(低置信度的判断可能该转人工)。 - 拆解不等于更慢:同一份状态上的多个问题并行评估,投机式扇出 已说明这一点。
相关来源
processed/jev-原始资料/官方-文档/patterns__composite-scoring.md(简历筛选示例、4 维 5 档、归一化与两套权重)processed/jev-原始资料/官方-文档/primitives.md(改权重而非改提示词、拆解复杂判断)processed/jev-原始资料/官方-文档/concepts__how-to-build-with-system-one.md(拆解原则、加权求和与 ML 特征)processed/jev-原始资料/官方-文档/patterns.md(官方模式定位)wiki/synthesis/Jev 知识.md(面向阅读的综合讲解)