jevbooks

← 全部设计模式

取景框

状态最小化 · Viewfinder

只框这次要判的

只把这次要判的那一样东西、以及判它离不开的材料发过去,别的都不发。

整段历史最后一条

问题

你在做一个规则检查器:帮你写代码的助手每改一处,你就让 Jev 看一眼,问它「这次改动违反团队的哪条规则了吗」。最顺手的写法是把手头的东西一股脑发过去 —— 这次改动,外加整段对话。

设想第 1 次改动发过去 800 个 token(文本计量与计费的单位),规则打 0.84。第 200 次改动,state 长到 2.4 万个 token,同一条规则只给 0.52 —— 规则那句话和这次改动之间,如今隔着五十条不相干的消息。state 的 token 涨了三十倍,对这次决策有用的信息反而少了。

往反方向瞎砍同样会翻车。你只把命令行「bash cleanup.sh」发过去,不发这个脚本里写了什么,再问「这条命令危险吗」,模型只能对着一个它没见过的文件猜。

解决方案

取景框模式说:先定「这次要判的是哪一样东西」,再决定框里装什么。它可以是一条消息、一个段落、一次代码改动、一次工具调用 —— 而且不管会话跑多久,这个单元的大小都不变。

然后只补这次判断离不开的上下文。一条命令要配上它会执行的脚本;一次改动要配上它可能违反的那条规则,不需要配上聊天记录。目标不是材料越少越好,是框得对。

还是放不下,就分级缩,别拦腰截断:先砍到 4000 字,再到 2000,再到 1000;缩到头还放不下,就停下来报错,不要发半截。这个文本检查器还会在发送前拒绝编码后的文件,因为它们不符合工具的输入约定。

问 · 答 · 拍

  1. 问把这一次的代码改动和这一条规则放进去,问「这次改动违反这条规则吗」。
  2. 答0.84。
  3. 拍过了 0.8 这条线,就把这次改动拦下来,告诉作者它撞上了哪条规则。

名字从哪来

相机的取景框。风景再大,你也得先决定框住哪一块再按快门。框外的东西不是不存在,只是这一张照片不要它 —— 而每多框进来一个路人,主体就小一分。

什么时候用

要判的东西能单独切出来:一条消息、一个段落、一次代码改动、一次工具调用。

什么时候别用

判断本身离不开全局。「这条工具调用还要不要留在对话里」这种问题,不看完整段对话就答不了。

做这件事的项目

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

用这种模式的全部项目 →

看谁的代码
想看代码
const patch = fit(edit.patch, [4000, 2000, 1000]);       // 放不下就分级缩,不拦腰截断
if (!patch || isBase64(patch)) return unreadable();      // 本检查器只接受纯文本
const state = { rule: rule.text, file: { path: edit.path, patch } };  // 只有这条规则和这次改动
const { answers } = await jev(state, {
  violates: noul("这次改动违反 `rule` 吗?"),
});
jevbooks 怎么认出它

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

questions.json · 每份 README 都发这道题
{
  "state-minimalism": {
    "type": "noul",
    "instructions": {
      "what": "Does the text describe deliberately sending only the item under judgment, such as the last message or a single paragraph, rather than the whole history?",
      "not_for": "Sending full transcripts or documents."
    },
    "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 做一个 →