Jev 案例:垃圾评论检测(完整代码)
TL;DR: 本示例把垃圾评论检测做成 Jev 1.13 上的一次判断题调用:回答
yes且置信度过阈值就自动隐藏评论,其余进人工审核队列。完整请求体、示例数据(example fixture)格式的响应和可直接复制的 curl 命令见下文。
场景
我们的技术博客每篇文章下面都开了评论区。每隔几周就会来一波垃圾评论:假表广告、赌场链接、SEO 乱码——这些乱码往往先提一句文章主题,然后话锋一转就开始推某个折扣站。关键词过滤器只能拦住最不用心的那批;稍微做点混淆的(比如把域名写成 “best-deals-now dot club”)就能畅通无阻,团队只好每周花一个上午清理。
解决办法刻意做得非常朴素:评论进入系统时、还没展示之前,对每条评论发一次 Jev 判断题调用,然后按结果分流:
- 回答是
yes且置信度不低于0.9:自动隐藏,同时把 rationale 写进日志; - 回答是
no且置信度高:直接放行展示; - 其余情况——置信度低,或者答案是
unclear——一律进人工审核队列。
这正是 Jev 的适用形态:一道判断题(yes / no / unclear),返回类型化 JSON 和置信度,而不是一段要靠正则去抠的聊天文本。Jev 是 TypeSafe AI 发布的 System One 判断模型,2026 年 9 月上线;本示例走 OpenRouter 的 OpenAI 兼容端点。
一个设计上的关键点:我们不要求模型写任何东西。题目固定、答案空间固定、分流门禁完全建立在置信度上。
请求
{
"model": "typesafe/jev-1.13",
"messages": [
{
"role": "system",
"content": "Judgment question. Is this comment spam? Answer yes, no, or unclear. Reply with JSON only: {\"answer\": <yes|no|unclear>, \"confidence\": <0-1>, \"rationale\": <one sentence>}"
},
{
"role": "user",
"content": "Great article! Also check best-deals-now dot club for 90% off designer bags, fast shipping worldwide!!!"
}
]
}
响应
示例数据(example fixture)——用于说明格式,不是线上实测抓包:
{
"answer": "yes",
"confidence": 0.97,
"rationale": "The comment promotes an external discount site, uses urgency and punctuation patterns typical of spam, and has no substantive relation to the article topic."
}
分流门禁只需要 answer 和 confidence 两个字段。rationale 直接写进审核日志,审核员扫一眼就能确认这条自动隐藏是否合理。
复现脚本
设置环境变量 OPENROUTER_API_KEY 后运行:
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"messages": [
{
"role": "system",
"content": "Judgment question. Is this comment spam? Answer yes, no, or unclear. Reply with JSON only: {\"answer\": <yes|no|unclear>, \"confidence\": <0-1>, \"rationale\": <one sentence>}"
},
{
"role": "user",
"content": "Great article! Also check best-deals-now dot club for 90% off designer bags, fast shipping worldwide!!!"
}
]
}'
响应外层是标准的 OpenAI 兼容 chat completion 结构;把 message content 按 JSON 解析就能拿到上面的字段。
关键参数
| 字段 | 取值 | 说明 |
|---|---|---|
model | typesafe/jev-1.13 | 固定版本。准确 slug 请以 OpenRouter 模型页为准,版本迭代时 slug 可能变化。 |
messages[0](system) | 判断题 + 答案空间 + JSON 结构 | 一开始就声明 yes/no/unclear,类型化输出才稳定,不用赌模型自己猜对格式。 |
messages[1](user) | 评论原文 | 评论原样传入;预清洗反而可能把 Jev 依赖的信号洗掉。 |
answer(响应) | yes | 分流决策:yes 且高置信度 → 自动隐藏。 |
confidence(响应) | 0.97(示例数据) | 阈值判定的输入。请用你们自己的审核历史调阈值,别照抄本文。 |
rationale(响应) | 一句话 | 每条自动隐藏决策自带审计线索,零成本。 |
| 价格 | $0.0462 / 1M input tokens | 每条评论一次短调用;预算前请在 OpenRouter 核对当前价格。 |
注意事项
- 响应为示例数据(example fixture);字段名请与官方文档核对后再依赖。官方 API 细节在 typesafe.ai,入口是System One 模型发布公告。
- 上线前请在 OpenRouter 模型页确认准确的模型 slug(
typesafe/jev-1.13)。 - 自动隐藏阈值先设保守一些(比如
0.95),review 一周审核队列里的 rationale 之后再往下调。误杀一位真实读者的代价,远高于让审核员多点一次鼠标。 unclear要保留为独立分支——不要把它并进no。- 适用于 Jev 1.13(2026 年 9 月发布),演示渠道为 OpenRouter。