Kurze Antwort: jev-1.13 erzeugt keinen Text. Sie senden einen Textabschnitt zusammen mit einer Reihe benannter Fragen per POST an https://aihubmix.com/v1/systemone und erhalten typisierte Antworten zurück, die über Ihre Fragennamen zugeordnet sind – eine Kategorie, ein Score oder eine Wahrscheinlichkeit. Es gibt nichts zu parsen. Unten finden Sie eine funktionierende Anfrage, das vollständige Antwortformat und den Designfehler, der Ihre Genauigkeit unbemerkt verschlechtert.
Wofür Jev gedacht ist
Verwenden Sie es, wenn Sie eine Einschätzung brauchen, keinen Absatz: Weiterleitung eines Support-Tickets, Bewertung des Schweregrads, Kennzeichnung der Dringlichkeit, Inhaltsfreigabe. Die Modellseite formuliert es klar: „Keine Textgenerierung, nichts zu parsen.“
Verwenden Sie stattdessen ein normales Chat-Modell, wenn Sie Erklärungen, Zusammenfassungen oder beliebige Freitextausgaben benötigen. Jev kann diese nicht erzeugen.
Bevor Sie beginnen
- [ ] Python 3 installiert (die Standardbibliothek reicht aus)
- [ ] Ein AiHubMix-Konto und ein API-Schlüssel
- [ ] Schlüssel als
AIHUBMIX_API_KEYexportiert, niemals fest im Quellcode hinterlegt
Sie benötigen kein OpenAI-SDK, kein LangChain und requests auch nicht.
Schritt 1 – Den Endpunkt kennen
POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json
Dies ist eine modellspezifische Route, nicht /v1/chat/completions. OpenAI-kompatible Clients können sie nicht aufrufen. Verwenden Sie einfaches HTTP.
Schritt 2 – Fragetypen auswählen
Es gibt drei, und Sie können sie in einer Anfrage frei kombinieren:
| Typ | Verwendung für | Sie liefern |
|---|---|---|
choice | Auswahl einer Kategorie | criteria als Dictionary: Bezeichnung → Definition |
score | Bewertung auf einer geordneten Skala | criteria als Liste, niedrigster Wert zuerst |
noul | Ein Ja/Nein-Urteil | nichts darüber hinaus instructions |
Schritt 3 – Die Anfrage erstellen
state ist der zu beurteilende Text. Die Schlüssel von questions sind von Ihnen frei gewählte Namen; die Antwort verwendet dieselben Namen.
payload = {
"model": "jev-1.13",
"state": "Hi, I have been trying to connect my Stripe account for 3 days "
"and it keeps failing. I am losing sales. Please help ASAP.",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this",
"criteria": {
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
},
},
"frustration": {
"type": "score",
"instructions": "How frustrated the customer appears",
"criteria": [
"Calm, just stating facts",
"Frustrated but civil",
"Very angry, strong language",
],
},
"is_urgent": {
"type": "noul",
"instructions": "The message conveys urgency or time-sensitivity",
},
},
}
Schritt 4 – Mit der Standardbibliothek senden
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]}")
Halten Sie die Erstellung der Anfrage in einer Funktion. Wenn Sie auf Modulebene erstellen und senden, löst der Import der Datei den Aufruf erneut aus und verbraucht Tokens.
Schritt 5 – Die Antworten auslesen
Jede Antwort speichert ihren Wert unter einem Schlüssel, der ihrem type entspricht, sodass ein einziger Zugriff alle drei Typen abdeckt:
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"))
Geprüfte Ausgabe:
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
usage: {'input_tokens': 424, 'output_tokens': 73}
Schritt 6 – Die vollständige Hülle verstehen
Die Ausgabeschleife blendet nützliche Felder aus. Das rohe JSON für eine score-Antwort:
{
"type": "score",
"score": 1,
"legend": {"0": "Calm, just stating facts", "1": "Frustrated but civil", "2": "Very angry, strong language"},
"probabilities": {"0": 0, "1": 1, "2": 0},
"confidence": 1
}
legendordnet den Index wieder Ihrer eigenen Formulierung zu – die Ganzzahl ist selbsterklärend, Sie benötigen also keine Nachschlagetabelle in Ihrem Code.probabilitiesliefert die vollständige Verteilung, nützlich zum Erkennen eines knappen Kopf-an-Kopf-Rennens.noulhat keinconfidence-Feld. Seine Wahrscheinlichkeit ist das Signal.
Auf der obersten Ebene werden außerdem usage, id, provider (TypeSafe) und die aufgelöste Backend-Version typesafe/jev-1.13-20260917 zurückgegeben.
Der Fehler, der Ihre Genauigkeit kostet
In der obigen Anfrage lieferte department das Label billing mit einer Konfidenz von 0,51. Die identische Anfrage wiederholt ergab dasselbe Label mit 0,38 – die Antwort war stabil, die angegebene Sicherheit nicht.
Die Ursache liegt in den Kriterien, nicht im Modell. billing lautet „Zahlungs- oder Abonnementprobleme“, und technical lautet „Fehler oder Integrationsprobleme“. Eine Stripe-Integration, die immer wieder fehlschlägt, passt tatsächlich zu beiden. Das Modell meldete eine Mehrdeutigkeit, die im Schema angelegt war.
Zwei Regeln vor dem produktiven Einsatz:
- Formulieren Sie
choice-Kriterien, die sich gegenseitig ausschließen. Wenn ein Mensch zwischen zwei Labels zögern würde, wird das Modell ebenfalls zögern. - Legen Sie eine Konfidenzschwelle fest und leiten Sie Ergebnisse mit niedriger Konfidenz an eine menschliche Warteschlange weiter, statt sie als Entscheidungen zu übernehmen. Ein Modell, das seine Unsicherheit eingesteht, ist wertvoller als eines, das sie verbirgt.
Checkliste vor dem Launch
- [ ] Schlüssel aus der Umgebung oder einer
600-Datei geladen, die Ihr VCS ignoriert - [ ]
choice-Kriterien auf Überschneidungen geprüft - [ ] Konfidenzschwelle definiert, mit einem Fallback-Pfad darunter
- [ ]
noul-Antworten separat behandelt – sie enthalten keineconfidence - [ ] Ungenutzte Fragen entfernt (3 Fragen kosteten 424 Input-Tokens, 2 kosteten 355)
- [ ] Nicht-2xx-Antworten mit dem rohen Body protokolliert
FAQ
Kann ich das OpenAI-SDK verwenden? Nein. /v1/systemone ist keine OpenAI-kompatible Route.
Kann Jev einen Satz oder eine Zusammenfassung zurückgeben? Nein. Es beantwortet nur die typisierten Fragen, die Sie definieren.
Wie viele Fragen pro Anfrage? Die geprüften Tests verwendeten zwei und drei. Jede Frage erhöht Input- und Output-Tokens, daher sollten Sie nur das einbeziehen, worauf Sie reagieren werden.
Gibt es einen Versionsalias? Die Modellseite listet einen Alias jev-latest neben jev-1.13 auf. Fixieren Sie die explizite Version, wenn Reproduzierbarkeit wichtig ist.
Was kostet es? Die Modellseite veröffentlicht $0.0462 / M Input-Tokens und $0 / M Output-Tokens. Dies sind Herstellerangaben – bestätigen Sie die aktuelle Preisgestaltung, bevor Sie budgetieren.
Wie groß ist das Kontextfenster? Die Modellseite ist widersprüchlich: 64K in der Kopfzeile, 32K in der Anbietertabelle. Prüfen Sie dies anhand Ihrer längsten eigenen Eingabe, bevor Sie sich auf einen der Werte verlassen.
Geltungsbereich dieses Leitfadens
Alles oben Genannte wurde mit drei Live-Aufrufen gegen eine einzige Eingabe geprüft. Nicht abgedeckt sind Latenz, Batching, Durchsatz oder das Verhalten bei Eingaben, die dem Beispiel unähnlich sind. Die Konfidenzabweichung ist eine reproduzierte Beobachtung, keine gemessene Fehlerrate – wiederholen Sie sie mit Ihren eigenen Daten, bevor Sie eine Schwelle festlegen.
Jetzt auf AiHubMix starten
jev-1.13 ist über AiHubMix verfügbar, und die Modellseite enthält alles, worauf dieses Tutorial verweist: den Endpunkt /v1/systemone, die drei Fragetypen mit ihren criteria-Formaten, die vollständigen Antwortfelder sowie die veröffentlichte Preisgestaltung von $0.0462 / M Input-Tokens und $0 / M Output-Tokens. Der Alias jev-latest verweist auf die neueste Version und bleibt daher bei neuen Releases aktuell.
Hier beginnen: https://aihubmix.com/model/jev-latest
Nächste Schritte:
- Erstellen Sie ein AiHubMix-Konto und generieren Sie einen API-Schlüssel
- Kopieren Sie die Anfrage aus Schritt 3 und die Funktion
ask()aus Schritt 4 - Ersetzen Sie
statedurch einen echten Datensatz aus Ihrer eigenen Warteschlange - Vergleichen Sie das Ergebnis mit Ihrer aktuellen Klassifikation dieses Datensatzes
Wenn Ihnen dieser Leitfaden geholfen hat, abonnieren Sie künftige Beiträge zu Modellen mit strukturierter Ausgabe und Klassifikationspipelines.



