Lær · Forklaret
Hvad er structured output, og hvad skal en AI-agent med det?
Udgivet 31. oktober 2026
Kort svar. Structured output betyder, at AI’en svarer i et fast format med navngivne felter, for eksempel leverandør, fakturadato og total, i stedet for i fri tekst. Formatet er som regel JSON, og et skema beskriver, hvilke felter svaret skal have. Fordi felterne er de samme hver gang, kan et system læse svaret, og kode kan kontrollere det, før noget sker. Et korrekt format gør ikke indholdet korrekt, så værdierne skal stadig kontrolleres og have en kilde.
Guiden forklarer, hvorfor et svar i fri tekst ikke kan komme ind i et system, hvordan et skema ser ud, hvordan formatet håndhæves, og hvordan I kontrollerer det, der står i felterne.
Et svar i fri tekst kan ikke komme ind i et system
Bed en AI om at læse en faktura, og den svarer måske: “Det er en faktura fra Nordlys Kontor dateret 3. oktober, og totalen er omkring 1.250 kroner inklusive moms.” Det kan et menneske læse. Det kan et bogføringssystem ikke, for det skal have datoen i ét felt og beløbet i et andet.
Spørg igen, og formuleringen er en anden: “Total: DKK 1.250,00 (inkl. 25 % moms).” Begge svar kan være rigtige, men intet system længere fremme kan regne med, hvor datoen eller beløbet står.
Selve fakturaen er ustrukturerede data: Oplysningerne ligger i tekst og layout. Et system skal have strukturerede data: oplysninger i faste felter og kolonner. Structured output er måden, en AI laver det ene om til det andet på.
Et skema siger, hvilke felter svaret skal have
Et skema er en beskrivelse af svaret: hvilke felter det har, hvilken type hvert felt er, hvilke felter der skal udfyldes, og hvilke værdier der er tilladt. Det almindelige format er JSON, et enkelt tekstformat til data med navngivne felter og værdier, som næsten alle systemer kan læse.
Et skema for en leverandørfaktura kunne se sådan ud:
| Felt | Type | Skal udfyldes | Tilladte værdier |
|---|---|---|---|
| supplier | tekst | ja | |
| invoice_number | tekst | ja | |
| invoice_date | dato | ja | en gyldig dato |
| currency | tekst | ja | DKK, EUR, SEK, USD |
| lines | liste | ja | mindst én linje |
| hver linje: description, quantity, unit_price, vat_rate | tekst, tal, tal, tal | ja | vat_rate 0 eller 25 |
| total | tal | ja |
AI’ens svar udfylder så felterne (opdigtet eksempel):
{
"supplier": "Nordlys Kontor ApS",
"invoice_number": "10482",
"invoice_date": "2026-10-03",
"currency": "DKK",
"lines": [
{ "description": "Printerpapir, A4", "quantity": 10, "unit_price": 100.00, "vat_rate": 25 }
],
"total": 1250.00
}
Hver faktura kommer tilbage i samme form, uanset hvordan den så ud.
Formatet håndhæves tre steder
- I forespørgslen. Instrukserne til AI’en beskriver felterne og indeholder skemaet.
- Hos AI-leverandøren. OpenAI, Anthropic og Googles Gemini API har hver en indstilling, hvor I angiver et JSON-skema, og modellens svar tvinges til at følge det. Uden den indstilling kan modellen stadig udelade et felt eller bryde formatet.
- I jeres egen kode. Før svaret bruges, kontrollerer koden det mod skemaet igen: Alle felter, der skal udfyldes, er der, hver værdi har den rigtige type, og hver værdi er en af de tilladte. Et svar, der ikke består, bliver stoppet og sendes aldrig videre.
Det tredje trin er vigtigt, selv med leverandørens indstilling. Leverandørerne beskriver selv tilfælde, hvor svaret ikke passer til skemaet: når modellen afviser en forespørgsel, og når svaret bliver afbrudt, fordi det har nået sin længdegrænse. Anthropic gør også opmærksom på, at en tilladt værdi kan komme tilbage med andre store og små bogstaver.
Et korrekt format er ikke et korrekt svar
Et skema bestemmer svarets form, ikke om det er sandt. Totalfeltet kan indeholde den forkerte total. Leverandørfeltet kan indeholde kundens navn. En dato kan være læst det forkerte sted på siden.
Det siger leverandørerne selv. OpenAI’s vejledning skriver, at structured output stadig kan indeholde fejl, og advarer om, at en model, der altid følger et skema, kan finde på værdier, når dokumentet ikke passer til opgaven. Googles vejledning anbefaler at validere værdierne i jeres egen applikation, fordi et svar i korrekt format stadig kan være forkert i indhold.
Structured output gør altså svaret muligt at kontrollere. Det er kontrollerne, der gør det til at stole på.
Kontrollér indholdet, før noget sker
Fordi hver værdi står i et navngivet felt, kan kode kontrollere den. En startliste:
- Regnestykket går op. Linjerne summer til totalen, og momsen passer til satsen.
- Værdierne er tilladte. Momssatsen er en gyldig sats, valutaen er en, I bruger, og datoen ligger ikke i fremtiden.
- Stamdata passer. Leverandøren står på leverandørlisten, og kontoen står på listen over konti, opgaven må bruge.
- Hver værdi peger på sin kilde. For hvert felt gemmes siden og stedet, det blev læst fra, så alle kan holde det op mod dokumentet. Det er grounding: et svar, der viser, hvor det blev fundet.
- En fejlet kontrol stopper dokumentet. Dokumentet markeres med årsagen, og et menneske ser på det. Resten fortsætter.
Hver kontrol er en navngivet regel, så en fejl kan forklares, og I kan ændre reglerne uden at ændre AI’en. Casen om fakturalæseren viser kontrollerne på leverandørfakturaer.
Hvor structured output hører hjemme i en agent
En AI-agent giver noget videre i hvert trin. Hver gang modtageren er et system eller det næste trin, skal det, der gives videre, være struktureret.
| Trin | Det, der er struktureret |
|---|---|
| Læse et dokument | Felterne, der er læst fra fakturaen, kvitteringen eller ordren |
| Bruge et værktøj | Felterne, agenten udfylder for at bede et system om noget; det kaldes function calling |
| Foreslå en postering | Konto, beløb, dato, momskode og det bilag, posteringen bygger på |
| Skrive i logbogen | Kilden, reglen, der blev brugt, resultaterne af kontrollerne og hvem der godkendte |
Structured output og kontroller fanger forkerte data. Guardrails stopper forbudte handlinger, for eksempel en betaling, uanset hvad dataene siger. Hvem der godkender hvert trin, afgøres stadig af de tre godkendelseszoner: “handler selv”, “spørger først” eller “operatøren godkender”. Operatøren er den person i jeres virksomhed, der kontrollerer og godkender agentens arbejde. Læs Hvornår må en AI-agent handle på egen hånd?
Sådan starter I med ét dokument
- Vælg ét dokument, som nogen taster ind i et system i hånden, for eksempel leverandørfakturaer.
- Skriv felterne ned, som det modtagende system skal have, med deres type og de værdier, systemet accepterer.
- Skriv skemaet ud fra den liste, og angiv det i AI-leverandørens indstilling for structured output.
- Skriv kontrollerne som navngivne regler: regnestykket, de tilladte værdier, stamdata og kilden.
- Test på kendte eksempler. Kør AI’en på dokumenter, hvor I allerede kender det rigtige svar, og sammenlign felt for felt. Disse test, der kan gentages, kaldes evals; kør dem igen efter hver ændring af model, skema eller regler.
- Beslut, hvad der sker ved en fejl: hvem der ser det markerede dokument, og hvor det venter.
Når der kommer en ny slags dokument, får den sit eget skema og sine egne kontroller. Resten af opsætningen er den samme.