Kort antwoord: jev-1.13 genereert geen tekst. Je stuurt een stuk tekst en een reeks benoemde vragen via POST naar https://aihubmix.com/v1/systemone, en je krijgt getypte antwoorden terug, gesleuteld op je eigen vraagnamen: een categorie, een score of een kans. Er is niets om te parsen. Hieronder staan een werkend verzoek, het volledige antwoordformaat en de ontwerpfout die stilletjes je nauwkeurigheid kost.
Waarvoor Jev is bedoeld
Gebruik het wanneer je een oordeel nodig hebt, geen alinea: een supportticket routeren, ernst beoordelen, urgentie markeren, content filteren. De modelpagina zegt het duidelijk: "Geen tekstgeneratie, niets om te parsen."
Gebruik in plaats daarvan een normaal chatmodel wanneer je uitleg, samenvattingen of vrije uitvoer nodig hebt. jev kan die niet produceren.
Voordat je begint
- [ ] Python 3 geïnstalleerd (de standaardbibliotheek is voldoende)
- [ ] Een AiHubMix-account en API-sleutel
- [ ] Sleutel geëxporteerd als
AIHUBMIX_API_KEY, nooit hardcoded in de broncode
Je hebt geen OpenAI-SDK, LangChain of het requests -pakket nodig.
Stap 1 — Ken het endpoint
POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json
Dit is een modelspecifieke route, geen /v1/chat/completions. OpenAI-compatibele clients kunnen hem niet aanroepen. Gebruik gewone HTTP.
Stap 2 — Kies je vraagtypen
Er zijn er drie, en je kunt ze vrij combineren in één verzoek:
| Type | Gebruik voor | Jij levert |
|---|---|---|
choice | Eén categorie kiezen | criteria als dict: label → definitie |
score | Beoordeling op een geordende schaal | criteria als lijst, laagste eerst |
noul | Een ja/nee-oordeel | niets meer dan instructions |
Stap 3 — Bouw het verzoek
state is de tekst die beoordeeld moet worden. questions -sleutels zijn namen die jij verzint; het antwoord gebruikt dezelfde 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",
},
},
}
Stap 4 — Verstuur het met de standaardbibliotheek
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]}")
Houd de opbouw van het verzoek binnen een functie. Als je op modulniveau bouwt en verstuurt, roept het importeren van het bestand de aanroep opnieuw aan en verbruikt het tokens.
Stap 5 — Lees de antwoorden
Elk antwoord slaat zijn waarde op onder een sleutel die overeenkomt met zijn type, dus één accessor dekt alle drie:
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"))
Geverifieerde uitvoer:
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
usage: {'input_tokens': 424, 'output_tokens': 73}
Stap 6 — Begrijp de volledige envelop
De printlus verbergt nuttige velden. De ruwe JSON voor een score -antwoord:
{
"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
}
legendkoppelt de index terug aan je eigen formulering; het gehele getal is zelfbeschrijvend, dus je hebt in je code geen opzoektabel nodig.probabilitiesgeeft de volledige verdeling, handig om een bijna-gelijkspel te herkennen.noulheeft geenconfidence-veld. De kans is het signaal.
Het bovenste niveau geeft ook usage, id, provider (TypeSafe) en de opgeloste backendversie typesafe/jev-1.13-20260917 terug.
De fout die je nauwkeurigheid kost
In het bovenstaande verzoek gaf department het label billing terug met een zekerheid van 0.51. Hetzelfde verzoek nogmaals gaf hetzelfde label terug met 0.38 — het antwoord was stabiel, de opgegeven zekerheid niet.
De oorzaak zit in de criteria, niet in het model. billing is "Betalings- of abonnementsproblemen" en technical is "Bugs of integratieproblemen." Een Stripe-integratie die blijft mislukken past echt bij beide. Het model meldde een ambiguïteit die in het schema was ingebouwd.
Twee regels voor productie:
- Schrijf
choice-criteria die elkaar uitsluiten. Als een mens zou aarzelen tussen twee labels, doet het model dat ook. - Stel een betrouwbaarheidsdrempel in en stuur resultaten met lage zekerheid naar een menselijke wachtrij in plaats van ze als beslissingen te accepteren. Een model dat onzekerheid toegeeft is waardevoller dan een model dat die verbergt.
Checklist vóór lancering
- [ ] Sleutel geladen uit de omgeving of een bestand met
600-modus dat je VCS negeert - [ ]
choice-criteria gecontroleerd op overlap - [ ] Betrouwbaarheidsdrempel bepaald, met een terugvalpad eronder
- [ ]
noul-antwoorden apart afgehandeld — die hebben geenconfidence - [ ] Ongebruikte vragen verwijderd (3 vragen kosten 424 invoertokens; 2 kosten 355)
- [ ] Niet-2xx-antwoorden gelogd met de ruwe body
Veelgestelde vragen
Kan ik de OpenAI-SDK gebruiken? Nee. /v1/systemone is geen OpenAI-compatibele route.
Kan jev een zin of samenvatting teruggeven? Nee. Het beantwoordt alleen de getypte vragen die jij definieert.
Hoeveel vragen per verzoek? De geverifieerde tests gebruikten er twee en drie. Elke vraag voegt invoer- en uitvoertokens toe, dus neem alleen op wat je daadwerkelijk gaat gebruiken.
Is er een versie-alias? De modelpagina vermeldt een jev-latest -alias naast jev-1.13. Zet de expliciete versie vast als reproduceerbaarheid belangrijk is.
Wat kost het? De modelpagina publiceert $0.0462 / M invoertokens en $0 / M uitvoertokens. Dit zijn cijfers van de leverancier — controleer de actuele prijzen voordat je een budget opstelt.
Hoe groot is het contextvenster? De modelpagina is inconsistent: 64K in de kop, 32K in de providertabel. Verifieer dit aan de hand van je langste invoer voordat je op een van beide vertrouwt.
Reikwijdte van deze gids
Alles hierboven is geverifieerd met drie live-aanroepen op één invoer. Het behandelt geen latentie, batching, doorvoer of gedrag bij invoer die afwijkt van het voorbeeld. De verschuiving in zekerheid is een gereproduceerde observatie, geen gemeten foutpercentage — herhaal dit met je eigen data voordat je een drempel instelt.
Aan de slag op AiHubMix
jev-1.13 is beschikbaar via AiHubMix, en de modelpagina bevat alles waarnaar deze handleiding verwijst: het endpoint /v1/systemone, de drie vraagtypen met hun criteria-formaten, de volledige antwoordvelden en de gepubliceerde prijzen van $0.0462 / M invoertokens en $0 / M uitvoertokens. De jev-latest -alias verwijst naar de nieuwste release, dus die blijft actueel naarmate versies veranderen.
Begin hier: https://aihubmix.com/model/jev-latest
Volgende stappen:
- Maak een AiHubMix-account aan en genereer een API-sleutel
- Kopieer het verzoek uit Stap 3 en de
ask()-functie uit Stap 4 - Vervang
statedoor een echt record uit je eigen wachtrij - Vergelijk het resultaat met hoe je dat record nu classificeert
Als deze gids nuttig was, abonneer je dan op toekomstige posts over gestructureerde-uitvoermodellen en classificatiepijplijnen.



