一次只问一条规则
笼统地问“这有毒吗”,会把骚扰、垃圾信息、自伤和版权混成一个标签,运营拿到结果也无法处理。要写出规则——“这条内容是否攻击某个受保护群体?”——并把规则原文随内容一起发过去。
本站示例展示的正是这个差别:调侃周一开会的内容留在线上,针对群体的辱骂被标记。长度相同、语气相近,结果取决于规则。
问题形状
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 积分,积分不会过期。详见 定价。
在线试用审核示例(需登录),看不被标记与被标记的两条内容。