新一代提示词工程 · 知识全景图面向有工程基础、提示词工程尚未系统化的工程师
显示设置

门控即判据

Gate as Executable Criterion

PE-P-04内容已写满G09落地实践第 22 层

落地实践门控判据

一句话结论

把「达标」写成一条会失败的脚本,并为每条判据配一个必须失败的负例,才挡得住恒真、假绿与代理判据这三种退化。

本页结构(可跳转)

G 一条可用的判据包含四要素 断言:检查什么 · 级别:失败是否阻断 证据:失败时输出什么定位信息 负向自检:一个必须触发失败的负例 F1 形态一 恒真判据 断言永远为真 ⇒ 从不报错 G->F1 F2 形态二 假绿 门控全绿,而问题从未被检查 G->F2 F3 形态三 代理判据 优化了易测的代理量,真实目标未动 G->F3 N 三条纪律 每个判据配一个负例夹具,改动判据后重跑全部负例 失败输出必须给出对象标识 · 期望 · 实测三元组 不设置死代码或死令牌豁免,豁免会成为新的漏洞面 D 与评测集的分工 评测集回答「质量是否变好」 门控回答「约束是否被违反」
对照图:判据的四要素与三种失败形态(恒真 / 假绿 / 代理判据),以及失败输出三元组、不设豁免的纪律。 (本站自制)

01为什么需要它

质量判断若停在人的观感上就不可复现:同一次改动,换一个人或换一天会得出不同结论,讨论只能靠印象与记忆。

适用边界

门控只能判定它被写出来的那些性质,没有被写成判据的性质不会被检查,因此全绿只说明已写下的约束未被违反,不说明质量已经达标;判据面需要随故障复盘与负向自检持续增补,否则它会稳定地漏掉新出现的问题类型。

02机制说明

一条可用的判据由四件事构成:断言(检查什么)、级别(失败是否阻断)、证据(失败时打印什么才够定位)、负向自检(一个必须让它失败的负例)。

03何时该用 / 何时不该用

按场景对照:先看条件,再看该怎么做。
类别场景 / 条件(总结)具体做法(细节)
该用把质量要求固化为可复现过程时每条要求写成一个带负例的判据,并用退出码表达结论。
该用判据失败时先打印对象标识、期望与实测三元组,再确认被断言的对象是否就是该动的对象。
不该用只写正向断言的门控没有负例的判据分不清「检查通过」与「检查从未发生」。
不该用为通过而放宽阈值或加豁免阈值只在改动数据能改善内容时才配当硬判据,否则降为报告项。

04实验台

  1. filepython

    查看代码
    def gate(items, limit):
        return all(x["score"] <= limit for x in items)      # 空集时循环体不执行,函数照样返回 True
    
    def gate_guarded(items, limit):
        assert items, "empty set: nothing was checked"      # 空集守卫:没有对象可检时必须失败
        return all(x["score"] <= limit for x in items)
    
    print("unguarded on empty set:", gate([], 5))
    try:
        gate_guarded([], 5)
        print("guarded on empty set: PASS (unexpected)")
    except AssertionError as e:
        print("guarded on empty set: FAIL:", e)
    print("guarded on real data:", gate_guarded([{"score": 3}], 5))

    预期观察:第一行打印 unguarded on empty set: True,说明没有守卫的判据在空集上恒真;第二行打印 guarded on empty set: FAIL: empty set: nothing was checked,说明守卫把「没有对象可检」变成可见失败;最后一行打印 guarded on real data: True,说明判据在真实数据上仍按预期工作。

  2. filepython

    查看代码
    rows = [{"id": "a", "ok": True}, {"id": "b", "ok": False}]
    
    scope = rows[:1]                                       # 判据只覆盖第一个对象
    print("gate over scope:", all(r["ok"] for r in scope))
    print("claim over all rows:", all(r["ok"] for r in rows))

    预期观察:第一行打印 gate over scope: True:判据只覆盖一个对象且存量数据恰好不触发,于是显示全绿;第二行打印 claim over all rows: False,说明结论所断言的范围大于判据覆盖的范围时,全绿不构成达标结论。

05证据

主张现行评测工具把判据分为确定性判据与模型辅助判据两档,并把取反做成每个判据类型的一等能力,因此负向自检可以直接复用框架的取反前缀。

分级official

来源S-0077 https://www.promptfoo.dev/docs/configuration/expected-outputs/

原文

展开原文关键句
Deterministic eval metrics: equals / ... Model-assisted: similar / classifier / moderation / llm-rubric / g-eval / ... Every test type can be negated by prepending `not-`

主张官方明确并非每条成功判据或失败评测都该由提示工程解决,有时换模型比改提示词更能改善延迟与成本,所以判据失败时要先确认被断言的对象是否就是该动的对象。

分级official

来源S-0002 https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/overview

原文

展开原文关键句
Not every success criteria or failing eval is best solved by prompt engineering. For example, you can sometimes improve latency and cost more easily by selecting a different model.

06术语

术语门控即判据 Gate as Executable Criterion

界定把「这次改动是否可接受」写成可执行的检查脚本并以其退出码作结论,使质量判断可复现、可回归。

相关节点—

术语评测集 Eval Set

界定带判据的一组代表性输入输出样本,是判断提示词改动是否真的变好的唯一依据;先建评测集再做优化。

相关节点—

术语未证实与已证伪之别 Unevidenced vs. Falsified

界定「未被现行厂商实践或权威来源收录」只是证据缺席,「已被反证推翻」才有反证;两者判定不同,混用会让读者把未证实当成已证伪。

相关节点—

07失效模式

08在本站知识结构中的位置

所属分组
G09落地实践
依赖深度
第 22 层(同层节点彼此无先后约束)
前置PE-E-09→PE-P-04 本节点→后继PE-P-05

在 交互全景图 中定位本节点。