Jev ist das Entscheidungsmodell von TypeSafe AI. Sie senden ihm einen Teil des Zustands und eine Reihe von typisierten Fragen, und es antwortet mit Wahrscheinlichkeiten anstelle von Prosa. Dieser Leitfaden behandelt den Jev API-Schlüssel und Ihre erste Anfrage; für den Hintergrund, was Jev ist und warum es Zahlen anstelle von Text zurückgibt, lesen Sie zuerst was Jev ist. Zur Klarstellung, da die Suchergebnisse unübersichtlich sind: Dies ist Jev das TypeSafe AI-Modell, nicht FaZe Jev der YouTuber und auch nicht der JEV-Impfstoff.
Ein Jev API-Schlüssel funktioniert wie jeder andere Bearer-Token. Wenn Sie neu in diesem Muster sind, behandelt was ein API-Schlüssel ist die Grundlagen. Der direkte API-Zugriff befindet sich im Early Access, daher ist Schritt eins, von der Warteliste zu kommen. Danach erstellen Sie den Schlüssel, lernen die Anfrageform kennen, rufen den Endpunkt mit curl und dem Python SDK auf, lesen die Wahrscheinlichkeitsfelder und verdrahten die Anfrage in Apidog mit Zusicherungen auf diese Wahrscheinlichkeiten. Wenn Sie nicht warten können, ist dasselbe Modell im Vercel AI Gateway ohne Warteliste verfügbar; die FAQ behandelt diesen Weg.
Schritt 1: Early Access erhalten, dann den Schlüssel erstellen
Jev befindet sich zum Zeitpunkt der Erstellung dieses Artikels im Early Access. In TypeSafes Startbeitrag heißt es, dass sie „Entwickler so schnell wie möglich von der Warteliste holen“, melden Sie sich also auf typesafe.ai für die Warteliste an und warten Sie auf die Konsoleneinladung; es gibt noch keine Self-Service-Anmeldung. Sobald Ihr Konsolenkonto aktiv ist, gehen Sie zu console.typesafe.ai/settings/keys und erstellen Sie einen Schlüssel. Kopieren Sie ihn einmal und behandeln Sie ihn wie ein Passwort.
Exportieren Sie ihn als Umgebungsvariable, anstatt ihn in den Code einzufügen:
export TYPESAFE_API_KEY="ts_..."
Die offiziellen curl-Beispiele und das Python SDK lesen beide TYPESAFE_API_KEY aus der Umgebung, sodass eine Variable jedes Beispiel unten abdeckt. Sollte ein Schlüssel jemals in einem Commit landen, rotieren Sie ihn in der Konsole und führen Sie eine API-Schlüssel-Leck-Prüfung im gesamten Repository durch.
Schritt 2: die Form der Anfrage verstehen
Jeder Jev-Aufruf ist ein einzelner POST https://api.typesafe.ai/v1/systemone mit drei Body-Feldern, die in der TypeSafe API-Referenz dokumentiert sind:
| Feld | Typ | Was es ist |
|---|---|---|
model |
String | jev-latest (löst heute zu jev-1.13.0 auf) oder jev-preview für den neuesten Build |
state |
String, Objekt oder Array | Der zu bewertende Inhalt: ein Ticket, ein JSON-Datensatz, ein Nachrichtenverlauf |
questions |
Map von Name zu Frage | Die typisierten Fragen, die Jev anhand des Zustands beantwortet |
Jede Frage ist eines von drei Primitiven:
| Primitiv | Anfragekriterien | Antwortfelder |
|---|---|---|
noul (Ja/Nein) |
optional {"true": "...", "false": "..."} |
noul: 0 (Nein) bis 1 (Ja) |
choice |
erforderliche Map von Option zu Beschreibung, bis zu 255 Optionen | choice, confidence, probabilities pro Option |
score |
erforderliches geordnetes Array von 2 bis 10 Levelbeschreibungen | score, confidence, legend, probabilities pro Level |
Die Antwort enthält auch model und usage.input_tokens / usage.output_tokens. Fragen unterschiedlicher Typen können einen Zustand teilen und in einem einzigen Roundtrip zurückgegeben werden.
Schritt 3: die erste Anfrage mit curl stellen
Diese Anfrage führt alle drei Primitive gegen ein Support-Ticket aus:
curl https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "My card was charged twice for one order and nobody has replied in three days.",
"questions": {
"needs_review": {
"type": "noul",
"instructions": "Does this ticket need a human agent?",
"criteria": {
"true": "money, legal, or an unanswered complaint",
"false": "a routine question a bot can close"
}
},
"route": {
"type": "choice",
"instructions": "Route this ticket to a team.",
"criteria": {
"billing": "payment or charge problems",
"shipping": "delivery problems",
"technical": "application bugs"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is this ticket?",
"criteria": ["low", "medium", "high"]
}
}
}'
Eine Antwort sieht so aus (Werte sind beispielhaft):
{
"model": "jev-1.13.0",
"answers": {
"needs_review": { "type": "noul", "noul": 0.97 },
"route": {
"type": "choice",
"choice": "billing",
"confidence": 0.98,
"probabilities": { "billing": 0.98, "shipping": 0.01, "technical": 0.01 }
},
"urgency": {
"type": "score",
"score": 1.6,
"confidence": 0.62,
"legend": { "0": "low", "1": "medium", "2": "high" },
"probabilities": { "0": 0.02, "1": 0.36, "2": 0.62 }
}
},
"usage": { "input_tokens": 190, "output_tokens": 0 }
}
Schritt 4: die Wahrscheinlichkeitsfelder lesen
Lesen Sie die Zahlen genau:
noulist die Wahrscheinlichkeit für „Ja“. 0.97 bedeutet, dass Jev zu 97 % sicher ist, dass dieses Ticket einen Menschen benötigt.choiceist die Option mit der höchsten Wahrscheinlichkeit,probabilitieslistet jede Option auf, undconfidencesagt Ihnen, wie entscheidend die Auswahl war. Eine Route von 0.98 ist sicher zu automatisieren; eine Route von 0.51 mit 0.47 für den Zweitplatzierten ist ein Münzwurf.scoreist die wahrscheinlichkeitsgewichtete Position über die geordneten Level hinweg, sodass 1.6 zwischen „mittel“ (1) und „hoch“ (2) liegt.legendordnet jeden Index seinem Label zu, undprobabilitieszeigt die volle Verteilung.
Da die Ausgabe eine Verteilung und kein Label ist, legen Sie den Schwellenwert fest, nicht das Modell. Deshalb testen die Zusicherungen in Schritt 6 Zahlen.
Schritt 5: derselbe Aufruf mit dem Python SDK
Installieren Sie das SDK; der Client liest TYPESAFE_API_KEY aus der Umgebung aus:
pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
with TypeSafeClient() as client:
response = client.system_one(
state="My card was charged twice for one order and nobody has replied in three days.",
questions={
"needs_review": Noul(
instructions="Does this ticket need a human agent?",
criteria={"true": "money, legal, or an unanswered complaint",
"false": "a routine question a bot can close"},
),
"route": Choice(
instructions="Route this ticket to a team.",
criteria={"billing": "payment or charge problems",
"shipping": "delivery problems",
"technical": "application bugs"},
),
"urgency": Score(
instructions="How urgent is this ticket?",
criteria=["low", "medium", "high"],
),
},
)
print(response.nouls["needs_review"].noul)
print(response.choices["route"].choice, response.choices["route"].probabilities)
print(response.scores["urgency"].score)
Antworten werden auf dem Antwortobjekt nach Typ gruppiert (nouls, choices, scores). Es gibt ein JavaScript SDK mit derselben Struktur, und wenn Sie bereits Vercel AI Gateway nutzen, ruft experimental_evaluate aus AI SDK 7 das Modell als typesafe-ai/jev auf, mit einem Unterschied: Der boolesche Fragetyp gibt ein probability-Feld anstelle von noul zurück.
Schritt 6: den Jev API-Schlüssel in Apidog speichern und testen
Curl beweist, dass der Schlüssel einmal funktioniert. Apidog macht die Anfrage für das gesamte Team wiederholbar, überprüfbar und mockbar.
Speichern Sie den Schlüssel als geheime Variable. Erstellen Sie eine Umgebung namens TypeSafe und fügen Sie TYPESAFE_API_KEY als Geheimnis hinzu, damit sein Wert in der Benutzeroberfläche und bei Exporten maskiert bleibt; Apidog-Umgebungen und geheime Variablen erklärt die Einrichtung. Setzen Sie die Authentifizierung der Anfrage auf Bearer Token mit {{TYPESAFE_API_KEY}} als Wert.
Erstellen Sie die POST-Anfrage. Fügen Sie eine POST-Anfrage an https://api.typesafe.ai/v1/systemone hinzu, fügen Sie den JSON-Body aus Schritt 3 ein und senden Sie sie ab. Das Antwortpanel rendert den Antwortbaum, sodass Sie die Wahrscheinlichkeiten überprüfen können, bevor Sie eine Zusicherung schreiben.
Prüfen Sie Wahrscheinlichkeiten, nicht Prosa. Im visuellen Zusicherungs-Builder zeigen Sie JSONPath-Ausdrücke auf die Felder, die Sie interessieren:
$.answers.needs_review.noulist größer als0.9$.answers.route.choiceist gleichbilling$.answers.route.probabilities.billingist größer als0.8$.answers.urgency.scoreist größer oder gleich1$.usage.input_tokensist kleiner als1000
Wenn Sie Skripte bevorzugen, akzeptiert der Post-Prozessor die bekannte pm-API:
const body = pm.response.json();
pm.test("ticket flagged for a human", () => {
pm.expect(body.answers.needs_review.noul).to.be.above(0.9);
});
pm.test("routed to billing", () => {
pm.expect(body.answers.route.choice).to.eql("billing");
});
Speichern Sie es als Testszenario. Fügen Sie die Anfrage in ein Testszenario mit einer kleinen CSV-Datei von Tickets und erwarteten Routen ein und führen Sie es bei jeder Änderung Ihrer Anweisungen oder Kriterien aus. Prompt-Bearbeitungen sind Codeänderungen; ein Zehn-Zeilen-Szenario fängt die Bearbeitung ab, die leise eine 0.95 auf 0.6 verschiebt. Dasselbe Szenario läuft in CI über die Apidog CLI, sodass eine Regression das Mergen blockiert.
Simulieren Sie die deklarierte Antwortform. Definieren Sie das Antwortschema am Endpunkt (die drei Antwortobjekte plus usage), und Apidogs Smart Mock liefert sofort realistische gefälschte Wahrscheinlichkeiten. Das Frontend kann das „Review erforderlich“-Badge und die Routing-UI anhand des Mocks erstellen, bevor das Backend ausgeliefert wird, und dann die Mock-URL mit einer Umgebungsänderung gegen den echten Endpunkt austauschen.
Für die Planung der Plätze: Der kostenlose Plan von Apidog beinhaltet 4 Benutzer, und kostenpflichtige Stufen sind pro Platz.
Schwellenwerte im Code
Sobald die Zusicherungen erfolgreich sind, treiben dieselben Zahlen die Produktionslogik an. Halten Sie Schwellenwerte an einem Ort und benennen Sie sie:
REVIEW_THRESHOLD = 0.9
AUTO_ROUTE_CONFIDENCE = 0.85
needs_review = response.nouls["needs_review"].noul >= REVIEW_THRESHOLD
route = response.choices["route"]
if route.confidence >= AUTO_ROUTE_CONFIDENCE and not needs_review:
assign(ticket, team=route.choice)
else:
queue_for_human(ticket, suggested=route.choice)
Protokollieren Sie die vollständige probabilities-Map bei jeder Entscheidung, damit Sie Schwellenwerte später anhand realer Daten anpassen können, und machen Sie die menschliche Überprüfung zum Standard, wenn die Konfidenz niedrig ist; das Modell sagt Ihnen, dass es sich nicht sicher ist.
Limits, Preise und Modelle
Direkt von der TypeSafe-Modellseite:
| Punkt | Wert |
|---|---|
| Preis | 0,042 $ pro Million Input-Tokens; Output-Tokens werden nicht berechnet |
| Ratenbegrenzungen | 250.000 Tokens pro Sekunde und 1.200 Anfragen pro Minute, dynamisch angepasst unter Last |
| Kontext | 64k Tokens pro Anfrage; 32k für den Zustand plus die längste einzelne Frage |
| Eingabe | Nur Text: ein String, JSON-Objekt oder Array. Keine Bilder, Audio oder Video |
| Sprache | Englisch liefert die beste Genauigkeit; andere Sprachen funktionieren, aber nicht gleichermaßen gut |
| Aliase | jev-latest ist der stabile Standard; jev-preview verfolgt die neueste Version |
Zu diesem Preis kosten eine Million kurzer Tickets weniger als 10 $. TypeSafe gibt auch an, dass Jev nicht auf Kundenanfragen oder -antworten trainiert wird.
Häufige Fehler und wie man sie behebt
| Status | Bedeutung | Lösung |
|---|---|---|
| 401 Nicht autorisiert | Fehlender oder ungültiger API-Schlüssel | Überprüfen Sie den Authorization: Bearer-Header und stellen Sie sicher, dass die Umgebungsvariable in der Shell oder Umgebung, aus der Sie ausführen, gesetzt ist |
| 422 Unverarbeitbare Entität | Anfragekörper konnte nicht validiert werden | Häufige Ursachen: ein choice ohne criteria, ein score mit weniger als 2 Levels, ein falsch geschriebener type oder questions als Array anstelle einer Map gesendet |
| 429 Zu viele Anfragen | Ratenbegrenzung überschritten | Mit Jitter zurückweichen und wiederholen; mehrere Fragen in einer Anfrage bündeln, um die Anzahl der Anfragen zu reduzieren |
| 529 Überlastet | TypeSafe ist vorübergehend überlastet | Mit exponentiellem Backoff wiederholen; die Anfrage kann sicher wiederholt werden |
Ein 422er Fehler ist derjenige, auf den Sie beim Iterieren am häufigsten stoßen werden; das Endpunktschema aus Schritt 6 fängt die meisten davon ab, bevor die Anfrage Ihren Rechner verlässt.
FAQ
Gibt es eine kostenlose Stufe für die Jev API? Die öffentlichen Dokumente listen die Token-basierte Preisgestaltung auf und beschreiben keine kostenlose Stufe oder Startguthaben, und der Zugang selbst ist derzeit mit einer Warteliste versehen. Überprüfen Sie die Konsole, sobald Ihre Einladung eintrifft, um das aktuelle Angebot zu sehen, und betrachten Sie jede andere Zahl, die Sie anderswo sehen, als inoffiziell.
Kann ich mehrere Antworten mit einer Anfrage erhalten? Ja. questions ist eine Map, sodass ein Noul, eine Choice und ein Score alle in einem einzigen Aufruf gegen einen Zustand ausgeführt werden können. Das ist günstiger als drei Anfragen und hält die Antworten konsistent, da sie eine Eingabe teilen.
Wie unterscheidet sich das von strukturierten Ausgaben eines Chat-Modells? Strukturierte Ausgaben zwingen ein Sprachmodell, gültiges JSON auszugeben, aber die Werte darin sind immer noch generierte Tokens, und ein „confidence“-Feld ist Text, den das Modell über sich selbst geschrieben hat. Jev gibt gemessene Wahrscheinlichkeiten als native Ausgabe zurück, weshalb Sie noul > 0.9 zusichern und dem Vergleich vertrauen können.
Benötige ich das SDK von TypeSafe, wenn ich Vercel nutze? Nein. Das Vercel AI SDK stellt Jev über experimental_evaluate mit typesafe-ai/jev als Modell-ID bereit. Sie authentifizieren sich mit Ihrem AI Gateway-Schlüssel anstelle eines TypeSafe-Schlüssels, und die boolesche Antwort wird als probability zurückgegeben.
Nächste Schritte
Sie haben jetzt einen Jev API-Schlüssel, eine funktionierende Anfrage in curl und Python und ein klares Verständnis von noul, choice und score. Fügen Sie die Anfrage in Apidog ein, fügen Sie die Wahrscheinlichkeitszusicherungen hinzu und speichern Sie das Testszenario, damit Prompt-Bearbeitungen wie Code getestet werden. Laden Sie Apidog herunter, um mitzumachen.
