跳到正文
土土金API

文本與圖片內容審核

用大模型做內容審核,是讓模型按平臺定好的標籤(通過、拒絕、待複核和違規類型)給文本和圖片分類,程式據此放行、攔截或送人工複核,申訴始終由人處理。模型只是輔助工具,審核標準和最終處理由平臺自己負責。按每月 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。

¥188.64/ 月

  • 文本分類¥72
  • 圖片審核¥36
  • 複核與申訴輔助¥80.64
看用量假設

業務問題

評論、私信、帖子、商品描述、頭像和配圖,使用者每天發布的內容都要審核。全靠人工,量一大就跟不上,夜間和節假日更容易出現空檔;只靠關鍵詞規則,又容易誤傷正常內容,換個寫法就漏過去。

大模型能結合上下文理解文字的意思,也能看懂圖片內容,適合做第一道篩選。但它會判斷失誤,同一條內容兩次判斷的結果也可能不同;遇到違規內容時,模型服務自身的安全策略有時會直接拒絕處理。審核結論關係到使用者的帳號和發言,不能完全交給模型。

常見做法是:規則先攔截明顯的廣告和黑名單內容,模型按明確的標籤分類並給出理由,高風險和拿不準的進入人工複核佇列,處罰決定和申訴由人負責。審核標準、處理結果和所在地法律法規規定的義務,都由平臺自己承擔。

推薦模型組合

推薦模型按即時目錄自動選取,價格取各模型最低價分組,更新於 2026年11月13日 下午5:58。點模型名可檢視全部分組價格。

參考架構

  1. 1

    寫清審核標準

    把平臺規則拆成明確的標籤:通過、拒絕、待複核,以及廣告引流、辱罵騷擾、色情、暴力、違法資訊、洩露隱私等違規類型。每個標籤寫清定義、正例和反例,由運營和法務確定。

  2. 2

    規則預過濾

    先用關鍵詞、黑名單、連結和圖片雜湊等規則,攔截明顯違規和重複的內容,減少送給模型的量,這部分也不產生模型費用。

  3. 3

    模型分類

    文本交給小模型、圖片交給識圖模型,要求按 JSON 返回標籤、違規類型和一句理由。模型拒絕處理、finish_reason 為 content_filter、返回為空或解析失敗時,一律按「待複核」處理,不能當作通過。

  4. 4

    按風險分流

    明確通過的直接發布,明確違規的攔截並告知使用者原因,待複核的和涉及封號等重處罰的進入人工複核佇列。自動處理的範圍先保守,再根據人工複核的結果逐步調整。

  5. 5

    人工複核與申訴

    審核員在佇列裡看到原文或原圖、模型給的標籤和理由,以及複核模型整理的上下文,然後做出決定。使用者申訴一律由人處理,模型只幫審核員整理材料。

  6. 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-lite300,000 次 × 輸入 1,000 + 輸出 50 tokens¥72
圖片審核Claude Haiku 5.550,000 次 × 輸入 1,500 + 輸出 60 tokens¥36
複核與申訴輔助qwen3.5-plus15,000 次 × 輸入 3,000 + 輸出 300 tokens¥80.64
合計(每月)¥188.64

按各模型最低價分組的即時價格計算,價格更新於 2026年11月13日 下午5:58。

只含模型呼叫費用,不含人工審核、儲存和伺服器成本。圖片換算成多少 tokens 因模型和解析度而異,表中按每張約 1,000 tokens 估算,實際以響應裡的 usage 為準;重複上傳的圖片按雜湊去重,只審一次。審核標準寫在系統提示詞開頭且固定不變,模型支援上下文快取時命中部分按快取讀取價計費;被規則預過濾攔下的內容不產生模型費用。

示例程式碼

文本和圖片用同一套標籤、同一個函式,模型按 JSON 返回結論。請求出錯、模型拒絕處理、被內容安全策略攔截或結果無法解析時,一律進入人工複核佇列,不會被當作通過。

示例程式碼(Python,文本與圖片審核)
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)

用一把 Key 試試這個方案

註冊後在控制台建立 API Key,把上面程式碼裡的 base_url 和 Key 換成你的就能執行。企業採購、開發票可以加客服微信 JsnonoChat。

土土金客服微信二維碼
微信JsnonoChat

掃碼或搜尋微信號新增客服

常見問題

內容審核每月要花多少錢?

按每月 30 萬條文本、5 萬張圖片、約 1.5 萬條複核和申訴輔助估算,用最低價分組計算約 ¥189。規則預過濾攔下的越多、圖片壓得越小,費用越低。

模型的審核結果可以直接作為處罰依據嗎?

不建議。模型會誤判,同一條內容多次判斷的結果也可能不同。模型結論適合用來放行明顯正常的內容、攔下明顯違規的內容、給待複核內容排優先順序;封號、刪帖等重處罰和全部申訴,應由審核員確認。審核標準和處理結果由平臺自己負責。

模型拒絕處理或者返回空結果怎麼辦?

有的模型服務遇到違規內容會拒絕回答、返回 finish_reason 為 content_filter,或者直接報錯。這些情況都要按「待複核」送人工,不能當作通過。上線前用真實樣本測一測所選模型遇到各類違規內容時的表現。

用了大模型審核,能滿足監管要求嗎?

不能保證。本方案只是技術上的輔助手段,不構成任何合規承諾。平臺需要按所在地的法律法規自己履行內容管理義務;面向中國境內公眾提供生成式 AI 服務的,還涉及演算法備案、安全評估和生成內容標識等要求,見本站的《使用規範》。

圖片審核的費用怎麼算?

圖片按換算後的輸入 tokens 計費,解析度越高 tokens 越多,具體以響應裡的 usage 為準。先把圖片縮小到能看清內容的尺寸,重複上傳的圖片用雜湊去重,只審一次。

嚴重違法的內容也交給模型判斷嗎?

疑似涉及未成年人的性內容等嚴重違法資訊,規則或模型一旦識別出來,應按所在地法律規定的流程處置和報告;已經確認的內容不要作為普通樣本反覆提交給模型,也不要拿來測試。