文本与图片内容审核
用大模型做内容审核,是让模型按平台定好的标签(通过、拒绝、待复核和违规类型)给文本和图片分类,程序据此放行、拦截或送人工复核,申诉始终由人处理。模型只是辅助工具,审核标准和最终处理由平台自己负责。按每月 30 万条文本、5 万张图片估算,用各模型最低价分组的实时价格计算,模型费用每月约 ¥189。
价格更新于 2026年11月13日 17:58
月成本估算
假设:每月 30 万条文本(评论、私信、帖子),每条输入约 1,000 tokens(审核标准和示例约 900、内容约 100),输出约 50 tokens;5 万张图片,每张输入约 1,500 tokens(图片约 1,000、标准约 500),输出约 60 tokens;约 1.5 万条待复核内容和申诉交给主力模型整理,每条输入约 3,000 tokens、输出约 300 tokens。
业务问题
评论、私信、帖子、商品描述、头像和配图,用户每天发布的内容都要审核。全靠人工,量一大就跟不上,夜间和节假日更容易出现空档;只靠关键词规则,又容易误伤正常内容,换个写法就漏过去。
大模型能结合上下文理解文字的意思,也能看懂图片内容,适合做第一道筛选。但它会判断失误,同一条内容两次判断的结果也可能不同;遇到违规内容时,模型服务自身的安全策略有时会直接拒绝处理。审核结论关系到用户的账号和发言,不能完全交给模型。
常见做法是:规则先拦截明显的广告和黑名单内容,模型按明确的标签分类并给出理由,高风险和拿不准的进入人工复核队列,处罚决定和申诉由人负责。审核标准、处理结果和所在地法律法规规定的义务,都由平台自己承担。
推荐模型组合
推荐模型按实时目录自动选取,价格取各模型最低价分组,更新于 2026年11月13日 17:58。点模型名可查看全部分组价格。
文本分类(小模型)
gemini-2.5-flash-liteGoogle
输入 ¥0.2 / 输出 ¥0.8 每百万 tokens标准分组
按平台的审核标准把每条文本归到固定标签,并给出一句理由。调用量最大、每条很短,用单价低的小模型;标签定义和几十条典型案例写进系统提示词,放在开头保持不变。
图片审核(识图模型)
Claude Haiku 5.5Anthropic
输入 ¥0.4 / 输出 ¥2 每百万 tokensClaude 优质分组
读取头像、帖子配图和商品图,按和文本相同的标签输出结果,图片里的文字和联系方式也要一起看。图片会换算成输入 tokens,先缩小到能看清内容的尺寸再提交,费用更低。
复核与申诉辅助(主力模型)
qwen3.5-plus通义千问
输入 ¥1.12 / 输出 ¥6.72 每百万 tokens国产模型分组
对判为“待复核”的内容和用户申诉,结合上下文(前后几条对话、账号过去的处理记录)重新分析,给审核员整理出依据和建议。它只提供参考,结论由审核员做出。
参考架构
- 1
写清审核标准
把平台规则拆成明确的标签:通过、拒绝、待复核,以及广告引流、辱骂骚扰、色情、暴力、违法信息、泄露隐私等违规类型。每个标签写清定义、正例和反例,由运营和法务确定。
- 2
规则预过滤
先用关键词、黑名单、链接和图片哈希等规则,拦截明显违规和重复的内容,减少送给模型的量,这部分也不产生模型费用。
- 3
模型分类
文本交给小模型、图片交给识图模型,要求按 JSON 返回标签、违规类型和一句理由。模型拒绝处理、finish_reason 为 content_filter、返回为空或解析失败时,一律按“待复核”处理,不能当作通过。
- 4
按风险分流
明确通过的直接发布,明确违规的拦截并告知用户原因,待复核的和涉及封号等重处罚的进入人工复核队列。自动处理的范围先保守,再根据人工复核的结果逐步调整。
- 5
人工复核与申诉
审核员在队列里看到原文或原图、模型给的标签和理由,以及复核模型整理的上下文,然后做出决定。用户申诉一律由人处理,模型只帮审核员整理材料。
- 6
记录与校准
保存每条内容的模型结果、审核员结论和处理时间;定期抽查自动放行和自动拦截的内容,统计误判,把典型误判补进审核标准和示例。
成本估算
假设:每月 30 万条文本(评论、私信、帖子),每条输入约 1,000 tokens(审核标准和示例约 900、内容约 100),输出约 50 tokens;5 万张图片,每张输入约 1,500 tokens(图片约 1,000、标准约 500),输出约 60 tokens;约 1.5 万条待复核内容和申诉交给主力模型整理,每条输入约 3,000 tokens、输出约 300 tokens。
| 项目 | 模型 | 用量假设 | 费用 |
|---|---|---|---|
| 文本分类 | gemini-2.5-flash-lite | 300,000 次 × 输入 1,000 + 输出 50 tokens | ¥72 |
| 图片审核 | Claude Haiku 5.5 | 50,000 次 × 输入 1,500 + 输出 60 tokens | ¥36 |
| 复核与申诉辅助 | qwen3.5-plus | 15,000 次 × 输入 3,000 + 输出 300 tokens | ¥80.64 |
| 合计(每月) | ¥188.64 | ||
按各模型最低价分组的实时价格计算,价格更新于 2026年11月13日 17:58。
只含模型调用费用,不含人工审核、存储和服务器成本。图片换算成多少 tokens 因模型和分辨率而异,表中按每张约 1,000 tokens 估算,实际以响应里的 usage 为准;重复上传的图片按哈希去重,只审一次。审核标准写在系统提示词开头且固定不变,模型支持上下文缓存时命中部分按缓存读取价计费;被规则预过滤拦下的内容不产生模型费用。
示例代码
文本和图片用同一套标签、同一个函数,模型按 JSON 返回结论。请求出错、模型拒绝处理、被内容安全策略拦截或结果无法解析时,一律进入人工复核队列,不会被当作通过。
import base64
import json
import os
from openai import APIError, OpenAI
client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])
POLICY = """You moderate posts in a community app. Reply with one JSON object only:
{"decision": "allow" | "block" | "review", "category": "none" | "spam" | "abuse" | "sexual" | "violence" | "illegal" | "privacy", "reason": "one short sentence"}
spam: ads, or contact details to move a deal off the platform. abuse: insults or threats aimed at a person.
privacy: someone else's phone number, address or ID number. Judge only by these rules. If you are not sure, answer "review"."""
REVIEW = {"decision": "review", "category": "unknown"}
review_queue = []
def moderate(content, model):
"""Anything other than a clear, parseable answer goes to a person, never to "allow"."""
try:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "system", "content": POLICY}, {"role": "user", "content": content}],
)
except APIError as e: # refused or blocked by the model provider
return {**REVIEW, "reason": "request failed: " + type(e).__name__}
choice = resp.choices[0]
text = choice.message.content or ""
if choice.finish_reason == "content_filter" or "{" not in text:
return {**REVIEW, "reason": "model declined"}
try:
result = json.loads(text[text.find("{"): text.rfind("}") + 1])
except json.JSONDecodeError:
return {**REVIEW, "reason": "unparseable answer"}
if result.get("decision") not in ("allow", "block", "review"):
return {**REVIEW, "reason": "unknown label"}
return result
def moderate_text(text):
return moderate(text, "gemini-2.5-flash-lite")
def moderate_image(path):
with open(path, "rb") as f: # scale images down before this: fewer tokens
url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
content = [
{"type": "text", "text": "Moderate this image, including any text in it."},
{"type": "image_url", "image_url": {"url": url}},
]
return moderate(content, "claude-haiku-5-5")
for item_id, result in [
("post-1", moderate_text("DM me on another app for cheap followers!!")),
("avatar-7", moderate_image("avatar.jpg")),
]:
if result["decision"] == "review":
# a person decides; qwen3.5-plus can gather the context for the reviewer
review_queue.append({"id": item_id, **result})
print(item_id, result)常见问题
内容审核每月要花多少钱?
按每月 30 万条文本、5 万张图片、约 1.5 万条复核和申诉辅助估算,用最低价分组计算约 ¥189。规则预过滤拦下的越多、图片压得越小,费用越低。
模型的审核结果可以直接作为处罚依据吗?
不建议。模型会误判,同一条内容多次判断的结果也可能不同。模型结论适合用来放行明显正常的内容、拦下明显违规的内容、给待复核内容排优先级;封号、删帖等重处罚和全部申诉,应由审核员确认。审核标准和处理结果由平台自己负责。
模型拒绝处理或者返回空结果怎么办?
有的模型服务遇到违规内容会拒绝回答、返回 finish_reason 为 content_filter,或者直接报错。这些情况都要按“待复核”送人工,不能当作通过。上线前用真实样本测一测所选模型遇到各类违规内容时的表现。
用了大模型审核,能满足监管要求吗?
不能保证。本方案只是技术上的辅助手段,不构成任何合规承诺。平台需要按所在地的法律法规自己履行内容管理义务;面向中国境内公众提供生成式 AI 服务的,还涉及算法备案、安全评估和生成内容标识等要求,见本站的《使用规范》。
图片审核的费用怎么算?
图片按换算后的输入 tokens 计费,分辨率越高 tokens 越多,具体以响应里的 usage 为准。先把图片缩小到能看清内容的尺寸,重复上传的图片用哈希去重,只审一次。
严重违法的内容也交给模型判断吗?
疑似涉及未成年人的性内容等严重违法信息,规则或模型一旦识别出来,应按所在地法律规定的流程处置和报告;已经确认的内容不要作为普通样本反复提交给模型,也不要拿来测试。
