Sorties LLM de type sécurisé avec Zod : arrêtez de deviner ce que renvoie le modèle.

DEV - 15/07
Sorties LLM de type sécurisé avec Zod : arrêtez de deviner ce que renvoie le modèle. J'ai expédié un...

Sorties LLM de type sécurisé avec Zod : arrêtez de deviner ce que renvoie le modèle.

J'ai expédié un classificateur en production en janvier. L'invite demandait du JSON avec un seulcatégoriechamp. Pendant trois semaines, cela a bien fonctionné. Puis le modèle a commencé à revenir{"category": "bug", "explication": "cela ressemble à un crash"}et le consommateur a généré une erreur d'exécution car il n'attendait qu'une seule clé. Pas de changement de schéma, pas de déploiement. Le modèle a simplement décidé d’être utile.

Zod et un peu de discipline autour de l'étape d'analyse comblent cet écart. Ce didacticiel explique la définition des schémas pour les formes de sortie LLM, leur utilisation avec le SDK Vercel AI et le SDK Anthropic brut, et la création d'une boucle de nouvelle tentative qui gère les cas où le modèle se trompe toujours.

TL;DR

ÉtapeQuoiPourquoi
Définir le schéma ZodDécrivez la forme souhaitéeSource unique de vérité pour vos types
Utilisez generateText avec Output.objectChemin du SDK Vercel AIAppliqué par le schéma, indépendant du fournisseur
Utiliser l'outil avec tool_choiceChemin du SDK anthropiqueForce la sortie structurée sans wrappers supplémentaires
Analyser et réessayer en cas d'échecZodError détecte la dériveRécupère sans planter les appelants

1. Le problème : le JSON libre est un contrat que personne n'a signé

La plupart des tutoriels LLM montrentJSON.parse (réponse)et appelle ça un jour. Le problème est que le modèle n'a jamais accepté votre schéma. Demandez-lui de revenir{"catégorie": "bug"}et cela pourrait revenir:

  • {"catégorie": "bug"}(correct)
  • {"Catégorie": "Bogue"}(mauvais boîtier)
  • {"category": "bug", "confidence": 0.9}(champ supplémentaire)
  • {"error": "Je ne peux pas classer ceci"}(utile, mais pas votre schéma)
  • Une clôture de démarque enveloppant le JSON parce que le modèle se sentait poli

Sans une étape d’analyse qui valide réellement la forme, chacun de ces chemins corrompt silencieusement les données en aval.

Le correctif est trois lignes de Zod plus une.safeParse()appel. Chaque technique présentée dans cet article s'appuie sur ce modèle, que vous utilisiez le SDK Vercel AI, le SDK Anthropic brut ou les deux.

importer { z } depuis "zod" ; const ClassifyResult = z.object({category: z.enum(["bug", "feature", "question"]), }); tapez ClassifyResult = z.infer; // Au moment de l'exécution : const parsed = ClassifyResult.safeParse(JSON.parse(rawOutput)); if (!parsed.success) { // parsed.error est une ZodError avec des détails au niveau du champ console.error("Shape violation:", parsed.error.issues); }
Entrer en mode plein écran Quitter le mode plein écran

Installez Zod 4 (actuellement la version stable) :

npm installer zod@^4.0.0
Entrer en mode plein écran Quitter le mode plein écran

Les API principales (z.objet,z.string,z.enum,z.discriminate...
[Courte citation de 8% de l'article original]

Loading...