IA & agents

Jev : le code Spring Boot prêt à l’emploi

Le modèle qui n’écrit rien et qui décide.

PayantIntermédiaire15 min pour le faire4 min de lecture

Fiche récap

Coût
Payant
Niveau
Intermédiaire
Temps
15 min
Il te faut
  • Un projet Spring Boot
  • Une clé API TypeSafe (TYPESAFE_API_KEY)

1. C’est quoi, en deux lignes

Jev est un modèle de TypeSafe AI lancé le 15 septembre 2026. Il ne génère pas de texte : tu lui donnes un état (un mail, un ticket, un log) et des questions typées, et il te renvoie des réponses exploitables directement dans ton code, avec une probabilité.

TypeSafe appelle ça un modèle « System One ». Concrètement : pas de prompt à bricoler, pas de JSON à parser, pas de réponse hors format.

2. Les chiffres à connaître

Ce que tu regardes La valeur
Prix en entrée 0,042 $ par million de tokens
Prix en sortie Gratuit
Temps de réponse annoncé 70 à 500 ms
Mesuré dans l’article Spring 275 ms à une question, 310 ms à trois
Contexte 64k par requête, dont 32k pour l’état + la plus longue question
Entrée Texte uniquement, meilleur en anglais

3. Les trois types de questions

Type Tu demandes Tu reçois
Noul Une question oui/non Une valeur entre 0 et 1
Choice Choisir une étiquette L’étiquette, une probabilité par option, et une confiance
Score Placer sur une échelle ordonnée Une valeur continue, le barème, les probabilités par niveau, et une confiance

Le Noul n’a pas de confiance séparée : la valeur est la certitude. Un 0,5 veut dire indécis.

4. Installation

Ajoute la dépendance :

<dependency>
    <groupId>org.springaicommunity</groupId>
    <artifactId>spring-ai-starter-typesafe</artifactId>
    <version>0.1.0</version>
</dependency>

Ajoute aussi typesafe-spring-ai (même groupe, même version) si tu veux le juge et les advisors.

En Java pur sans Spring Boot, il te faut seulement typesafe-java-sdk.

Puis la clé :

spring.ai.typesafe.api-key=${TYPESAFE_API_KEY}

L’auto-configuration te donne un bean TypeSafeClient, sans rien câbler de plus.

5. L’exemple de base

Un ticket client, trois décisions, un seul appel :

SystemOneResponse response = typeSafeClient.systemOne(
        "Help! My payouts have been failing for 3 days.",
        Map.of(
            "is_urgent",   Noul.of("Does this convey urgency?"),
            "department",  Choice.builder()
                    .instructions("Which team should handle this?")
                    .option("billing",   "Payments, invoicing, refunds")
                    .option("technical", "Bugs, outages, integrations")
                    .option("sales",     "Pricing, upgrades, new accounts")
                    .build(),
            "frustration", Score.of("How frustrated is the customer?",
                    "Calm", "Frustrated", "Very angry")));

response.noulValue("is_urgent");            // 0.95
response.choiceValue("department");         // "billing"
response.choice("department").confidence(); // 0.82
response.scoreValue("frustration");         // 1.1

6. Le garde-fou

Deux advisors, deux rôles différents : la qualité réessaie, la sécurité a le dernier mot.

ChatClient.builder(chatModel)
    .defaultAdvisors(
        JevSelfRefineAdvisor.builder().judge(judge).build(),  // qualité : réessaie
        JevGuardrailAdvisor.builder(typeSafeClient).build())  // sécurité : dernier mot
    .build();

Une requête bloquée n’atteint jamais le modèle : zéro token généré, zéro euro dépensé.

Les seuils par défaut : au-dessus de 0,70 l’action du danger s’applique, entre 0,35 et 0,70 c’est un passage en revue humaine, en dessous ça passe.

7. Le juge

Chaque critère est une question plus le seuil qu’elle doit franchir :

JevJudge judge = JevJudge.builder(typeSafeClient)
    .score("helpfulness", helpfulnessRubric, 2.0d)
    .noul("is_plausible", plausible, 0.8d)
    .noul("is_grounded",  grounded, 0.8d)
    .build();

JevVerdict verdict = judge.judge(question, answer);

Un critère qui ne sait pas trancher revient en INCONCLUSIVE plutôt qu’en échec, et laisse décider ceux qui étaient sûrs. Mets failOnInconclusive(true) si une réponse non vérifiée est pire qu’une réponse rejetée.

8. Les quatre pièges

Écris de vraies descriptions d’options. Avec des étiquettes nues, la confiance tombe de 0,82 à 0,60 sur le même ticket.

Un Choice désigne toujours un gagnant, puisque les probabilités font 1. Si « aucune de ces options » est une réponse valable, pose-la comme un Noul séparé.

La confiance n’est pas une note de qualité, c’est une décision d’aiguillage. En dessous de ton seuil, tu envoies à un humain ou à un LLM.

Découpe tes questions. Sur un test indépendant de 2 000 mails de phishing, Jev fait 62,6 % en une grosse question, contre 81,3 % pour Claude Haiku. Découpé en cinq questions précises recombinées, il monte à 95 % contre 93,2 %, pour environ douze fois moins cher.

9. Quand l’utiliser, quand ne pas

Utilise Jev pour Garde un LLM pour
Juger, noter, évaluer contre des critères Générer la réponse elle-même
Classer et router avec un seuil de confiance Tout ce dont la sortie est du texte
Filtrer des prompts ou des passages retrouvés Résumer, rédiger, expliquer
Mettre une vérification pas chère devant un appel cher Le raisonnement ouvert

À savoir aussi : Jev ne fait pas de streaming, l’état doit être une chaîne, un objet, un tableau ou null (un simple nombre renvoie une erreur 422), et le travail par document, c’est un appel par document.

Publié le

Sources et liens officiels

Guides & ressources

Testé sur ma machine

Des guides pas à pas et des sélections de sites pour progresser en dev, IA, data ou cyber. Gratuit, sans inscription.

La newsletter du lundi

L’actu tech en 5 minutes

Chaque lundi, les sujets IA, tech et dev de la semaine expliqués simplement, plus mes nouveaux guides. Zéro spam.

En vidéo

Un outil par vidéo

Chaque semaine, un outil, une astuce ou une ressource, avec le guide à récupérer en commentaire.

L’actu tech en 5 minutes, chaque lundi

Les sujets IA, tech et dev de la semaine expliqués simplement, plus mes nouveaux guides. Gratuit, désinscription en un clic.