TypeScript · Open Council

共识度 0.82 是怎么算出来的——多模型互评的量化

Open Council 复盘:让几个模型互相打分,再把打分变成一个 0-1 的共识度。一半来自打分离散度,一半来自排序一致性,还有一个差点让辩论永远停不下来的坑。

Open Council 让几个 AI 模型围绕同一问题各自作答,然后互相评审、打分,最后输出一个 共识度: 0.82。这个 0.82 不是拍脑袋,是一个能拆开讲清楚的数。这篇讲它怎么算,以及为什么「低共识时不强行给结论」。

先说结论:0.82 是两半拼起来的

核心公式只有一行(consensus.ts):

rawAgreement = 0.5 * (1 - sigmaAvg / 4.5) + 0.5 * W

两个等权的一半:

  • 前一半,打分离散度。每个回答被多个评审者打了 1–10 分,算这些分的标准差 sigmaAvg。大家给分越接近,标准差越小,这一项越高。除以 4.5 是因为 1–10 分制的标准差理论上限约 4.5,用它把离散度映射进 0–1。
  • 后一半,排序一致性。用 Kendall’s W(肯德尔和谐系数)衡量「所有评审者对这批回答的排序有多一致」。大家都把同一个回答排第一,W 就接近 1。

所以一个典型的 0.82,可以直接翻译成:「打分的离散度贡献了约一半,排序的一致性贡献了另一半。」 一个数,两种独立的一致性证据,不靠单一指标撑着。

一个刻意的分工:算离散度那一半用原始 1–10 分(标准差有可解释的量纲),算 Kendall’s W 那一半先按评审者做 z-score 归一化(消除「有人手松、有人手紧」的打分习惯差),再比排序。同一份数据,两种口径,各取所长。

小样本要老实,别硬算

有效评审少于 2 份,直接返回全 0,不硬算——样本不足时给一个自信的共识度是骗人。评审者少于 3 个时,还会乘一个校正系数 rho(2 个评审者时 rho = 0.5),把小样本的过度自信压下去。

那个差点让辩论永远停不下来的坑

这是最值得写的一个 bug。

共识度本来还要再乘一个多样性因子 delta:参与的 provider 家族越少,delta 越低(单一供应商还会再硬打 7 折)。它衡量的是「这些评审者到底独不独立」——全是同一家的模型互评,一致也不太可信。

早期,这个 delta 被直接乘进了用来判断辩论要不要停的分数里。于是出事了:单模型多角色的场景(只配了一个模型,拆成 3 个角色互评),delta = (1/3) × 0.7 ≈ 0.23哪怕三个角色评审得完全一致(一致度满分),乘完 delta 也只有 0.23,永远够不到停止阈值——辩论在数学上永远停不下来。

根因很精辟:delta 是个可信度折减因子(评审者独不独立),却被塞进了判停分数(评审者一不一致)。这两件事语义正交,不该相乘之后拿去判停。

修法是把两个分数彻底分开:

  • agreement_score(= rawAgreement × rho不含 delta):只衡量一致度,专门用来判停;
  • consensus_score(含 delta):衡量可信度,只用来对外展示。

判停用前者,于是单供应商的 panel 只要评审者真达成一致,也能正常停下来;展示用后者,单供应商场景 consensus_score 天然偏低,如实告诉用户「这个结论的独立性不足」。一个分数负责控制流程,一个分数负责对外表达,硬把它们合成一个,就会两头都别扭。

低共识不早停,也不拒答

判停阈值是 0.6,最多辩 3 轮。每轮算完 agreement_score,达到 0.6 就收,没达到就进入下一轮交叉质询(cross-examine)——把分歧点喂回去让模型互相挑战,再重评、再算。

分歧点怎么来?除了聚合评审里的 weaknesses 和「魔鬼代言人」标注的风险,还会逐维度看:如果某个维度(准确性/完整性/实用性/洞察力)的评分标准差超过 1.5,就明确推一条「专家在『某维度』上分歧显著」喂回下一轮。

注意它的态度:低共识时系统不早停(强制多辩一轮),但最终仍然会产出结论(不拒答)——只是对外把偏低的 consensus_score 亮出来,让你自己判断可信度。它宁可多花一轮,也不把一个低一致的答案直接盖章。

打分解析:区分「没数据」和「中性数据」

模型的评审是自然语言,得从里面抠出分数。解析走三级兜底:先试 JSON,失败退回正则逐个维度抓分,再失败就给一份「填充分」——全维度中性 5 分。

关键的一条纪律:填充的假 5 分会被标记成 parse_error,而共识计算只纳入 validpartial 的评审。 正则救回来的(带真实抠出的分)算数,纯占位的假 5 分不进统计。为什么较真这个?因为一堆中性的 5 分会人为地拉低离散度、制造出虚假的「大家很一致」。解析失败是「没有数据」,不是「一个中性的数据」——把这两者当成一回事,统计就被污染了。

小结

把「几个模型的意见」压成一个可信的共识度:

  • 0.82 是两半:一半打分离散度(原始分的标准差),一半排序一致性(Kendall’s W),等权相加;
  • 小样本老实:不足 2 份返回 0,评审者少于 3 乘 rho 校正,不硬给自信;
  • 控制分与展示分分家:判停用不含多样性折减的 agreement_score,展示用含折减的 consensus_score——合成一个就会两头别扭;
  • 低共识不早停也不拒答:没到 0.6 就把分歧点喂回去再辩一轮,最终亮出真实可信度让人自己判断;
  • 别让假数据混进统计:解析失败的中性 5 分标记后排除,区分「没数据」与「中性数据」。

一句话:这套系统的取向自始至终是——保留信号、显式标注不确定性,而不是隐藏或伪造一个确定的结论。

留言

  • 加载中…

留言先审后发,通过后公开显示;邮箱只有站主可见。