Les agents fonctionnent en boucle : un LLM décide quoi faire, un outil exécute l'action, un modèle évalue les résultats, puis la boucle continue jusqu'à ce que la tâche soit terminée.
Intégrer initialement les agents et les LLM dans des applications logicielles était difficile, car celles-ci dépendent de données structurées et d'interfaces prévisibles. Deux primitives ont émergé pour simplifier grandement cette intégration :
- Tool calling permet aux modèles d'effectuer des requêtes structurées et de recevoir des résultats structurés.
- Structured outputs permet aux modèles de renvoyer des résultats structurés.
Mais même avec ces éléments en place, la boucle de l'agent reste lente et coûteuse : chaque décision nécessite un nouvel appel au modèle.
Voici Jev. Jev est un nouveau modèle publié par TypeSafe AI. L'entreprise rapporte une inférence jusqu'à 200x plus rapide et un coût 400x inférieur par rapport aux LLM comparables sur les tâches de classification.
https://x.com/CompleteSkeptic/status/2099925682726002904
Cet article explique le fonctionnement de Jev, sa place dans la boucle de l'agent et comment l'utiliser avec LangChain.
Tout savoir sur Jev
Jev n'est pas un LLM traditionnel, il ne génère pas de texte. C'est ce que l'équipe de TypeSafe AI appelle un modèle System One :
📖 Les modèles System One sont une classe de modèles d'IA conçus pour prendre des décisions rapides et structurées que les logiciels peuvent utiliser directement. Un modèle System One évalue un
state et renvoie des réponses typées et des probabilités.
Il est entraîné à l'aide de reinforcement learning for calibrated decisions (RLCD). Votre code utilise ces résultats pour guider les prochaines actions de l'agent, sans nécessiter un appel complet au chat LLM pour chaque décision.
Pour invoquer un modèle Jev, vous lui envoyez un state (le contexte) et des questions concernant ce state. Voici une version à question unique de l'exemple de ticket de support tiré de leur documentation :
1{2 "model": "jev-latest",3 "state": "Bonjour, j'essaie de connecter mon compte Stripe depuis 3 jours et cela échoue continuellement. Je perds des ventes. Merci de m'aider ASAP.",4 "questions": {5 "is_urgent": {6 "type": "noul",7 "instructions": "Le message transmet une urgence ou une sensibilité temporelle"8 }9 }10}
L'exemple de la documentation donne cette réponse concernant l'urgence, présentée ici sans le reste de la réponse :
1{2 "is_urgent": {3 "type": "noul",4 "noul": 0.9995 }6}
Cela représente une probabilité de 99,9 % que le message soit urgent, information que votre application peut utiliser pour prioriser le ticket.
Il existe trois types de questions prises en charge :

