我的 LLM 评审每次都翻脸——没关系,决定致命与否的是个 frozenset
来源:dev.to — 2026-09-01
📋 概述
作者实测发现 LLM 评审对完全相同的输入每次给出不同判定(label_flip_rate=1.0),却从未放过一个有缺陷的计划(underclaim_approvals=0)——两个数字同时为真,是因为架构把"少报"和"多报"两个方向交给了不同权威,而它们都不是 LLM。确定性门禁负责少报方向(解析 AST 而非散文,无法被提示注入),代码强制的白名单负责多报方向:即使 LLM 把 severity 标为 blocker,只要所属 family 不在 frozenset 内就被降级为 warning。结论:提示词只是辅助,frozenset 才是契约。
🔑 核心要点
- LLM 评审对相同输入五次判定五次不同,label_flip_rate 高达 1.0,但对种子缺陷从不放行
- 少报方向由确定性门禁掌管:前置条件、拓扑排序、回滚可信度解析的是 AST 而非散文
- 多报方向由代码白名单掌管:不在 _BLOCKER_ELIGIBLE_FAMILIES frozenset 内的 blocker 一律降级为 warning
- 把 LLM 判定放上关键路径就继承了其全部脆弱性,应让代码在一切能结构性校验之处拥有最终权威
- 作者承认确定性权威只是地板而非全部,还有 LLM 自分类、格式正确的恶意计划等接缝
💡 金句
提示词是有帮助的,但 frozenset 才是契约。LLM 可以自由地对严重程度犯错——反正代码从不相信它的严重程度标签。
👍 0
👎 0
← 返回 dev.to 首页