Hur hindrar man en språkmodell från att hitta på koder ur byggbranschens regelverk? Inte med en bättre prompt. Vi håller ett register över varje kod som någonsin funnits, matchat mot den utgåva dokumentet anger, och slår upp varje kandidat innan den når en användare. Modellen föreslår; registret avgör.
Problemet
Svenska bygghandlingar hänger sina krav på koder ur gemensamma referensverk: korta, strukturerade strängar som talar om för entreprenören vilka tekniska krav som gäller för vilken del av arbetet. En kod är några bokstäver och siffror med strikt grammatik, och en modell som läst miljontals koder kan generera en som ser perfekt ut. En påhittad kod ser inte fel ut. Den ser ut som varje riktig kod runt omkring den.
För ett granskningsverktyg är det diskvalificerande. En ingenjör som hittar en enda påhittad hänvisning slutar lita på systemets alla kommentarer, med rätta. Instruktioner i stil med "hitta aldrig på koder" sänker felfrekvensen. De tar den inte till noll, och noll är kravet, eftersom spårbarheten är produkten.
Registret
Så vi slutade försöka få modellen att ha rätt och började kontrollera den i stället. Vi underhåller ett facitregister över varje kod som någonsin funnits i de referensverk svenska bygghandlingar hänvisar till. Varje kodkandidat som flödet producerar slås upp innan den når en användare. Finns koden i registret levereras den, med sin officiella beskrivning. Finns den inte levereras den inte, oavsett hur säker modellen var. Uppslaget är en vanlig databasfråga: billig, deterministisk och omöjlig att övertala.
Att koden finns är bara halva kontrollen. Samma kod kan bära olika krav i olika utgåvor: en teknisk beskrivning upprättad enligt AMA 17 betyder inte samma sak läst genom AMA 20. Därför matchas koden mot den utgåva dokumentet självt anger. En kod validerad mot fel utgåva är bara en mer subtil hallucination.
Extraktionssidan har samma form, fast spegelvänd. Vårt bäst presterande extraktionssteg börjar med en regex: en deterministisk svepning över dokumentet ger kandidatlistan, och modellens uppgift är omformulerad från "hitta koderna" till "kritisera och komplettera listan". Språkmodeller är dramatiskt bättre kritiker än sökare. Det mekaniska, att hitta strukturerade strängar i brusig OCR-text, hör hemma i kod.
Fotnoterna
Registret löste de påhittade koderna. Nästa fel var konstigare. Vid syntes, när en agent slår samman fynd från flera dokument, kunde modellen ibland förvanska ett fil-ID: påståendet stämde, citatet stämde, men pekaren till källfilen var trasig. För ett system vars hela värde är spårbarhet är det värsta möjliga fel. Ett rätt svar med trasig hänvisning går inte att skilja från ett påhittat. Ingenjören som ska kontrollera fyndet öppnar fel fil, hittar ingenting och drar den rimliga slutsatsen att systemet gissar.
Åtgärden följer registrets filosofi. Fil-ID:n skrivs inte längre av modellen över huvud taget: de sätts programmatiskt efter genereringen och verifieras sedan mot mängden filer som faktiskt ingår i jobbet. Misslyckas verifieringen görs ett nytt försök; misslyckas den upprepade gånger stannar flödet hellre än att leverera en trasig pekare.
Källhänvisningarna behövde samma behandling för att överleva ett flöde med flera agenter. Indexbaserade hänvisningar ("dokument 2, mening 4 till 6") fungerar i varje handledning med en modell och dör vid första agenthoppet: när en syntesagent har slagit samman tre sökagenters svar pekar "dokument 2" på ingenting. Våra hänvisningar reser som självbärande värden, med käll-ID och ordagrant utdrag inbäddade i själva taggen, och når därför användaren oförändrade oavsett hur många agenter som hanterat dem.
| Vad som måste vara exakt | Hur modellen felar | Vad som säkrar det |
|---|---|---|
| Standardkoder | Hittar på trovärdiga koder | Uppslag i registret, matchat mot angiven utgåva |
| Fil-ID:n | Förvanskar dem vid syntes | Sätts programmatiskt, verifieras mot filmängden |
| Källhänvisningar | Tappar dem mellan agenter | Självbärande värden med ordagranna utdrag |
Principen
De tre åtgärderna är ett och samma mönster. Modellen får föreslå, tolka och bedöma, för det är den bra på. Den får aldrig sista ordet om något som måste vara exakt rätt: identifierare, hänvisningar, koder, citat. Sådant går genom deterministisk kod med verifiering, och när verifieringen misslyckas säger systemet det i stället för att gissa. Prompter formar beteende; databaser och mängdkontroller garanterar det. Bara det ena är ett tekniskt kontrakt.
Kraven på varje maskingenererad granskningskommentar är konkreta: kravet den vilar på, vilken revidering av handlingen den läst, en plats en människa kan kontrollera. Det här är maskineriet som gör de kraven möjliga att uppfylla. Spårbarhet är inte en ton modellen anlägger när man ber snällt. Det är en arkitektur, och större delen av den är en databas.
Spårbarhet är inbyggt av just den anledningen: koder, fil-ID och källor går genom deterministisk kod, aldrig modellen. Vill du se hur det ser ut i praktiken hör du av dig.
Boka demoRelaterat