- Choice : Choisir parmi un ensemble d'options. Renvoie une probabilité pour chaque option et un score de confiance global.
- Score : Évaluer une entrée selon des niveaux ordonnés, tels que faible, moyen et élevé. Renvoie un score continu, la distribution sous-jacente et une valeur de confiance.
- Noul : Répondre à une question oui/non. Renvoie la probabilité qu'une affirmation soit vraie.
Une caractéristique clé est que vous pouvez poser plusieurs questions sur le même state dans une seule requête.
💡 Les modèles System One évaluent toutes les questions d'une requête en parallèle. Ajouter des questions modifie à peine le temps de réponse et ne coûte que les tokens supplémentaires pour ces questions, qui sont peu onéreux.
Pour un exemple de pose de plusieurs questions sur un ticket de support, consultez le TypeSafe Quickstart.
En résumé, contrairement aux LLM traditionnels, Jev n'est limité ni par la génération de texte ni par la prise de décision séquentielle !
Comment utiliser Jev avec LangChain
Le modèle agnostique vis-à-vis du fournisseur de LangChain est bien adapté pour supporter Jev aux côtés de milliers d'autres intégrations et fournisseurs de modèles.
L'intégration LangChain expose Jev via TypeSafeClassifier. Vous passez votre state et vos questions à .invoke(), et obtenez des résultats de classification plutôt qu'une réponse de chat.
Installez langchain-typesafe et définissez votre TYPESAFE_API_KEY, puis effectuez un appel :
1from langchain_typesafe import Noul, TypeSafeClassifier23classifier = TypeSafeClassifier()45response = classifier.invoke(6 state=(7 "The deploy failed twice and customers are seeing 500s. "8 "Can someone look now?"9 ),10 questions={11 "urgent": Noul(12 instructions="Does this need attention right now?"13 ),14 },15)1617urgency = response.nouls["urgent"].noul
Le state peut être du texte, des données structurées ou des messages LangChain. Cela rend simple l'appel à Jev depuis un nœud ou un hook de middleware en utilisant le contexte déjà disponible pour votre agent.
Vous pouvez intégrer cela dans des middlewares ou des outils personnalisés !
Cas d'utilisation
Jev n'est pas un remplacement direct d'un LLM. Il ne génère pas de texte, mais il peut gérer les tâches de classification pour lesquelles nous utilisons souvent des LLM aujourd'hui, sans la même latence ni le même coût. Cela en fait un complément prometteur au modèle pilotant votre agent : utilisez un LLM pour le raisonnement ouvert et la génération, et Jev pour les décisions rapides et structurées en cours de route.
Model routing
Une recherche simple ne nécessite pas le même modèle qu'une tâche de débogage complexe. Le middleware de model-routing permet à Jev d'évaluer la requête et de choisir un modèle basé sur des critères que vous définissez, afin d'être rapide et économique pour les tâches simples, et plus performant pour les tâches complexes.
1from langchain.agents import create_agent2from langchain_typesafe.experimental.middleware import (3 ModelChoice,4 ModelRouterMiddleware,5)67router = ModelRouterMiddleware(8 choices={9 "fast": ModelChoice(10 model="openai:luna",11 criteria="Direct lookups, extraction, and localized changes.",12 ),13 "powerful": ModelChoice(14 model="openai:sol",15 criteria="Architecture and high-stakes decisions.",16 ),17 },18 instructions="Choose the least costly model that can complete the task.",19)2021agent = create_agent("openai:gpt-5.6-luna", middleware=[router])
Le routeur sélectionne un modèle à partir du dernier message utilisateur et l'utilise tout au long de l'exécution. Les probabilités et la confiance restent également disponibles dans l'état de l'agent.
Auto Mode
Les agents restent intrinsèquement peu fiables. Un agent peut recevoir de mauvaises instructions (soit naturellement, soit d'un attaquant suffisamment motivé) qui peuvent le persuader de prendre des actions que nous ne voulions pas qu'il prenne.
Des environnements de codage comme claude, codex, cursor ont intégré une sorte de moyen de classer les actions dangereuses avant qu'elles ne soient exécutées, ce qui a lentement contribué à bâtir la confiance envers les agents. Jusqu'à présent, cette étape de classification était verrouillée dans les parties closed source de l'environnement.
Maintenant qu'un modèle de classification bon marché et performant existe, nous pouvons adopter le même pattern pour tous les agents !
1from langchain.agents import create_agent2from langchain_typesafe.experimental.middleware import (3 AutoModeMiddleware,4)56guardrail = AutoModeMiddleware(tools=["bash"])78agent = create_agent("openai:gpt-5.6-luna", middleware=[guardrail])
AutoModeMiddleware utilise Jev pour vérifier les appels d'outils concernant les décisions risquées qu'ils pourraient prendre, et bloque les appels avant que l'outil ne s'exécute.
Commencer !
Nous sommes très enthousiastes à propos de Jev et des possibilités qu'il offre. Quelques projets intéressants que nous avons déjà vus : Kyle Jeong de Browserbase alimente des agents d'utilisation de navigateur pour des fractions de centime, Jarrod Watts a construit un agent de trading en direct, et Ryan Vogel effectue du tri d'e-mails à grande échelle.
De nouveaux modèles sortent chaque semaine à ce stade, mais celui-ci a suscité une réaction particulièrement forte. Nous sommes impatients de voir ce que vous construisez avec LangChain et Jev.
Faites-nous part de vos réflexions sur le forum, mentionnez-nous sur X et partagez ce que vous construisez, ou engagez-vous sur les issues LangChain!
Remerciements
Merci à @huntlovell, @hwchase, @ccurme, @veryboldbagel, et Nathan Drenzer pour leur relecture attentive et leurs contributions.





