问题
你在给一个聊天应用做审核门。每条消息发给 Jev,问一道题——这条消息在辱骂人吗——超过 0.7 就拦下。取答案的时候,你顺手加了个小保险:要是取不到,就当 0。
某天夜里,返回里没有这道题的答案。你的代码读到 0,意思是「肯定不是辱骂」,于是满怀信心地把这条消息放了出去。没有任何一处报警。监控上也干干净净:请求全是 200,响应全是合法的,延迟也正常。
你的第一反应是给那行包一层「出错就兜住」。可这里根本没有错可兜——服务好好的,响应也是规规矩矩的,只是少了一块。那句「就当 0」从来不是什么保险,它是你的代码替模型编了一个它没说过的答案,而且编在了最自信的那一头。
解决方案
验货模式说:把回来的答案当成一箱货,签收之前先点数。你问了四道题,箱子里就该有四个答案。少一个不是小毛病,是这箱货有问题。
然后一件件看。是非题的答案必须是 0 到 1 之间的数。多选题选中的那个必须出自你给的选项,每个选项都该有一个数,所有数加起来该约等于 1,而且被选中的那个数得是最大的。选中的不是最大的那个,那就不是一个答案,是上游某处出了 bug。
不合格的东西不叫 0,它叫「没答」,是第三种值,绝不以「一个很低的概率」的身份混进决策。它走另一条路——你事先就替这种时候选好的那条路。
问 · 答 · 拍
- 问把一条聊天消息(发给 Jev 看的那份材料,术语叫 state)放进去,问它这条消息在不在辱骂人。
- 答什么也没有。返回里根本没这道题。
- 拍没答不等于 0,所以这条消息不能按「安全」处理。它走你事先写好的那条路——先拦住,并在日志里记一句:这次检查根本没做成。
名字从哪来
签收快递。箱子里少了一个零件,签收单上写的是「缺件一个」,不是「零件数量:0」。写成 0,下一个经手的人就会以为这台机器本来就不需要那个零件。
什么时候用
总是。这不是建议,是别的事情的前一步:只要你系统里有任何东西会拿这个数去做事,这个数就得先验。
什么时候别用
没有——不存在「不验比验更安全」的情形。只要说清楚它的边界就行:它验的是答案的形状,不是含义。一个数完全可以形状规规矩矩,却什么也没说。
做这件事的项目
- jev-ultrafast — 浏览器代理:Jev 决定每个动作和元素,仅在输入文本时调用语言模型。
- snifftest — 散文检查器,用可计数规则和一个判断模型找出 AI 写作痕迹。
- fast-jev-compaction — 用 Jev 裁剪上下文而非摘要的 Claude Code 插件。
看谁的代码
- jev-ultrafast
jev_ultrafast/model.py:30-45点一下之前先查六件事:选中的在给出的选项里、每个选项都有数、所有数加起来约等于一、选中的那个数最大。有一样不对,就什么也不点。
- snifftest
src/jev.ts:384-417缺的、不是数字的、超出范围的答案一律丢掉,不换成 0——「根本没答」和「答了个很低的数」就是这样分开的。
- fast-jev-compaction
src/request.ts:66-80只要不是一个正常的数就当场抛错,工具随即退回自带的摘要办法,而不是瞎猜。
想看代码
function noulOf(answers, id) {
const p = answers[id]?.p;
return typeof p === "number" && p >= 0 && p <= 1 ? p : null; // null = 没答,绝不当 0
}
const p = noulOf(answers, "abusive");
if (p === null) return onMissing(); // 走事先选好的那条路,不进决策
if (p >= 0.7) return hold(message);jevbooks 怎么认出它
我们怎么知道一个项目用没用这一招?拿它的 README 问 Jev 一句话,Jev 给个百分比,数字越高说明越像。你要抄这道题,记住一点:别问「这个项目好不好」,要问「有没有讲到这一件具体的事」。
{
"contract-validation": {
"type": "noul",
"instructions": {
"what": "Does the text describe checking Jev's answer shape before acting, such as choice in candidates, probabilities summing to one, or discarding out-of-range values?",
"not_for": "Trusting the response as-is."
},
"criteria": {
"true": "The text explicitly describes this. One sentence is enough; other content does not cancel it.",
"false": "The text does not describe this."
}
}
}