Jev Recipe / 内容质量

用 Jev 检测 AI 垃圾内容(AI slop):类型化质量闸门

在发布前拦截 AI 量产的泔水文:一次 evaluate 调用同时返回 is_slop 判定和 1–5 有序质量分,校准置信度决定自动拦截、打标、人工复核三条车道。

搭建 slop 质量闸门的 6 个步骤

01先定义再检测:按你产品的业务口径选定「泔水特征族」——模板腔、格式滥用、空洞总结句、低事实密度——把它们写成审核团队已经在用的 criteria 词汇。
02state 保持精简:只带正文和真正影响判定的元数据(来源、栏目、作者类型),剔除永远不会改变结论的字段。
03一次 evaluate 调用问两个问题:is_slop Noul 做二值闸门,quality Score 给 1–5 有序量表——即使二值判定有争议,分数仍然有用。
04策略写在应用代码里:置信度 ≥ 0.85 自动进隔离区,0.60–0.85 打标送复核,低于 0.60 交给人读。模型只报告事实,车道归你的代码管。
05先影子模式后强制:先用只记日志的方式跑真实流量,把预测置信度和编辑结论画成校准曲线,把切分点放在「错一次也不心疼」的位置。
06定期重校准:把编辑判定回流成标注样本,给易抖动的文本加迟滞带,每个季度重验阈值——和置信度门控降级链是同一套纪律。
schema / slop 检测判定契约
{
  "is_slop": {
    "type": "noul",
    "instructions": "这段文字是否属于 AI slop:模板腔浓重、格式滥用、信息密度低的量产填充内容?"
  },
  "quality": {
    "type": "score",
    "instructions": "给这段文字的编辑质量打分",
    "criteria": {
      "1": "纯泔水:模板句和填充词堆砌,没有原创信息",
      "2": "以填充为主:重复严重,信源含糊,具体事实很少",
      "3": "混合:可读但平庸,信源单薄",
      "4": "良好:具体、有出处,像人写的",
      "5": "优秀:有原创观点,事实密度高,有自己的声音"
    }
  }
}
把一篇真实稿件作为 state 发送,检查 is_slop 与 quality 的双层判定结果。

什么算 AI slop:六个特征族

slop 是一族特征的总和,不是单一信号。下面的清单把常见 tells 归成六族——定义你产品自己的 slop 标准时,直接拿去当 criteria 词汇。广为流传的「35 条 tells」来自 madewithjev AI slop checker 的公开描述,并非官方规范;具体数字请当作某个工具的分类口径,而不是权威标准。

模板腔与重复 n-gram

复读机式短语、万能开头、毫无节奏变化的句式。

  • "在当今快速发展的时代"式万能开头
  • 同一个 n-gram 在相邻段落反复出现
  • 公式化过渡词:「此外」「与此同时」「综上所述」
  • 第一段把标题或提问原样复述一遍
  • 句子长短高度一致,没有节奏起伏
  • 万金油对冲句:「值得注意的是」「不得不说」

列表与加粗滥用

让排版干本该由正文干的活。

  • 一句话能说清的事偏要拆成 bullet 列表
  • 句中随手加粗关键词,制造虚假重点
  • 每写两句就挂一个小标题
  • 编号「步骤」其实是普通话题罗列
  • 没人要求的「首次出现加粗注释体」术语表

空洞总结句式

什么也没压缩、什么也没补充的结论段。

  • "总而言之,X 是一款能够帮助你……的强大工具"
  • 动词堆叠:「赋能」「助力」「深耕」「引爆」「重塑」
  • "X 不仅仅是 Y——更是 Z"句式
  • TL;DR 只是复述正文,没有压缩任何信息
  • "在……的大背景下""在……的浪潮中"式填充

破折号与 emoji 痕迹

跨模型、跨 prompt 都活下来的标点习惯。

  • 破折号当默认连接符——一段里连用三四个
  • emoji 当项目符号或小标题
  • 同一页里直角引号和弯引号混用
  • 一句成段的「金句」连续堆叠

低事实密度与信源含糊

没有可核查的东西:该出现数字、名字、日期的地方全是空的。

  • "研究表明"但通篇没有一项研究
  • "众多专家认为"却给不出一个名字
  • 该有数字、版本号、日期的地方一笔带过
  • 该举例子的时候只给抽象论断
  • 所谓「事实」只是把读者的问题复述一遍

结构性对称

每个章节都像同一个模子刻的——批量生产的几何特征。

  • 每个 H2 章节长度几乎一致
  • 标题完全平行对称(「5 大优势……5 大挑战……」)
  • 文章自问自答出一个没人问的 FAQ
  • 「结语」部分再补最后一句正确的废话
