问题
你在做一个规则检查器:帮你写代码的助手每改一处,你就让 Jev 看一眼,问它「这次改动违反团队的哪条规则了吗」。最顺手的写法是把手头的东西一股脑发过去 —— 这次改动,外加整段对话。
设想第 1 次改动发过去 800 个 token(文本计量与计费的单位),规则打 0.84。第 200 次改动,state 长到 2.4 万个 token,同一条规则只给 0.52 —— 规则那句话和这次改动之间,如今隔着五十条不相干的消息。state 的 token 涨了三十倍,对这次决策有用的信息反而少了。
往反方向瞎砍同样会翻车。你只把命令行「bash cleanup.sh」发过去,不发这个脚本里写了什么,再问「这条命令危险吗」,模型只能对着一个它没见过的文件猜。
解决方案
取景框模式说:先定「这次要判的是哪一样东西」,再决定框里装什么。它可以是一条消息、一个段落、一次代码改动、一次工具调用 —— 而且不管会话跑多久,这个单元的大小都不变。
然后只补这次判断离不开的上下文。一条命令要配上它会执行的脚本;一次改动要配上它可能违反的那条规则,不需要配上聊天记录。目标不是材料越少越好,是框得对。
还是放不下,就分级缩,别拦腰截断:先砍到 4000 字,再到 2000,再到 1000;缩到头还放不下,就停下来报错,不要发半截。这个文本检查器还会在发送前拒绝编码后的文件,因为它们不符合工具的输入约定。
问 · 答 · 拍
- 问把这一次的代码改动和这一条规则放进去,问「这次改动违反这条规则吗」。
- 答0.84。
- 拍过了 0.8 这条线,就把这次改动拦下来,告诉作者它撞上了哪条规则。
名字从哪来
相机的取景框。风景再大,你也得先决定框住哪一块再按快门。框外的东西不是不存在,只是这一张照片不要它 —— 而每多框进来一个路人,主体就小一分。
什么时候用
要判的东西能单独切出来:一条消息、一个段落、一次代码改动、一次工具调用。
什么时候别用
判断本身离不开全局。「这条工具调用还要不要留在对话里」这种问题,不看完整段对话就答不了。
做这件事的项目
- abide — 用 Jev 强制编码代理遵守项目规则。
- mastra-jev-moderation — 在 Jev 上为 Mastra 做输入审核:一个文件,一次类型化请求。
- snifftest — 散文检查器,用可计数规则和一个判断模型找出 AI 写作痕迹。
看谁的代码
- abide
packages/cli/src/lib/jev.ts:39-44发过去的只有任务、文件和这一次的改动,没有聊天记录,所以第 200 次改动和第 1 次看到的东西一模一样。
- mastra-jev-moderation
jev-moderation.ts:179整份材料只有一个字段:用户刚发的那句话。不带历史,不带工具结果。
- snifftest
src/engine.ts:62-115一段文字一次请求;代码块和标题根本不会发给模型。
想看代码
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 给个百分比,数字越高说明越像。你要抄这道题,记住一点:别问「这个项目好不好」,要问「有没有讲到这一件具体的事」。
{
"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."
}
}
}