Wie man Jev auf AiHubMix aufruft: Ein Tutorial zur strukturierten Klassifikation

AIHubMix5 Min. Lesezeit
Wie man Jev auf AiHubMix aufruft: Ein Tutorial zur strukturierten Klassifikation

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_KEY exportiert, 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:

TypVerwendung fürSie liefern
choiceAuswahl einer Kategoriecriteria als Dictionary: Bezeichnung → Definition
scoreBewertung auf einer geordneten Skalacriteria als Liste, niedrigster Wert zuerst
noulEin Ja/Nein-Urteilnichts 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
}
  • legend ordnet den Index wieder Ihrer eigenen Formulierung zu – die Ganzzahl ist selbsterklärend, Sie benötigen also keine Nachschlagetabelle in Ihrem Code.
  • probabilities liefert die vollständige Verteilung, nützlich zum Erkennen eines knappen Kopf-an-Kopf-Rennens.
  • noul hat kein confidence-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:

  1. 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.
  2. 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 keine confidence
  • [ ] 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:

  1. Erstellen Sie ein AiHubMix-Konto und generieren Sie einen API-Schlüssel
  2. Kopieren Sie die Anfrage aus Schritt 3 und die Funktion ask() aus Schritt 4
  3. Ersetzen Sie state durch einen echten Datensatz aus Ihrer eigenen Warteschlange
  4. 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.

Ein Gateway zu mehreren KI-Anbietern. Gebaut für den Produktiveinsatz.

AIHubMix besuchen