实时交互体验 / slop 检测沙盒

AI slop 检测与三车道分流模拟器

选择一段示例文本并运行双层判定,看置信度如何把它分进拦截、打标、人工三条车道(纯前端模拟,不调用真实 API):

is_slop + quality 双问题
is_slop / quality
在当今快速发展的数字化时代,选择合适的框架比以往任何时候都更加重要。它不仅仅是一个工具——更是一种思维方式。此外,合适的框架能够助力团队释放全部潜能。 - **速度**——比以往更快地构建 - **规模**——无上限地增长 - **安全**——内置的安心保障 总而言之,合适的框架是一位强大的盟友,能够帮助你开启开发之旅的新篇章。
source: cms / 草稿箱
Jev 决策输出
~118ms / $0.0000008

点击「运行 Jev 检测」查看 is_slop 判定、quality 评分与三车道分流结果。

代码中的策略:is_slop = false → 放行 · true 且 confidence ≥ 0.85 → 自动隔离 · 0.60–0.85 → 打标送复核 · < 0.60 → 人工复核

Slop 检测基准对比:Jev 类型化闸门 vs 生成式 LLM 检测器

METRIC
Jev
生成式 LLM 检测器
千篇文本成本
~$0.0008

仅输入计费,0 输出 token

$0.30~$1.20

输入与生成的判定文本双向计费

单篇判定延迟 (P50)
~100–500ms

单次前向推理,无文本生成

1500~3000ms

逐 token 生成判定结论

格式稳定性
0%

Noul / Score 原生输出,无需任何解析

2~8% 非法 JSON,需要解析重试循环
可解释的判定标准
criteria 就是版本化的代码——政策可审查、可 diff
评分细则埋在 prompt 里,每次运行都在漂移
阈值可控性
校准置信度

一个数字直接决定拦截 / 标记 / 复核车道

模型自报置信度

未校准,需额外接 logprob

生产代码:TypeScript 与 Python 双端 slop 闸门

typescript / Jev slop 闸门与三车道分流
const JEV_ENDPOINT = "https://api.typesafe.ai/v1/jev/evaluate";

// 策略写在应用代码里——模型只负责报告事实。
const AUTO_BLOCK_CONFIDENCE = 0.85; // ≥ 0.85 → 隔离
const FLAG_MIN_CONFIDENCE = 0.6; // 0.60~0.85 → 打标,低于 → 人工

const QUESTIONS = {
  is_slop: {
    type: "noul",
    instructions:
      "这段文字是否属于 AI slop:模板腔浓重、格式滥用、信息密度低的量产填充内容?",
  },
  quality: {
    type: "score",
    instructions: "给这段文字的编辑质量打分",
    criteria: {
      "1": "纯泔水:模板句和填充词堆砌,没有原创信息",
      "2": "以填充为主:重复严重,信源含糊,具体事实很少",
      "3": "混合:可读但平庸,信源单薄",
      "4": "良好:具体、有出处,像人写的",
      "5": "优秀:有原创观点,事实密度高,有自己的声音",
    },
  },
} as const;

export type SlopLane =
  | "auto_quarantine"
  | "flag_review"
  | "human_review"
  | "publish";

export async function checkSlop(
  text: string,
  metadata: Record<string, unknown>,
) {
  const response = await fetch(JEV_ENDPOINT, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      state: { text, ...metadata },
      questions: QUESTIONS,
    }),
  });
  if (!response.ok) throw new Error("Jev evaluate failed");
  const data = await response.json();

  const { is_slop, quality } = data;
  const lane: SlopLane = !is_slop.answer
    ? "publish"
    : is_slop.confidence >= AUTO_BLOCK_CONFIDENCE
      ? "auto_quarantine"
      : is_slop.confidence >= FLAG_MIN_CONFIDENCE
        ? "flag_review"
        : "human_review";

  return {
    lane,
    is_slop: is_slop.answer,
    slop_confidence: is_slop.confidence,
    quality: quality.answer,
    quality_confidence: quality.confidence,
  };
}

// 典型路径:单篇 ~100-500ms,仅输入计费,0% schema 错误
python / CMS 存量内容的批量 slop 扫描
import requests

JEV_ENDPOINT = "https://api.typesafe.ai/v1/jev/evaluate"
AUTO_BLOCK_CONFIDENCE = 0.85  # ≥ 0.85 → 隔离
FLAG_MIN_CONFIDENCE = 0.60    # 0.60~0.85 → 打标,低于 → 人工复核

