跳到正文
土土金API

資料標註與分類

批次打標籤先用便宜的小模型跑第一遍,要求按 JSON 返回標籤和置信度;置信度低的樣本交給另一家的模型複核,再隨機抽一部分人工檢查。按每月 50 萬條短文本、5% 進入複核估算,用最低價分組計算,模型費用每月約 ¥68.24。

價格更新於 2026年11月13日 下午6:08

月成本估算

假設:每月標註 50 萬條短文本(評論、工單),每條輸入約 400 tokens(標籤定義與示例約 300、文本約 100),輸出約 30 tokens;其中 5%(2.5 萬條)低置信度樣本交給第二個模型複核。

¥68.24/ 月

  • 首輪標註¥52
  • 低置信度複核¥16.24
看用量假設

業務問題

使用者評論、客服工單、問卷回答、商品標題每天都在增加,運營和演算法團隊要把它們分進類目,統計問題分佈,或者拿來訓練自己的模型。人工標註慢,幾個人的標準也很難統一。

大模型照著寫清楚的標籤定義打標,速度快、成本低,但在邊界樣本上會搖擺,偶爾還會給出標籤清單之外的答案。

更現實的定位是把模型當第一遍標註員:輸出限定在固定標籤裡並附置信度,拿不準的交給第二個模型或人工,再用抽檢結果不斷修正標籤定義。

推薦模型組合

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

參考架構

  1. 1

    寫標籤定義

    每個標籤寫一句定義和兩三個正反例,邊界情況單獨說明,比如「物流慢但對商品滿意」該歸哪一類。

  2. 2

    小模型首輪標註

    系統提示詞固定,要求返回 JSON:標籤加 0 到 1 的置信度;temperature 設為 0,限制輸出長度。

  3. 3

    程式校驗

    標籤不在清單裡、或者 JSON 解析失敗的,直接記為待複核。

  4. 4

    第二模型複核

    置信度低於閾值(比如 0.7)的樣本交給另一個模型重新標註,結果一致就採用,不一致進入人工佇列。

  5. 5

    抽樣人工檢查

    每批隨機抽 1% 到 2% 人工檢查,算出一致率;一致率下降時修改標籤定義和示例,重跑有問題的類目。

成本估算

假設:每月標註 50 萬條短文本(評論、工單),每條輸入約 400 tokens(標籤定義與示例約 300、文本約 100),輸出約 30 tokens;其中 5%(2.5 萬條)低置信度樣本交給第二個模型複核。

專案模型用量假設費用
首輪標註gemini-2.5-flash-lite500,000 次 × 輸入 400 + 輸出 30 tokens¥52
低置信度複核qwen3.5-plus25,000 次 × 輸入 400 + 輸出 30 tokens¥16.24
合計(每月)¥68.24

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

只含模型呼叫費用,不含人工抽檢成本。標籤定義越長,每條的輸入 tokens 越多;待標文本越長,費用越高。條數翻倍,費用大致翻倍。

示例程式碼

首輪用小模型按 JSON 返回標籤和置信度,置信度低的交給第二個模型,兩次不一致的標記為人工處理,結果寫入 JSONL。

示例程式碼(Python,併發打標與複核)
import json
import os
import random
from concurrent.futures import ThreadPoolExecutor

from openai import OpenAI

client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"], max_retries=3)

LABELS = ["shipping", "quality", "price", "service", "other"]
SYSTEM = (
    "You label customer reviews. Choose exactly one label from: " + ", ".join(LABELS) + ". "
    'Reply with JSON only, for example {"label": "quality", "confidence": 0.9}.'
)


def label(item, model):
    resp = client.chat.completions.create(
        model=model,
        messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": item["text"]}],
        response_format={"type": "json_object"},
        temperature=0,
        max_tokens=50,
    )
    raw = resp.choices[0].message.content
    try:
        result = json.loads(raw[raw.find("{"): raw.rfind("}") + 1])
    except ValueError:
        result = {}
    if result.get("label") not in LABELS:
        return {"id": item["id"], "label": None, "confidence": 0.0}
    return {"id": item["id"], "label": result["label"], "confidence": float(result.get("confidence", 0))}


items = [{"id": 1, "text": "Arrived two days late, but the mug itself is lovely."}]

with ThreadPoolExecutor(max_workers=8) as pool:
    first = list(pool.map(lambda it: label(it, "gemini-2.5-flash-lite"), items))

# second opinion for low-confidence rows from another vendor's model
by_id = {it["id"]: it for it in items}
for row in first:
    if row["confidence"] < 0.7:
        second = label(by_id[row["id"]], "qwen3.5-plus")
        row["needs_human"] = second["label"] != row["label"]
        row["label"] = second["label"] if row["label"] is None else row["label"]

# a random 2% always goes to people for quality checks
for row in random.sample(first, max(1, len(first) // 50)):
    row["needs_human"] = True

with open("labels.jsonl", "w", encoding="utf-8") as f:
    for row in first:
        f.write(json.dumps(row, ensure_ascii=False) + "\n")

用一把 Key 試試這個方案

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

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

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

常見問題

每月 50 萬條資料標註要多少錢?

按每條輸入約 400 tokens、輸出約 30 tokens,再讓 5% 進入第二個模型複核估算,用最低價分組計算約 ¥68.24。標籤定義寫得越長,單條成本越高。

模型標註的準確率有多高?

取決於任務難度和標籤定義是否清楚,沒有通用的數字。上線前拿幾百條人工標好的樣本測一遍一致率,再定置信度閾值和人工抽檢比例。

怎麼避免模型輸出清單外的標籤?

提示詞裡列出全部標籤並要求只能選其中一個,按 JSON 格式返回;程式裡再校驗一遍,不在清單裡的直接歸入待複核。

標註結果能拿去訓練自己的模型嗎?

技術上可以,但各家模型提供方對輸出內容的用途有自己的使用條款,用於訓練模型之前請先確認條款允許。

併發開多少合適?

從 8 個併發開始,看 429 出現的比例逐步調整;收到 429 時等一會兒再重試。量大的任務也可以分批放到業務低峰時段跑。