如何在 AiHubMix 上呼叫 Jev:結構化分類教程

推理時代閱讀約 5 分鐘
如何在 AiHubMix 上呼叫 Jev:結構化分類教程

簡短回答: jev-1.13 不生成文本。您將一段文本和一組命名問題 POST 到 https://aihubmix.com/v1/systemone,然後根據您的問題名稱獲得鍵入的答案——一個類別、一個分數或一個概率。無需解析。以下是有效的請求、完整的響應格式,以及一個會悄悄影響您準確性的設計錯誤。

Jev 的用途

當您需要一個 判斷,而不是一段文字時使用它:路由支持票、評分嚴重性、標記緊急性、限制內容。模型頁面明確指出——「不生成文本,無需解析。」

當您需要解釋、摘要或任何自由格式的輸出時,請使用普通的聊天模型。jev 無法生成這些。

開始之前

  • [ ] 安裝 Python 3(標準庫就足夠了)
  • [ ] 擁有一個 AiHubMix 帳戶和 API 密鑰
  • [ ] 將密鑰導出為 AIHUBMIX_API_KEY,而不是硬編碼在源代碼中

您 不需要 OpenAI SDK、LangChain 或 requests 包。

步驟 1 — 知道端點

POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json

這是一個特定於模型的路由, 不是 /v1/chat/completions。與 OpenAI 兼容的客戶端無法調用它。請使用普通 HTTP。

步驟 2 — 選擇您的問題類型

有三種類型,您可以在一個請求中自由混合:

類型用途您提供
choice選擇一個類別criteria 作為字典:標籤 → 定義
score按順序評分criteria 作為列表,最低優先
noul是/否判斷僅限於 instructions

步驟 3 — 構建請求

state 是要被評估的文本。 questions 鍵是您自創的名稱;響應使用相同的名稱。

payload = {
    "model": "jev-1.13",
    "state": "嗨,我已經嘗試連接我的 Stripe 帳戶三天了,"
             "但一直失敗。我正在損失銷售。請盡快幫助我。",
    "questions": {
        "department": {
            "type": "choice",
            "instructions": "哪個團隊應該處理這個問題",
            "criteria": {
                "billing":   "付款或訂閱問題",
                "technical": "錯誤或整合問題",
                "sales":     "定價或帳戶問題",
            },
        },
        "frustration": {
            "type": "score",
            "instructions": "客戶看起來有多沮喪",
            "criteria": [
                "冷靜,只是在陳述事實",
                "沮喪但文明",
                "非常生氣,語言強烈",
            ],
        },
        "is_urgent": {
            "type": "noul",
            "instructions": "該消息傳達了緊迫性或時間敏感性",
        },
    },
}

步驟 4 — 使用標準庫發送請求

import json, os, urllib.error, urllib.request

def ask(payload):
    req = urllib.request.Request(
        "https://aihubmix.com/v1/systemone",
        data=json.dumps(payload).encode(),
        headers={"Authorization": "Bearer " + os.environ["AIHUBMIX_API_KEY"],
                 "Content-Type": "application/json"},
        method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=60) as r:
            return json.loads(r.read())
    except urllib.error.HTTPError as e:
        raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')[:500]}")

將請求構建保持在一個函數內。如果您在模塊級別構建並發送,導入該文件會重新觸發調用並消耗令牌。

步驟 5 — 閱讀答案

每個答案都將其值存儲在與其 type 匹配的鍵下,因此一個訪問器涵蓋所有三個:

data = ask(payload)
for name, ans in data["answers"].items():
    kind = ans["type"]
    print(name, kind, ans[kind], ans.get("confidence"))
print("usage:", data.get("usage"))

驗證的輸出:

department   choice  billing   0.51
frustration  score   1         1
is_urgent    noul    1         None
usage: {'input_tokens': 424, 'output_tokens': 73}

步驟 6 — 理解完整的封裝

打印循環隱藏了有用的字段。 score 答案的原始 JSON:

{
  "type": "score",
  "score": 1,
  "legend": {"0": "冷靜,只是在陳述事實", "1": "沮喪但文明", "2": "非常生氣,語言強烈"},
  "probabilities": {"0": 0, "1": 1, "2": 0},
  "confidence": 1
}
  • legend 將索引映射回您自己的措辭——整數是自描述的,因此您在代碼中不需要查找表。
  • probabilities 提供完整的分佈,對於檢測接近平局的情況非常有用。
  • noul 沒有 confidence 字段。 其概率是信號。

頂層還返回 usage、 id、 provider (TypeSafe)和解析的後端版本 typesafe/jev-1.13-20260917。

影響您準確性的錯誤

在上述請求中, department 返回 billing ,其置信度為 0.51。重複相同的請求返回相同的標籤,置信度為 0.38 ——答案是穩定的,但所聲明的確定性卻不是。

原因在於標準,而不是模型。 billing 是「付款或訂閱問題」,而 technical 是「錯誤或整合問題」。一個 Stripe 整合 一直 失敗 確實符合這兩者。模型報告了一個寫入架構中的模糊性。

生產前的兩條規則:

  1. 編寫 choice 標準,使其相互排斥。如果人類在兩個標籤之間猶豫,模型也會如此。
  2. 設置置信度閾值,將低置信度結果路由到人工隊列,而不是接受它們作為決策。一個承認不確定性的模型比一個隱藏不確定性的模型更有價值。

啟動前檢查清單

  • [ ] 從環境或您的 VCS 忽略的 600模式文件中加載密鑰
  • [ ] choice 標準檢查重疊
  • [ ] 定義置信度閾值,並在其下設置回退路徑
  • [ ] noul 答案單獨處理——它們不帶有 confidence
  • [ ] 刪除未使用的問題(3 個問題消耗 424 個輸入令牌;2 個消耗 355)
  • [ ] 記錄非 2xx 響應及其原始主體

常見問題

我可以使用 OpenAI SDK 嗎? 不可以。 /v1/systemone 不是 OpenAI 兼容的路由。

Jev 可以返回句子或摘要嗎? 不可以。它僅回答您定義的問題。

每個請求可以有多少個問題? 經過驗證的測試使用了兩個和三個。每個問題都會增加輸入和輸出令牌,因此僅包括您將採取行動的內容。

有版本別名嗎? 模型頁面列出了 jev-latest 別名,與 jev-1.13 並列。如果可重現性很重要,請固定明確的版本。

這要花費多少? 模型頁面發布了 $0.0462 / M 輸入令牌和 $0 / M 輸出令牌。這些是供應商數據——在預算之前確認當前定價。

上下文窗口是什麼? 模型頁面不一致:標題中為 64K,提供者表中為 32K。在依賴任何一個之前,請根據您自己的最長輸入進行驗證。

本指南的範圍

以上所有內容都經過三次實時調用對單個輸入進行驗證。它不涵蓋延遲、批處理、吞吐量或對於與示例不同的輸入的行為。置信度漂移是一個重現的觀察,而不是測量的錯誤率——在設置閾值之前,請在您自己的數據上重複此操作。

在 AiHubMix 上開始

jev-1.13 可通過 AiHubMix 獲得,模型頁面包含本教程提到的所有內容: /v1/systemone 端點、三種問題類型及其 criteria 格式、完整的響應字段,以及發布的 $0.0462 / M 輸入令牌和 $0 / M 輸出令牌的定價。 jev-latest 別名解析為最新版本,因此隨著版本的變化保持最新。

從這裡開始: https://aihubmix.com/model/jev-latest

接下來的步驟:

  1. 創建一個 AiHubMix 帳戶並生成 API 密鑰
  2. 從步驟 3 複製請求和步驟 4 的 ask() 函數
  3. 用您自己隊列中的真實記錄替換 state
  4. 將結果與您今天對該記錄的分類進行比較

如果本指南對您有幫助,請訂閱以獲取有關結構化輸出模型和分類管道的未來文章。