问题
你在做一个规则警察:团队的规范写在一份文档里 —— 交付代码里别留 console.log、改了接口要同步改文档等等 —— 你希望助手每改一处,都被这份文档检查一次。
第一版你让大模型每次都把整份文档重读一遍再判:一次编辑两秒钱一分,一天几千次就是真金白银加上大把的等待。更麻烦的是它不稳:第 200 次编辑和第 1 次答得不一样,因为它周围的对话变了。
于是第二版你把所有规则捏成一道总题:「这次编辑符合全部规则吗」。它几乎对什么都答 0.55 —— 坏了一条、好着九条。一个数说不清是哪条坏了,你也没法照它做任何事。
解决方案
题库模式说:一条规则就是一道题,一道题只问一件事。规则里有两个部分,就拆成两条规则、两道题。
每道题问「有没有」,不问「好不好」。「这次改动里有没有新增一个会随代码发布出去的 console.log」能答;「这次改动质量怎么样」不能答。再给每道题配一小段「哪些情形不算」:调试开关后面的日志不算,测试文件里的不算。
要数数、要量长度、要比日期的规则永远别进模型 —— 这类题模型不管看到什么都给 0.4 上下,而三行代码能数准。整份文档可以让大模型离线翻译成一套题库,翻一次;之后每次检查只花一次 Jev 的钱。
问 · 答 · 拍
- 问把这一次的代码改动和一条规则放进去,问「这次改动里有没有新增一个会发布出去的 console.log」。
- 答0.91。
- 拍过了 0.8,拦下来并告诉作者撞上了哪条规则;落在 0.5 到 0.8 之间就只提醒一句,不拦。
名字从哪来
驾照考试的题库。交规是一段一段的文字,可考官不会问「这个司机水平怎么样」,而是一项一项来:安全带系了没、转向灯打了没、后视镜看了没。每项只考一件事,所以你能被告知到底扣在哪一条上。
什么时候用
规则一句话说得清、看一次输入就能判、答案是「有没有」。
什么时候别用
规则要数数、要量长度、要比日期 —— 那是代码的活。规则要看完整个仓库才能判。规则讲的是流程,比如「不确定就问人」,没有什么东西能执行它。
做这件事的项目
- abide — 用 Jev 强制编码代理遵守项目规则。
- snifftest — 散文检查器,用可计数规则和一个判断模型找出 AI 写作痕迹。
- mastra-jev-moderation — 在 Jev 上为 Mastra 做输入审核:一个文件,一次类型化请求。
看谁的代码
- abide
skills/abide-compile/SKILL.md:100-131一条规则的原话,和它变成的那道题,前后并排放着。
- snifftest
src/jev.ts:239-259配置文件里的一条规则,由三段拼成一道题:问什么、哪些情形不算、一个例子。
- mastra-jev-moderation
jev-moderation.ts:112-115政策原文直接拿来用:放行和拦截写成对称的两句话,不是两张关键词表。
想看代码
{ "no_console_log": {
"type": "noul",
"what": "这次改动有没有新增一个会发布出去的 console.log?",
"not_for": "调试开关后面的日志,或者测试文件里的日志。",
"true": "交付代码里新增了一个 console.log。",
"false": "没有新增,或者删掉了一个。",
"scope": ["src/**/*.ts"],
"threshold": 0.8 } }jevbooks 怎么认出它
我们怎么知道一个项目用没用这一招?拿它的 README 问 Jev 一句话,Jev 给个百分比,数字越高说明越像。你要抄这道题,记住一点:别问「这个项目好不好」,要问「有没有讲到这一件具体的事」。
{
"rules-as-questions": {
"type": "noul",
"instructions": {
"what": "Does the text describe each natural-language rule, policy line, or rubric item becoming its own typed Jev question, written by hand or compiled once by a larger model?",
"not_for": "One catch-all question about the whole policy, or rules enforced by code alone."
},
"criteria": {
"true": "The text explicitly describes this. One sentence is enough; other content does not cancel it.",
"false": "The text does not describe this."
}
}
}