用棘轮机制降低LLM评估成本的实用方法
在开发 AI Agent 时,许多公司倾向于让更强大的语言模型(如 GPT‑4 或 Claude 3.5)充当输出评分的「评判者」。虽然看似便捷,但当这些 Judge 多次报出相同错误时,持续使用的代价会逐渐显现——模型调用费用高、响应速度慢、结果不稳定,每次评估可能出现不同的结论。
更为高效的做法是构建「棘轮机制」,把重复出现的评判结论尽可能下沉到更低层次、更确定且成本更低的检查手段。例如,摘要中出现不存在的章节引用时,可直接用字符串匹配来验证,从而把主观判断转化为不可伪造的事实检查。
硬指标与统计信号的划分
- Tier 1(不可伪造的证明):检查数据格式是否符合要求、文件是否存在、是否能够成功编译、是否出现超时。这类指标执行速度极快,几乎没有额外费用。
- Tier 2(统计信号):通过嵌入相似度、输出长度分布、差异结果是否为空等方式评估。它依赖于模型无法控制的基准线,具备一定的可靠性。
- Tier 3(Model‑as‑Judge):纯粹的模型观点,仅能提供信号,不能作为最终裁决依据。
将重复问题降级为硬检查
当 Judge 持续指向同一类问题(比如引用了源文不存在的章节),不应继续依赖它的判断,而应考虑是否可以用 Tier 1 或 Tier 2 的方法捕获。例如,通过检查引用标题是否出现在原文中,就能把该问题提升为 Tier 1 检查。
type Finding = {
claim: string; // Judge 重复抱怨的问题
sourceText: string; // Agent 未涉及的原文内容
citedSections: string[];
};
为什么升级到一级检查更可靠
// 升级到 Tier 1:从主观观点转化为不可伪造的事实检查
function citationsExist(finding: Finding): { pass: boolean; missing: string[] } {
const missing = finding.citedSections.filter(
(s) => !finding.sourceText.includes(s)
);
return { pass: missing.length === 0, missing };
}
// 升级到 Tier 2:如果完全匹配过于死板,则使用嵌入相似度与基准线对比
function citationGroundedness(
finding: Finding,
embed: (t: string) => number[],
cos: (a: number[], b: number[]) => number
): number {
const sourceEmbedding = embed(finding.sourceText);
const scores = finding.citedSections.map((s) => cos(embed(s), sourceEmbedding));
return scores.reduce((a, b) => a + b, 0) / (scores.length || 1);
}
生产失败往往被低级检查拦截
在实践中,约 80% 的生产环境异常(如 JSON 格式错误、路径幻觉、空响应)能够通过 Tier 1 与 Tier 2 捕获。将确定性任务交给代码实现,模糊争议留给 Judge,评估流程因此保持高效且稳定。
全部回复 (4)
想当场把话说完?进全球 AI 聊天室,登录就能开口。
大
副
直接上正则匹配快得飞起,比等模型在那儿纠结半天强太多了。就像把“引用不存在的章节”这种重复错误,直接用 sourceText.includes 转成不可伪造的硬检查,既便宜又稳。
0
LLM Judge太好骗了,只要字数堆上去分数就蹭蹭涨,太离谱了。尤其是当LLM Judge一再指出某个问题,比如引用了源文不存在的章节时,别继续依赖它判断,而要思考能否用Tier 1或Tier 2的方法捕捉它。在这个例子中,通过检查引用标题是否在源文中出现,就能将其升级为Tier 1检查。这样,将一级(Tier 1:不可伪造的证明)检查速度极快且无成本的优势发挥到极致,把重复出现的评判结论尽可能下移到更低层次、更确定且便宜的检查机制,转化能将主观观点变为不可伪造的事实检查。