AI Ordbog
Structured output
En funktion der tvinger AI-modeller til at returnere svar i et præcist, maskinlæsbart format som JSON, XML eller et specifikt skema, i stedet for fritekst.
Skrevet og redigeret af Kristian Primdal · Sidst opdateret 18. marts 2026Indhold
Hvad er structured output?
Structured output er en funktion der sikrer at en AI-model returnerer sit svar i et præcist, foruddefineret format, typisk JSON der følger et specifikt skema. I stedet for at modellen svarer i fritekst der kan variere i struktur og ordlyd, garanterer structured output at outputtet altid har de rigtige felter, de rigtige datatyper og den rigtige struktur.
Tænk på forskellen mellem at bede et menneske om at “beskrive vejret” versus at bede dem udfylde en formular med felterne temperatur, vindstyrke, nedbør og skydække. Fritekst-svaret kan være “Det er en fin dag med lidt sol og 18 grader.” Formular-svaret er: { "temperatur": 18, "vindstyrke": "svag", "nedbør": false, "skydække": "delvist" }. Begge indeholder den samme information, men kun formularen kan en computer pålideligt arbejde videre med.
Det er præcis hvad structured output gør for AI-modeller: det tvinger modellen til at “udfylde formularen” i stedet for at skrive frit.
Hvorfor er structured output vigtigt?
Problemet med fritekst
AI-modeller er trænet til at generere naturligt sprog. Det er deres styrke, men det er et problem når outputtet skal bruges af software:
Uforudsigelig struktur: Beder du en model om at ekstrahere navn og alder fra en tekst, kan svaret være:
- “Navnet er Anna og hun er 34 år.”
- “Anna, 34”
- “{ navn: Anna, alder: 34 }”
- “Personen hedder Anna. Alderen er 34.”
Alle svar er korrekte, men ingen af dem kan parses pålideligt af kode uden kompleks tekstbehandling.
Forkerte datatyper: Modellen kan returnere “toogredive” i stedet for 34, eller “cirka 30-35” i stedet for et præcist tal.
Manglende felter: Modellen kan glemme at inkludere et felt eller tilføje ekstra felter der ikke var forespurgt.
Formatfejl: Selv når modellen forsøger at returnere JSON, kan den producere ugyldigt JSON med manglende kommaer, forkerte citationstegn eller trailing text.
Løsningen: Garanteret struktur
Structured output løser disse problemer ved at garantere at modellens output altid overholder et specifikt skema. Det er ikke et håb eller en henstilling. Det er en garanti implementeret på systemniveau.
Hvordan fungerer structured output?
Constrained decoding
Den mest robuste form for structured output bruger constrained decoding. Det er en teknik der begrænser modellens mulige output-tokens under generering:
Normal generering:
Token 1 → Vælg fra alle ~100.000 tokens i vokabularet
Token 2 → Vælg fra alle ~100.000 tokens
...
Constrained generering (JSON-skema):
Token 1 → Kun "{" er tilladt (JSON skal starte med krøllet parentes)
Token 2 → Kun " er tilladt (JSON-nøgler er strenge)
Token 3 → Vælg fra tokens der kan starte et gyldigt feltnavn
...
Ved hvert trin i genereringen beregner systemet hvilke tokens der er lovlige givet skemaet og det allerede genererede output. Ulovlige tokens får deres sandsynlighed sat til nul, så modellen aldrig kan producere ugyldigt output.
Det er som at skrive med en autokorrektion der ikke bare foreslår rettelser men fysisk forhindrer dig i at skrive ugyldige tegn.
JSON Schema som kontrakt
Structured output defineres typisk via JSON Schema, en standard for at beskrive strukturen af JSON-data:
{
"type": "object",
"properties": {
"navn": { "type": "string" },
"alder": { "type": "integer", "minimum": 0 },
"by": { "type": "string" },
"interesser": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["navn", "alder", "by"]
}
Dette skema garanterer at modellen altid returnerer et objekt med en streng for navn, et heltal for alder, en streng for by og eventuelt et array af strenge for interesser. Aldrig noget andet.
Tilgange til structured output
1. Constrained decoding (stærkest): Modellen kan fysisk ikke generere ugyldigt output. Brugt af OpenAI’s Structured Outputs, Anthropic’s Structured Outputs og flere open source-frameworks.
2. JSON mode (svagere): Modellen tvinges til at generere gyldigt JSON, men ikke nødvendigvis JSON der følger et specifikt skema. Felter kan mangle, datatyper kan være forkerte, og ekstra felter kan tilføjes.
3. Prompt-baseret (svageste): Man beder modellen i prompten om at svare i et bestemt format. Virker ofte men er aldrig garanteret. Modellen kan afvige, især for komplekse skemaer.
Praktiske eksempler
Eksempel 1: Ekstraktion af information fra tekst
Opgave: Ekstraher kontaktinformation fra en e-mail.
Input: “Hej, jeg hedder Mikkel Andersen og arbejder hos Primux ApS. Mit nummer er 28 45 67 89 og du kan maile mig på mikkel@primux.dk.”
Skema:
{
"type": "object",
"properties": {
"navn": { "type": "string" },
"virksomhed": { "type": "string" },
"telefon": { "type": "string" },
"email": { "type": "string", "format": "email" }
},
"required": ["navn"]
}
Structured output:
{
"navn": "Mikkel Andersen",
"virksomhed": "Primux ApS",
"telefon": "28 45 67 89",
"email": "mikkel@primux.dk"
}
Resultatet kan bruges direkte i kode: indsættes i en database, tilføjes til et CRM-system eller sendes videre til en anden service.
Eksempel 2: Klassificering med metadata
Opgave: Klassificér kundehenvendelser automatisk.
Skema:
{
"type": "object",
"properties": {
"kategori": {
"type": "string",
"enum": ["support", "salg", "fakturering", "reklamation", "andet"]
},
"prioritet": {
"type": "string",
"enum": ["lav", "mellem", "høj", "kritisk"]
},
"resumé": { "type": "string", "maxLength": 200 },
"kræver_eskalering": { "type": "boolean" }
},
"required": ["kategori", "prioritet", "resumé", "kræver_eskalering"]
}
Input: “Vores system har været nede i 3 timer og vi mister kunder! Vi har prøvet at genstarte men intet virker.”
Structured output:
{
"kategori": "support",
"prioritet": "kritisk",
"resumé": "Systemnedbrud i over 3 timer. Genstart har ikke løst problemet. Kunden mister forretning.",
"kræver_eskalering": true
}
Output kan bruges direkte til at route henvendelsen til det rigtige team, sætte prioritet i ticket-systemet og trigge en eskaleringsworkflow.
Eksempel 3: Generering af strukturerede data
Opgave: Generer produktbeskrivelser i et fast format til en e-handelsplatform.
Skema:
{
"type": "object",
"properties": {
"titel": { "type": "string", "maxLength": 80 },
"kort_beskrivelse": { "type": "string", "maxLength": 160 },
"features": {
"type": "array",
"items": { "type": "string" },
"minItems": 3,
"maxItems": 6
},
"målgruppe": { "type": "string" },
"seo_keywords": {
"type": "array",
"items": { "type": "string" },
"maxItems": 5
}
},
"required": ["titel", "kort_beskrivelse", "features", "målgruppe"]
}
Resultatet passer direkte ind i e-handelsplatformens datamodel uden manuel tilpasning.
Eksempel 4: Multi-step workflows
I agentic workflows bruger AI-agenter structured output til at kommunikere struktureret mellem trin:
Trin 1: Planlægning. Modellen returnerer en plan som en liste af trin med type, beskrivelse og afhængigheder.
Trin 2: Udførelse. For hvert trin returnerer modellen resultatet i et struktureret format med status, output og eventuelle fejl.
Trin 3: Evaluering. Modellen vurderer det samlede resultat og returnerer en score, forbedringsforslag og en anbefaling.
Hvert trin har sit eget skema, og structured output sikrer at data flyder pålideligt mellem trinene.
Structured output hos de store udbydere
OpenAI
OpenAI tilbyder “Structured Outputs” med constrained decoding:
- Definér et JSON Schema i API-kaldet
- Modellen er garanteret at følge skemaet 100%
- Understøtter komplekse skemaer med nesting, arrays, enums og optionelle felter
- Tilgængelig via
response_format: { type: "json_schema", json_schema: {...} }
Anthropic (Claude)
Anthropic tilbyder native Structured Outputs (lanceret november 2025) med constrained decoding:
- Definér et JSON Schema direkte i API-kaldet eller via tool use
- Modellen er garanteret at følge skemaet via constrained decoding
- Understøtter komplekse, nestede skemaer
- Tilgængelig for Claude Sonnet 4.5 og Opus 4.1
Google (Gemini)
Google tilbyder structured output via Gemini API:
- JSON Schema support med
response_schema-parameter - Understøtter enums, arrays og nestede objekter
- Integreret med function calling for tool use-scenarier
Structured output vs. JSON mode
De to er ikke det samme:
| Structured output | JSON mode | |
|---|---|---|
| Garanti | Output følger et specifikt skema | Output er gyldigt JSON |
| Skema | Defineret af brugeren | Intet skema, bare JSON |
| Felter | Garanteret til stede | Kan mangle eller variere |
| Datatyper | Håndhævet (string, integer, boolean) | Ikke håndhævet |
| Ekstra felter | Ikke tilladt (med strict mode) | Kan forekomme |
| Brug | Produktion, integrationer | Prototyping, simple opgaver |
JSON mode sikrer at outputtet er parsbart JSON. Structured output sikrer at JSON’en har præcis den struktur din kode forventer. For produktionssystemer er structured output næsten altid det rigtige valg.
Designprincipper for gode skemaer
Hold det fladt og simpelt
Komplekse, dybt nestede skemaer er sværere for modellen at udfylde korrekt og sværere at vedligeholde. Start med flade strukturer og tilføj kun nesting når det er nødvendigt.
Brug enums for begrænsede værdier
Når et felt har et begrænset sæt gyldige værdier (f.eks. kategori, prioritet, status), brug enums. Det forhindrer modellen i at bruge synonymer eller variationer: “høj” vs. “Høj” vs. “high” vs. “3”.
Gør felter required med omhu
Markér kun felter som required hvis de altid kan udfyldes fra inputtet. Hvis et felt muligvis mangler i kildeteksten, gør det optionelt med en null-mulighed. Ellers tvinges modellen til at opfinde data.
Beskriv felterne
Tilføj description til felter i skemaet. Det hjælper modellen med at forstå hvad der forventes:
{
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positiv", "neutral", "negativ"],
"description": "Den overordnede stemning i teksten"
}
}
}
Test med varieret input
Et skema der virker perfekt for ét eksempel kan fejle for edge cases. Test med mange forskellige inputs (korte, lange, tvetydige, mangelfulde) for at sikre robusthed.
Anvendelsesområder
Dataekstraktion
Ekstraktion af struktureret information fra ustruktureret tekst: kontrakter, e-mails, fakturaer, CVer, medicinske journaler. Structured output sikrer at de ekstraherede data passer direkte ind i downstream-systemer.
Klassificering og tagging
Kategorisering af dokumenter, e-mails, supporthenvendelser eller produktanmeldelser med foruddefinerede kategorier, tags og scorer. Enums i skemaet sikrer konsistente kategorier.
Indholdsgenerering
Generering af produktbeskrivelser, SEO-metadata, social media-posts eller nyhedsbreve i formater der matcher CMS’ets datamodel. Structured output eliminerer behovet for manuel formatering.
API-integrationer
Når AI-modeller bruges som en del af større software-systemer, er structured output nødvendigt for at sikre at modellens output kan parses og bruges pålideligt af andre services.
Evaluering og scoring
Automatisk vurdering af tekster, ansøgninger eller opgaver med numeriske scores og struktureret feedback. Skemaet sikrer at evalueringen er konsistent og sammenlignelig.
Begrænsninger
Skema-kompleksitet
Meget komplekse skemaer med dyb nesting, mange optionelle felter og komplekse betingelser kan reducere modellens outputkvalitet. Modellen bruger “kapacitet” på at overholde skemaet, hvilket kan gå ud over kvaliteten af selve indholdet.
Latens
Constrained decoding tilføjer en lille overhead til genereringen, fordi systemet ved hvert token-trin skal beregne hvilke tokens der er lovlige. I praksis er overheadet minimalt men kan mærkes for meget store skemaer.
Ikke en erstatning for validering
Structured output garanterer format og struktur men ikke korrekthed af indholdet. At modellen returnerer "alder": 34 i det rigtige format betyder ikke at 34 er den korrekte alder. Indholdsvalidering er stadig nødvendig.
Ofte stillede spørgsmål
Hvad er structured output?
Structured output er en funktion i AI-modeller der sikrer at modellens svar følger et foruddefineret format eller skema, typisk JSON med specifikke felter, datatyper og struktur. I stedet for at modellen svarer i fritekst der kan variere, garanterer structured output at outputtet altid kan parses pålideligt af kode. Det er afgørende for at integrere AI-modeller i software-systemer, automatisere workflows og bygge pålidelige AI-applikationer.
Hvad er forskellen på structured output og JSON mode?
JSON mode garanterer at modellens output er gyldigt JSON, men ikke at det følger et specifikt skema. Felter kan mangle, datatyper kan variere, og ekstra felter kan forekomme. Structured output går videre: det garanterer at outputtet følger et præcist skema med definerede felter, datatyper og struktur. For produktionssystemer hvor kode skal parse outputtet pålideligt er structured output det rigtige valg. JSON mode er tilstrækkeligt for prototyping og simple opgaver.
Hvordan implementerer man structured output?
De fleste AI-udbydere tilbyder structured output via deres API. Hos OpenAI definerer man et JSON Schema i response_format-parameteren. Hos Anthropic definerer man et JSON Schema direkte i API-kaldet eller via tool use. Hos Google Gemini bruges response_schema-parameteren. I alle tilfælde definerer man et skema der beskriver den ønskede struktur, sender det med API-kaldet, og modellen returnerer output der er garanteret at overholde skemaet.
Hvornår bør jeg bruge structured output?
Brug structured output når modellens output skal bruges af kode, ikke kun læses af mennesker. Det inkluderer: dataekstraktion fra tekst, automatisk klassificering, API-integrationer, workflow-automatisering, indholdsgenerering til CMS’er og enhver situation hvor du har brug for pålidelig, konsistent struktur i modellens svar. For rent konversationelle anvendelser hvor et menneske læser svaret er fritekst typisk bedre.