---
title: "发布之前先给内容做判断"
description: "针对一条具体规则问一个是非问题，把规则原文放进 state，再按概率分流，而不是只给一个标签。"
canonical: "https://system-one.dev/zh-CN/use-cases/content-moderation"
language: "zh-CN"
---

# 发布之前先给内容做判断

**要点**

1. 审核不是一个问题：一句玩笑和一句针对群体的攻击单独看很相似，所以要把规则说出来，并随内容一起发过去。
2. 每条内容都有概率，就能把结果拆成发布、复核、拦截三档，而不是一个二元标签。
3. 模型执行的是你写下的规则；规则不由它来写，申诉仍需要人处理。

## 一次只问一条规则

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

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

## 问题形状

```ts
import { 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 里放内容正文，以及审核员会引用的那段规则。没有规则原文，判断会向模型训练里吸收的倾向漂移。

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

```ts
export 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 护栏](https://system-one.dev/zh-CN/blog/agent-guardrails)。

## 费用

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

新账号注册即送 100 积分，积分不会过期。详见 [定价](https://system-one.dev/zh-CN/pricing)。

[在线试用审核示例（需登录）](https://system-one.dev/zh-CN/demo/tweet-moderation)，看不被标记与被标记的两条内容。


## 常见问题

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

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

### 规则原文放问题里还是 state 里？

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

### 它读图片和视频吗？

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

### 区间怎么定？

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