5 minutes pour commencer
Obtenez la clé API, effectuez votre premier appel Jev à l’aide de cURL ou du SDK, et comprenez la structure de la réponse.
Traduit automatiquement depuis le zh-CN, non relu. À utiliser comme référence rapide uniquement.

Étape 1 : Tester dans le Playground
Ouvrez le Playground et connectez-vous. Collez n’importe quel texte dans le champ state :
Hi, I've been trying to connect my Stripe account for 3 days and it keeps failing.
I'm losing sales. Please help ASAP.
Ajoutez ensuite une question de type Noul :
{
"urgency": {
"type": "noul",
"instructions": "Does this message express urgency?"
}
}
Vous obtiendrez immédiatement une valeur comprise entre 0 et 1. Une valeur proche de 1 indique que le modèle estime que la réponse est « oui ».
La valeur du Playground réside dans l’itération rapide : mélangez les questions de type Noul, Choice et Score, et observez tous les résultats en un seul appel pour vérifier que la formulation des questions atteint l’objectif souhaité.
Étape 2 : Obtenir la clé API
Créez une clé sur le dashboard, puis définissez la variable d’environnement :
export TYPESAFE_API_KEY="sk-..."
Étape 3 : Appeler l’API
Tous les modèles sont servis par le même point de terminaison :
POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <API_KEY>
Content-Type: application/json
Exemple cURL minimal fonctionnel :
curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"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"
}
}
}'
Étape 4 : Utiliser le SDK (recommandé)
Le SDK lit par défaut la clé TYPESAFE_API_KEY depuis les variables d’environnement et appelle jev-latest par défaut.
Python
pip install typesafe-sdk # ou uv add typesafe-sdk
from typesafe_sdk import AsyncTypeSafeClient, Choice, Noul, Score
async def main() -> None:
async with AsyncTypeSafeClient() as client:
response = await client.system_one(
state={"document": "I was charged twice. Please fix this ASAP."},
questions={
"billing": Noul(instructions="Is this ticket about billing?"),
"tone": Choice(
instructions="What is the customer's tone?",
criteria={"calm": None, "frustrated": None, "angry": None},
),
"urgency": Score(
instructions="How urgent is this ticket?",
criteria=["can wait", "this week", "today"],
),
},
)
print(response.nouls["billing"].noul)
print(response.choices["tone"].choice)
print(response.scores["urgency"].score)
TypeScript / JavaScript
npm install @typesafe-ai/sdk # nécessite Node.js 20+
import { choice, TypeSafeClient } from "@typesafe-ai/sdk";
const client = new TypeSafeClient();
const response = await client.systemOne({
state: { document: "I was charged twice. Please fix this ASAP." },
questions: {
category: choice("What is this ticket about?", {
billing: null,
technical: null,
other: null,
}),
},
});
console.log(response.answers.category.choice);
L’un des grands avantages du SDK TypeScript est que les types des réponses sont déduits automatiquement à partir des questions : les questions transmises déterminent le type de la valeur de retour, permettant de détecter les erreurs de nom de champ dès la compilation.
À quoi ressemblent les réponses
Le type de chaque réponse est déterminé par le type de la question :
| Type | Champ de retour | Signification |
|---|---|---|
choice |
choice / probabilities / confidence |
Option sélectionnée, distribution de probabilité des options, niveau de confiance |
score |
score / legend / probabilities / confidence |
Position du score (peut se situer entre deux niveaux), légende des niveaux, distribution de probabilité, niveau de confiance |
noul |
noul |
Probabilité que la réponse soit « oui », ne contient pas de champ confidence |
Contrainte clé : la réponse se situe toujours dans les options que vous avez fournies. Le modèle renvoie une distribution de probabilité sur les options que vous avez définies ; il ne génère jamais de valeurs en dehors de cet ensemble. Il n’est donc pas nécessaire d’écrire de code pour restaurer la sémantique lors de l’analyse des réponses.
Pièges courants
- Le
statedans l’état n’est lu qu’une seule fois : Le modèle lit le state une fois, puis évalue toutes les questions en parallèle. Regroupez donc plusieurs questions dans une seule requête dès que possible, car le coût de latence supplémentaire est quasi nul. - Les entrées non textuelles doivent être converties : Les images, l’audio et la vidéo doivent d’abord être convertis en texte ou en champs structurés avant d’être transmis en tant que state.
- Retour 429 en cas de dépassement de limite : Le SDK officiel réessaie par défaut avec une stratégie de backoff et respecte l’en-tête
retry-after; si vous appelez l’API HTTP directement, vous devez implémenter cette logique vous-même.
Prochaines étapes
- Primitif Choice — Base de la classification et du routage
- Primitif Score — Évaluation et classement
- Primitif Noul — Validation et garde-fou
- Confiance — Utilisation de la confiance pour contrôler le comportement du système