Texten är begriplig. Ändå kan applikationen inte ta över den, eftersom antalet förekommer en gång som ”sex”, en gång som 6 och en gång som en mening i kommentaren. Strukturerade utdata ger den här överlämningen ett kontrakt. Den mer intressanta delen börjar där korrekt JSON ändå kan vara sakligt fel.
Mistrals Custom Structured Outputs använder ett fördefinierat JSON-schema för detta. Fält och datatyper beskrivs uttryckligen. Det ordnar gränssnittet mellan modell och applikation; det ersätter inte kontrollen av om ett värde faktiskt stöds av källtexten.
Okänt är ett eget tillstånd
Vår fiktiva anteckning nämner pärmar men inget antal. Utdata ska bevara detta saknade värde. Om du i stället infogar ett standardantal ser dataposten mer komplett ut och förlorar samtidigt en viktig uppgift.
Ett litet, leverantörsneutralt schema kan se ut så här. Vilka schemanyckelord ett visst gränssnitt stöder måste kontrolleras mot dess aktuella dokumentation före användning:
{
"type": "object",
"required": ["artikel", "menge", "klaerung"],
"additionalProperties": false,
"properties": {
"artikel": {"type": "string"},
"menge": {"type": ["integer", "null"], "minimum": 0},
"klaerung": {"type": "string"}
}
}
required kräver att fältet finns. null tillåter ändå ett uttryckligen okänt värde. Den nedre gränsen gäller numeriska antal. Huruvida ett antal är tillåtet för den faktiska beställningsprocessen kan kräva ytterligare affärsregler. Framför allt besvarar schemat vilken form den efterföljande applikationen kan förvänta sig.
En förhandsvisning utan modell och utan beställning
Du kan redan granska bearbetningen med fasta exempeldata. Spara följande HTML-kodsnutt, som vi har skrivit, som en lokal exempelfil och öppna den i webbläsaren. Den visar en datapost men gör ingen API-förfrågan och sparar ingen beställning.
<!doctype html>
<meta charset="utf-8">
<p id="ausgabe"></p>
<script>
const daten = { artikel: "Folders", menge: null, klaerung: "Quantity missing" };
function pruefe(d) {
if (!d || typeof d !== "object" || Array.isArray(d)) throw Error("Object expected");
const keys = Object.keys(d).sort().join(",");
if (keys !== "artikel,klaerung,menge") throw Error("Check fields");
if (typeof d.artikel !== "string" || typeof d.klaerung !== "string")
throw Error("Text expected");
if (d.menge !== null && (!Number.isInteger(d.menge) || d.menge < 0))
throw Error("Check quantity");
}
pruefe(daten);
const menge = daten.menge === null ? "not yet known" : String(daten.menge);
document.querySelector("#ausgabe").textContent =
daten.artikel + ": " + menge + ". " + daten.klaerung;
</script>
Funktionen är en egen, begränsad validerare för just detta undervisningsschema, inte ett komplett JSON Schema-bibliotek. Ändra antalet i tur och ordning till 6, till -1 och till strängen ”sex”. Lägg sedan till ett oväntat fält. Observera varje gång visningen eller felmeddelandet i utvecklarverktygen.
På så sätt kan du testa en övergång innan en modell är inblandad. Du vet hur applikationen hanterar kända, okända och ogiltiga värden. Ett senare modellsvar kan bara nå den här kodsnutten efter att ha passerat samma regler.
Kontrollera format och innebörd var för sig
En formellt tillåten 6 kan ändå vara fel om anteckningen säger fyra. I en verklig applikation bör du därför vid behov lägga till en hänvisning till källan och kontrollera viktiga värden mot indata. Vid motstridiga anteckningar bör processen ge upphov till en punkt för förtydligande i stället för att välja ett godtyckligt tal.
Utdata använder textContent. Extern text infogas därmed som text i stället för att tolkas som HTML utan någon kontroll. Leverantörsnycklar hör inte hemma i en webbläsarsnutt som denna. Ett modellanrop vore ett separat bearbetningssteg med egen åtkomst och egen felhantering.
Demonstrera kodsnutten på en webbplats
Om du vill visa just den här lilla visningen på en befintlig webbplats är utvecklarläget i KENJTEC WebSiteBuilder ai också en möjlig plats för din egen HTML/JavaScript-kod. Den kontrollerade kodsnutten överförs för hand; kodförhandsvisning och egna kodversioner stöder den efterföljande granskningen. Detta skapar ingen inbyggd anslutning till Mistral.
Den egentliga insikten är oberoende av var den används: modellformat, egen validerare, säker visning och det sakliga beslutet har olika uppgifter. Den som håller isär dem kan ta över AI-utdata på ett målinriktat sätt utan att i det tysta förvandla ett rimligt svar till en handling.
Källor och status
Källor per den 25 oktober 2026. Custom Structured Outputs.

