簡短回答: 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 整合 一直 失敗 確實符合這兩者。模型報告了一個寫入架構中的模糊性。
生產前的兩條規則:
- 編寫
choice標準,使其相互排斥。如果人類在兩個標籤之間猶豫,模型也會如此。 - 設置置信度閾值,將低置信度結果路由到人工隊列,而不是接受它們作為決策。一個承認不確定性的模型比一個隱藏不確定性的模型更有價值。
啟動前檢查清單
- [ ] 從環境或您的 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
接下來的步驟:
- 創建一個 AiHubMix 帳戶並生成 API 密鑰
- 從步驟 3 複製請求和步驟 4 的
ask()函數 - 用您自己隊列中的真實記錄替換
state - 將結果與您今天對該記錄的分類進行比較
如果本指南對您有幫助,請訂閱以獲取有關結構化輸出模型和分類管道的未來文章。



