Hopp til hovedinnhold

Onsdag 7. oktober

 Tilbake Verktøy 2 min 08.26

Sqlsure stopper KI-generert SQL som teller inntekter dobbelt, før spørringen kjører

søndag 12. juli · KI-generert · Kilde: GitHub

Innholdet er KI-generert og kan inneholde feil. Sjekk originalkilden.

Sjekker KI-generert SQL mot semantikken teamet allerede har erklært i dbt, og avviser spørringer som dobbeltteller etter en én-til-mange-join.

Databasen sier ja. Linteren sier ja. LLM-en som gjennomgår sin egen SQL sier også ja. Likevel kan spørringen returnere et tall som er stille feil: inntekter dobbelttelt av en join, et gjennomsnitt som er summert, en pasient-ID eksponert i output. Sqlsure, et Apache-2.0-lisensiert Python-verktøy, angriper akkurat den feilklassen, og gjør det deterministisk før spørringen kjører.

Poenget er at verktøyet ikke finner opp ny sannhet. Det leser semantikken teamet ditt allerede har erklært: unique-tester i dbt blir til grain, relationships-tester blir til join-kardinalitet, og enkle meta-tagger markerer hva som er trygt å summere. Har du ingen semantisk lag i det hele tatt, kan sqlsure.introspect bygge regelboka fra databasekatalogen via SQLite-PRAGMA-er eller information_schema. Reglene er oppslag i ordbøker, ikke LLM-kall, så samme input gir samme dom hver gang, offline og uten nettverkstilgang.

Regelsettet dekker ni mønstre. FANOUT fanger SUM av et additivt mål etter en én-til-mange-join, CHASM fanger to fan-out-joins som multipliserer hverandre, ADDITIVITY fanger summering av rater og gjennomsnitt, og SENSITIVE_COLUMN flagger PHI- og PII-kolonner i output. Når verktøyet ikke kan verifisere noe, sier det «kan ikke verifisere», ikke «ser greit ut».

Tallene i prosjektets egen dokumentasjon er sterke: 2 568 ekspertskrevne gullspørringer fra Spider og BIRD, 45 flagg, null falske alarmer, og et gullsvar i BIRD som angivelig er feil med faktor 8. Dette er utviklerens egne målinger, ikke uavhengig etterprøvd, men repoet lenker hver påstand til en kjørbar måling.

For deg som bygger en text-to-SQL-agent er MCP-serveren det interessante: agenten må passere kontroll før den får kjøre. Hver avvisning bærer med seg et maskinlesbart fiks, så løkka blir utkast, sjekk, fiks, sjekk, kjør.

Hva bør du gjøre?

  1. Har du en dbt-repo: kjør python -m sqlsure.scan path/to/dbt-repo --report report.md og se hva som flagges før du binder deg til verktøyet.
  2. Bygger du en SQL-agent: registrer sqlsure som MCP-server, så agenten må bestå kontrollen før den utfører spørringen.

Pulsen · norske KI-nyheter for deg som bygger. Sakene er KI-generert fra originalkilden, som alltid lenkes.