跳至主要内容
System One

发布之前先给内容做判断

一次只问一条规则

笼统地问“这有毒吗”,会把骚扰、垃圾信息、自伤和版权混成一个标签,运营拿到结果也无法处理。要写出规则——“这条内容是否攻击某个受保护群体?”——并把规则原文随内容一起发过去。

本站示例展示的正是这个差别:调侃周一开会的内容留在线上,针对群体的辱骂被标记。长度相同、语气相近,结果取决于规则。

问题形状

tsimport { booleanQuestion } from '@system-one-ai/core';

export const policyQuestions = {
  groupAttack: booleanQuestion(
    'Does this post attack, dehumanize, or demean a protected group?',
  ),
  spamLink: booleanQuestion(
    'Is this post primarily an unsolicited link or product pitch?',
  ),
};

state 里放内容正文,以及审核员会引用的那段规则。没有规则原文,判断会向模型训练里吸收的倾向漂移。

示意代码,未经过实际运行测试。区间数值只是占位。

tsexport async function moderate(client, post: { text: string; policy: string; context?: string }) {
  const result = await client.evaluate({ state: post, questions: policyQuestions });
  const attack = result.answers.groupAttack.probability;
  const spam = result.answers.spamLink.probability;

  if (attack >= 0.85) return 'block';
  if (attack >= 0.45 || spam >= 0.7) return 'review';
  return 'publish';
}

用区间而不是标签

每个区间对应不同的误判代价:

  • 拦截只在概率很高时使用,因为误拦对作者可见,且很难申诉。
  • 复核放在中间:队列里带上概率,让审核员排优先级。
  • 发布在低位区间,同时把数值留下来,供之后校准。

它做不到的

  • 不会替你写规则。 它执行你发过去的文本;规则含糊,判定也会含糊。
  • 不读图片和视频。 Jev 只读文本和 JSON。审核字幕或文案,或者改用能读图的模型。
  • 不处理申诉。 由人决定,概率作为背景信息,而不是证据。

按概率给动作设门槛的通用做法,见 Agent 护栏。

费用

每 4KB 算一块,不足 4KB 也按一块。费用 = 块数 × 问题数 × 模型单价。在 Jev 上,一条短文两个问题是 2 积分。

新账号注册即送 100 积分,积分不会过期。详见 定价。

在线试用审核示例(需登录),看不被标记与被标记的两条内容。

常见问题

一个问题能覆盖所有规则吗?

不能。一条规则一个问题;合成一个“这是不是坏内容”的问题,得到的判定既无法申诉也无法审计。

规则原文放问题里还是 state 里?

放 state。问题保持简短,这样同一个问题可以针对不同版本的规则复评。

它读图片和视频吗?

不读。它只读文本和 JSON;请传文案或字幕,或者改用能读图的模型。

区间怎么定?

拿一批真实内容按规则标注,再按你社区里误拦与漏放的代价选择区间。