En sprogmodel, der holder jeres tal, kan ændre dem. Den gør det ikke tit, og det er netop problemet. Et system, der tager fejl én gang ud af halvtreds, er sværere at opdage end et system, der tager fejl hver gang.
Svaret er ikke en bedre model. Svaret er at holde modellen væk fra værdierne. Denne side beskriver, hvordan det virker.
Hvordan kan en assistent svare med data, den ikke kan se?
Assistenten skriver forespørgslen. Den skriver ikke resultatet.
- I stiller et spørgsmål i almindeligt sprog.
- Assistenten skriver en forespørgsel: en tabel, et sæt filtre, et mål.
- Platformen kører forespørgslen mod jeres system gennem jeres egen forbindelse.
- Platformen viser de rækker, den fik, som en blok: en tabel, et tal, et diagram eller et sæt nøgletal.
- Platformen fortæller assistenten, at en blok kom frem, med dens type, dens kolonnenavne og dens antal rækker. Den sender ikke værdierne.
- Assistenten skriver sætningen omkring blokken.
De tal, I læser, kom ud af jeres database og passerede intet, der kunne ændre dem undervejs. Assistenten valgte, hvad der skulle spørges om, og hvordan det skulle beskrives. Den holdt aldrig svaret.
Det har en anden fordel, der betyder mere over et år end over en uge. Forespørgslen er et varigt objekt. Den samme forespørgsel, der svarede på et spørgsmål i en samtale, bliver den rapport, I åbner hver måned, og den definition, jeres virksomhed er enig om. Intet bliver skrevet ind igen undervejs.
Hvad med sætningen omkring blokken?
Assistenten skriver stadig tekst. Den fortæller, hvad den filtrerede på, hvad den lagde mærke til, og hvad den vil undersøge næste gang. Den tekst er det ene sted, hvor et tal kan dukke op uden at komme fra en forespørgsel.
Så teksten bliver også kontrolleret. Før teksten bliver til en besked, holdes hvert tal i den op mod det, værktøjerne gav i den samme tur. Et tal overlever, hvis det består en af tre prøver:
- Det er en talværdi i et værktøjsresultat fra denne tur.
- Det er et tal, assistenten sendte som input til et værktøj, for eksempel en filterværdi.
- Det er en varighed i ISO 8601-form, for eksempel
P7D.
Alt andet bliver erstattet af et udeladelsestegn, og erstatningen bliver talt. Sætningen overlever. Det opfundne tal gør ikke.
Hvad er ikke et tal?
En kontrol, der behandler hvert tal som en påstand, gør teksten ulæselig. Datoer
er tal. Det samme er kvartaler, ugenumre og #3 i en sagsreference.
Disse bliver aldrig behandlet som tal:
- Datoer, i tal og i skrift, på dansk, engelsk, tysk og spansk
- Årstal, klokkeslæt, ugenumre og kvartaler
- Punkttegn på lister, også inde i fed skrift eller en overskrift
- Identifikatorer som
#3ellerPR0017
Et system, der udelader datoen i "3. september 2026", er ikke en kontrol. Det er en fejl.
Hvorfor kontrollere på serveren?
Fordi der er mere end én læser.
Teksten når en webklient, et skrivebordsprogram, et mobilprogram og en browserudvidelse. Den bliver gemt i en database. Den bliver sendt tilbage til modellen som historik i næste tur. Kører kontrollen i klienten, er hver af kopierne forskellig, og modellens egen historik indeholder tal, læseren aldrig så.
Kontrollen kører derfor på serveren, én gang, før teksten bliver streamet og før den bliver gemt. Én kontrolleret tekst når hvert sted.
Hvad koster det?
To ting, og det er rimeligt at nævne dem.
I ser af og til et udeladelsestegn. Runder assistenten et tal af, består det afrundede tal ikke kontrollen og bliver fjernet. "Cirka 800.000 DKK fordelt på 4 brugere" bliver til "Cirka … DKK fordelt på … brugere", når finansposten sagde 812.400 fordelt på 3 brugere. Den første udgave læser bedre. Den anden er ærlig.
Et forbehold kan miste sine tal. "Kun 500 af 3.901 rækker er med i denne fil" beholder sin advarsel og mister sine tal, hvis de tal ikke kom retur. Det er den rigtige afvejning. En advarsel med opfundne tal er to fejl, ikke én.
Hvad det ikke løser
Kontrollen sikrer, at et tal kom fra en række. Den sikrer ikke, at rækken svarer på jeres spørgsmål.
Et perfekt dækket tal kan stadig være det forkerte tal, fordi forespørgslen filtrerede på det forkerte datofelt, eller fordi "omsætning" i forespørgslen ikke er "omsætning" i jeres virksomhed. Det problem kræver en anden mekanisme: en fælles definition af hvert forretningsbegreb og en assistent, der spørger, når en læsning ikke er afklaret.
De to er to andre dele af den samme konstruktion. Kontrollen er gulvet, ikke loftet. Den fjerner én type fejl fuldstændigt, og det er værd at gøre, og den lader resten af arbejdet stå synligt i stedet for skjult.
Spørgsmål og svar
- Hvordan kan en AI svare med data, den ikke kan se?
- Modellen skriver forespørgslen. Platformen kører den, viser rækkerne som en blok og fortæller kun modellen, at en tabel med et bestemt antal kolonner og rækker kom frem. Læseren ser rækker fra databasen.
- Hvad er et tal med dækning?
- Et tal med dækning er en værdi, der står i de rækker, en forespørgsel gav i den samme tur, eller en værdi modellen sendte som input til et værktøj. Et tal, der ikke består nogen af de prøver, har ikke dækning.
- Bliver datoer behandlet som tal?
- Nej. Datoer, årstal, klokkeslæt, ugenumre, kvartaler, punkttegn og identifikatorer er ikke taloplysninger. De er undtaget fra kontrollen på dansk, engelsk, tysk og spansk.
Kilder
Vi tjekker enhver ekstern påstand på den viste dato. Microsoft flytter funktioner mellem release waves, så tjek siden igen, før du læner dig op ad den.
- 01FinGround: Detecting and Grounding Financial Hallucinations via Atomic Claim VerificationarXiv · Kilder tjekket 2026-09-17
- 02FAITH: A Framework for Assessing Intrinsic Tabular Hallucinations in FinancearXiv · Kilder tjekket 2026-09-17