文本與圖片內容審核
用大模型做內容審核,是讓模型按平臺定好的標籤(通過、拒絕、待複核和違規類型)給文本和圖片分類,程式據此放行、攔截或送人工複核,申訴始終由人處理。模型只是輔助工具,審核標準和最終處理由平臺自己負責。按每月 30 萬條文本、5 萬張圖片估算,用各模型最低價分組的即時價格計算,模型費用每月約 ¥189。
價格更新於 2026年11月13日 下午5: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日 下午5: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日 下午5: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 為準。先把圖片縮小到能看清內容的尺寸,重複上傳的圖片用雜湊去重,只審一次。
嚴重違法的內容也交給模型判斷嗎?
疑似涉及未成年人的性內容等嚴重違法資訊,規則或模型一旦識別出來,應按所在地法律規定的流程處置和報告;已經確認的內容不要作為普通樣本反覆提交給模型,也不要拿來測試。
