DataSummarizer: Vinniga lokaldataprofilering
De flesta system gör samma misstag, de behandlar LLM som om det var en databas.
De kastar rader i sammanhanget. ,, lägger in bitar, ,, eller väljer representativa prover,” och hoppas att modellen kan dra slutsatser om strukturen, ,, kvalitet, M SK5, och sanning från anekdoter. . Det fungerar tillräckligt bra för att demonstrera, Mska7, och sen kollapsar det under skalan, M Ska8, integritetsbegränsningar, MSKA9, eller grundläggande frågor som: Är den här kolumnen skräp? ,
DataSummarizer tar den motsatta vägen.
Den räknar en deterministisk statistikprofil av din datauppsättning genom att använda DuckDB, optionellt lager ett lokala LLM överhuvudtaget för att kunna tolka dessa fakta.,; föreslå säkert läsbarhet.-; endast SQL.
Resultatet är:
- fast, privat profilering
- tillförlitlig automatisering (
toolJSON) - byggt-in drift-detektor
- och något som de flesta system inte kan göra alls PII- fria syntetiska datasamlingar som bevarar statistisk form
Allt utan att skicka rå rader till en modell.
Det bygger direkt på Hur man analyserar stora CSV-Dater med Lokala LLM i C#, som introducerade grundidén
LLMs borde generera frågor , inte konsumera data.
Detta artikel driver den tanken vidare.
- don’ inte mata LLM-raden
- inte till och med mata den.
- föda den statistisk form
- låta DuckDB bearbeta fakta
- låter LLM resonera över dessa fakta - och fråga efter mer
Den kompletta dokumentationen finns i DataSummarizer README verktyget ser enkelt ut. is’t skickad till modellen.
Nota: Det här är inte "’". 1.0", än. ".", det är avsiktligt. "M SK4" Interfejsen är stabil, ; Kanterna blir fortfarande skarpare.
Problemet med “Chat med dina data”
När lag ger en LLM in i dataanalys, gör de vanligtvis en av tre saker:
- kasta rader i sammanhanget (faller över snabbtM SK1 lektar data)
- bädda in stycken och hämta dem ( ända rad - nivå
- gå igenom “representativa mönster ” | | ( | ofta orepresentativa | , | fortfarande riskfyllda
Även med 200k token kontextfenster
LLMs är inte konstruerade för att bearbeta agregater , upptäcka motsägelser, eller att trovärdigt resonera om fördelningseigenheter genom att läsa rader
Det korrekta splittret är fortfarande:
LLM skäl. Databasberäkningar.
Men man kan ta ett steg längre genom att ändra vad LLM-motsägelserna över
Nyckeluppgraderingen: Statistiker som gränssnitt
Istället för att ge modellen data profil.
Ett profil är en kompakt, deterministisk sammanfattning av ett dataset.
- schema + delat typer
- noll hastighet , unikhet, cardinalitet
- min / max / kvantiteter, skewM SK3 utvikelser
- toppvärden för säkra kategorier
- PII risksignaler (regex
- tid-serienstruktur (längdM SK2 luckor , granularitet
- optional drift deltas vs en basnivå
Profilet blir gränssnitt mellan resonemang och beräkning.
Modelet kan nu
- bestämma vad som är intressant
- föresla vettiga efterfrågan
- tolka resultat
- detektera drift
…oför att någonsin se rå rader
Arkitektur
flowchart LR
A[Data file] --> B[DuckDB profiles]
B --> C[Statistical Profile JSON]
C --> D[LLM reasoning step]
D --> E[SQL/tool calls]
E --> F[DuckDB executes locally]
F --> G[Aggregate results]
G --> H[LLM synthesis]
style B stroke:#333,stroke-width:4px
style D stroke:#333,stroke-width:4px
style F stroke:#333,stroke-width:4px
Detta bevarar den välkända LLM → SQL → DuckDB loop, men ancorar den i faktaM SK1
- profilering är deterministiskt
- LLM arbetar på bevis, inte anekdoter.
Varför är profilet användbart? ( Även utan LLM
Ett profil besvarar tråkiga frågor omedelbart
- Vilka kolumner är skräp? (all -nullM SK2 konstant, näraMSC4konstantMST5
- Vilka pelare är risker för utsvämningar ( nära-unique identifiserM SK2
- Vilka kolumner är höga-null eller uteslutandeM SK1svåra ?
- Vilka är de dominerande kategorierna?
- Är denna tidsserie sammanhängande eller fylld av luckor?
- Är fördelningarna skiftade eller noll?
Det här är de frågor som du vanligtvis upptäcker 30 minuter i kalkylblads arkeologi
Profilet ger dem i sekunder.
Varför Profilet gör LLM faktiskt användbar
Om du göra aktivera LLM, profilet är det som hindrar det från att vara performativt
Med profilen- endast kontexten , kan modellen
- fokuserar på höga-entropi eller höga≥-skew kolumner
- föreslå en vettig grupp
- undvika skräp SQL ( inga grupperingar på ♫ 95%- ♫ unika kolumner ♫ МSK2 ♫
- notice distributional drift
- fråga riktade följa "-" -statistiker istället för att be om mer data
Du behöver inte en större modell
Du behöver bättre bevis
verktyget: DataSummarizer
Jag gjorde detta till en CLI så att jag kunde köra den på godtyckliga plier, inklusive cron och CI.
Vinnig start
Windows: draga en file på datasummarizer.exe
CLI:
datasummarizer mydata.csv
verktygsmöjlighet (JSON utgång )
datasummarizer tool -f mydata.csv > profile.json
Det profile.json är företaget:
- konsumerade av agenter
- lagd för driftdetektorer
- som används för syntetisk data generering
Operationella standard (Explicit
Ollama slutpunkt:
http://localhost:11434(konfigurerbar)Standardmodell:
qwen2.5-coder:7b(överrider med--model)Standardregistrer DB:
.datasummarizer.vss.duckdbSQL säkerhetsbegränsningar:
- max 20 rader återkom till LLM
- förbjudet:
COPY,ATTACH,INSTALL,CREATE,DROP,INSERT,UPDATE,DELETE, osäkraPRAGMA
Dom standarden är avsiktligt konservativa. Du kan frigöra dem - men du måste välja in
Deterministisk profilering (Example )
datasummarizer -f patients.csv --no-llm --fast
utgång (974 patientregistrer med PII ):
── Summary ────────────────────────────────────────────────
974 rows, 20 columns. 4 columns have >10% nulls. 8 warnings.
Alerter Flaggläckarisker, högM SK1 tomma kolumner , konstanta fält , och misstänkta ID-identifisatorer - alla räknade av DuckDB
Ingen gissning . Inga hallucinationer.
verktyg JSON för automatisering
datasummarizer tool -f patients.csv --store > profile.json
Förkortad utgång:
{
"Profile": {
"RowCount": 974,
"ColumnCount": 20,
"ExecutiveSummary": "974 rows, 20 columns. 18 alerts."
},
"Metadata": {
"ProfileId": "0ae8dcc4d79b",
"SchemaHash": "44d9ad8af68c1c62"
}
}
Den är designad för att differas, lagras och kontrolleras.
Automatisk driftdetektion (Cron-FriendlyM SK2
När profiler existerar, blir drift billig.
datasummarizer tool -f daily_export.csv --auto-drift --store
- KS avstånd för numeriska kolumner
- Jensen–Shannons skillnad för kategoriska
- schema-fingerprinted baselines
Det är den tråkiga infrastrukturen som är precis vad du vill ha.
Killer Feature: Syntetiska kloner från form
När du har en statistisk form, kan du göra något verkligt användbart.
Generera syntetiska datasamlingar som
- innefatta inga ursprungliga värden
- innefatta ingen PII
- bevara fördelning , cardinalitet, och sparsitetseffekter
Det är idealt för demos, CI, support repros , och delabara prover
Tillförlitlighetsrapporten kvantifierar hur nära den syntetiska datan är - snarare än hand
Tillitmodell
- Deterministiskt: alla statistiker, kvantiteter , driftscoresM SK2 och varningar är beräknade av DuckDB
- Optionell LLM: berättelse , resonemang, och bara SQL-suggestioner
- Hermetisk mode:
--no-llmproducerar fullt reviderade produkter som är lämpliga för CI eller reglerade miljöer.
LLM uppfinner aldrig fakta, det reagerar på dem.
Ta det
Repo: https://github.comM SK2scottgal/motillucidweb /treeMST5mainMstlylucidM ST7DataSummarizer
Benötningar:
- .NET 10
- DuckDB (
- optional: Ollama
Related:
- Att analysera stora CSV-filer med lokala LLMs
- DocSummarizer
- Begränsad otydighetsmönster - Den underliggande filosofin : determinismens beräkningar
- Image Summarizer - Samma mönster som tillämpas på bild förståelse