QUESTIONS = {
    "is_slop": {
        "type": "noul",
        "instructions": "这段文字是否属于 AI slop:模板腔浓重、格式滥用、信息密度低的量产填充内容?",
    },
    "quality": {
        "type": "score",
        "instructions": "给这段文字的编辑质量打分",
        "criteria": {
            "1": "纯泔水:模板句和填充词堆砌,没有原创信息",
            "2": "以填充为主:重复严重,信源含糊,具体事实很少",
            "3": "混合:可读但平庸,信源单薄",
            "4": "良好:具体、有出处,像人写的",
            "5": "优秀:有原创观点,事实密度高,有自己的声音",
        },
    },
}

def check_slop(text: str, source: str) -> dict:
    resp = requests.post(
        JEV_ENDPOINT,
        json={"state": {"text": text, "source": source}, "questions": QUESTIONS},
        timeout=5,
    )
    resp.raise_for_status()
    result = resp.json()
    slop, quality = result["is_slop"], result["quality"]

    if not slop["answer"]:
        lane = "publish"
    elif slop["confidence"] >= AUTO_BLOCK_CONFIDENCE:
        lane = "auto_quarantine"
    elif slop["confidence"] >= FLAG_MIN_CONFIDENCE:
        lane = "flag_review"
    else:
        lane = "human_review"

    return {
        "source": source,
        "lane": lane,
        "slop_confidence": slop["confidence"],
        "quality": quality["answer"],
    }

def scan_backlog(pages: list[dict]) -> dict:
    # 单页 ~100-500ms:一万页的 CMS 审计单线程约一小时跑完,
    # 按仅输入计费只花几美分。
    lanes: dict[str, int] = {}
    for page in pages:
        verdict = check_slop(page["text"], page["url"])
        lanes[verdict["lane"]] = lanes.get(verdict["lane"], 0) + 1
    return lanes

AI 垃圾内容检测常见问题

用 Jev 检测 AI slop 靠谱吗?

用来分诊足够可靠,用来「定罪」则要留人工车道。slop 是一族特征的总和——模板腔、格式滥用、空洞总结、低事实密度——类型化双问题判定(is_slop Noul + 1–5 quality Score)在单次 ~100–500ms 前向推理中就能抓住这些痕迹,且 0% 格式错误。真正可以自动化依赖的可靠性来自校准置信度:阈值是准确率契约,所有低置信度或边界判定都会落进复核车道,而不是被静默删除。

置信度阈值应该设多少?

从 0.85 自动隔离、0.60–0.85 打标复核、低于 0.60 人工阅读起步,然后用标注样本推导你自己的切分点:把预测置信度和编辑结论画成校准曲线,把每个切分点放在「错一次也能承受」的位置。强制生效前先影子模式(只记日志)跑一段,给易抖动的文本放宽中间带(迟滞),并随内容分布漂移每季度重验。

这和生成式 LLM 检测器、AI 文本分类器有什么区别?

生成式检测器的判定结论是一段生成的文本:1,500~3,000ms 的逐 token 生成、每次调用都计输出 token、2~8% 的响应是非法 JSON 需要解析重试,而且评分细则埋在 prompt 里、每次运行都在漂移。Jev 把这个路径反过来:criteria 是类型化、可版本化的代码,答案以校准概率的形式在单次前向中落在 Noul/Score 标签上,0% 格式错误,仅输入计费——约每千篇 $0.0008。

对人写的内容也有效吗?

有效——但要诚实面对一点:闸门度量的是文本特征,不是作者身份。早在 LLM 出现之前,人类就在批量生产模板化、注水的内容农场文章,所以一篇人写稿子被判定 is_slop=true 是正确的 slop 结论,不是误报。真正的误报风险在反方向:精炼、事实密度高的人写文本会干净通过,深度编辑过的 AI 辅助稿件会落在边界附近——这正是 0.60–0.85 打标车道和人工复核车道存在的意义。

「35 条 tells」这个数字是哪来的?

来自 madewithjev AI slop checker 的公开产品描述——一个免费网页工具,单次检查(约 243ms)即可标记 slop 特征。它是某一款工具自己的分类口径,不是 Jev 的官方规范。本页的六个特征族(模板腔、列表与加粗滥用、空洞总结、标点痕迹、低事实密度、结构性对称)把同一片领域整理成你能直接写进 schema 的 criteria 词汇。

能扫整站或 CMS 存量内容吗?

可以——就是 Python 示例里的批量模式。按单页 ~100–500ms 计算,一万页审计单线程约一小时跑完,仅输入计费只花几美分,完全不需要 GPU。把每条车道映射成 CMS 状态(发布 / 复核 / 隔离),每一页都落 answer + confidence + lane 日志,政策变更时审计记录仍在;再按周期重扫。GitHub 上的 jev-radar CASEBOOK 收录了大约十一个基于同一套循环构建的开源工具。

继续深入内容质量工程