jevbooks

← 全部设计模式

题库

规则即问题 · Question bank

一条规则一道题

把团队规范里的每一句话各自变成一道题,往后每次检查,只是把这些题再跑一遍。

规则noulnoulscore

问题

你在做一个规则警察:团队的规范写在一份文档里 —— 交付代码里别留 console.log、改了接口要同步改文档等等 —— 你希望助手每改一处,都被这份文档检查一次。

第一版你让大模型每次都把整份文档重读一遍再判:一次编辑两秒钱一分,一天几千次就是真金白银加上大把的等待。更麻烦的是它不稳:第 200 次编辑和第 1 次答得不一样,因为它周围的对话变了。

于是第二版你把所有规则捏成一道总题:「这次编辑符合全部规则吗」。它几乎对什么都答 0.55 —— 坏了一条、好着九条。一个数说不清是哪条坏了,你也没法照它做任何事。

解决方案

题库模式说:一条规则就是一道题,一道题只问一件事。规则里有两个部分,就拆成两条规则、两道题。

每道题问「有没有」,不问「好不好」。「这次改动里有没有新增一个会随代码发布出去的 console.log」能答;「这次改动质量怎么样」不能答。再给每道题配一小段「哪些情形不算」:调试开关后面的日志不算,测试文件里的不算。

要数数、要量长度、要比日期的规则永远别进模型 —— 这类题模型不管看到什么都给 0.4 上下,而三行代码能数准。整份文档可以让大模型离线翻译成一套题库,翻一次;之后每次检查只花一次 Jev 的钱。

问 · 答 · 拍

  1. 问把这一次的代码改动和一条规则放进去,问「这次改动里有没有新增一个会发布出去的 console.log」。
  2. 答0.91。
  3. 拍过了 0.8,拦下来并告诉作者撞上了哪条规则;落在 0.5 到 0.8 之间就只提醒一句,不拦。

名字从哪来

驾照考试的题库。交规是一段一段的文字,可考官不会问「这个司机水平怎么样」,而是一项一项来:安全带系了没、转向灯打了没、后视镜看了没。每项只考一件事,所以你能被告知到底扣在哪一条上。

什么时候用

规则一句话说得清、看一次输入就能判、答案是「有没有」。

什么时候别用

规则要数数、要量长度、要比日期 —— 那是代码的活。规则要看完整个仓库才能判。规则讲的是流程,比如「不确定就问人」,没有什么东西能执行它。

做这件事的项目

  • abide — 用 Jev 强制编码代理遵守项目规则。
  • snifftest — 散文检查器,用可计数规则和一个判断模型找出 AI 写作痕迹。
  • mastra-jev-moderation — 在 Jev 上为 Mastra 做输入审核:一个文件,一次类型化请求。

用这种模式的全部项目 →

看谁的代码
想看代码
{ "no_console_log": {
    "type": "noul",
    "what":     "这次改动有没有新增一个会发布出去的 console.log?",
    "not_for":  "调试开关后面的日志,或者测试文件里的日志。",
    "true":     "交付代码里新增了一个 console.log。",
    "false":    "没有新增,或者删掉了一个。",
    "scope":    ["src/**/*.ts"],
    "threshold": 0.8 } }
jevbooks 怎么认出它

我们怎么知道一个项目用没用这一招?拿它的 README 问 Jev 一句话,Jev 给个百分比,数字越高说明越像。你要抄这道题,记住一点:别问「这个项目好不好」,要问「有没有讲到这一件具体的事」。

questions.json · 每份 README 都发这道题
{
  "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."
    }
  }
}

用 Jev 做一个 →