DataSummarizer: Profilage rapide des données locales
La plupart des systèmes “chat avec vos données” font le même blâme : ils traitent un LLM comme s’il s’agissait d’une base de données
Ils mettent des lignes dans le contexte, , emplacent des morceaux, , ou choisissent des échantillons représentatifs, M SK3 et espérons que le modèle peut déduire la structure, ±, la qualité, , et la vérité à partir d’anecdotes.
DataSummarizer adopte l’approche opposée.
Il calcule un Profil statistique déterministe de votre ensemble de données à l’aide du DuckDB, persiste ce profilM SK1 et optionnel les couches a LLM local en plus d’interpréter ces faits, proposer une lecture sûre-seulement SQL , et suivre les lignes directrices M SK3analyse de suiviMSC4 La levage lourd est numériqueMST5 vérifiableM ST6 et rapideM st7 Le LLM est délibérément restreint au raisonnement et à la narration
Le résultat est:
- rapid, profilage privé
- automatisation fiable (
toolJSON) - construction-détection de la dérive
- et quelque chose que la plupart des systèmes ne peuvent pas faire PII-sets de données synthétiques libres qui préservent la forme statistique
Tous sans envoyer des lignes brutes à un modèle.
Il s'appuie directement sur Comment analyser les grands fichiers CSV avec des LLM locaux en C#, qui a introduit l’idée de base :
Les LLM devraient générer des demandes, ne consomment pas de données.
Cet article fait avancer cette idée.
- don’t alimenter les lignes LLM
- Ne le nourrissez même pas “échantillons ” sauf si vous devez
- les aliments nutritifs de la forme statistique
- laisser DuckDB calculer les faits
- laisser le LLM se justifier sur ces faits - et demander plus
La documentation complète se trouve dans le README de DataSummarizer L’outil semble simple. Il n’est pas’tM SK2 La plupart du travail est dans ce est’t envoyé au modèle.
Note: Il s’agit d’une interface stable, les bords sont encore affinés.
Le problème avec “Chat avec vos données”
Lorsque les équipes mettent un LLM sur l’analyse de données, elles font habituellement une des trois choses suivantes :
- Mettre les lignes dans le contexte (débordement rapideM SK1 fuite de données)
- embed chunks and retrieve them (still row -levelM SK2 still leaky)
- Passer “échantillons représentatifsM SK1 ( fréquemment non représenttifs
Même avec 200k, les fenêtres contextuelles de token , il s'agit d'une abstraction erronée
Les LLM ne sont pas conçus pour calculer des agrégats, détecter les écarts , ou expliquer de façon fiable les propriétés de distribution en lisant des rangéesM SK2 Ils hallucinaient parce qu’ils’ont été invités à travailler dans une base de donnéesMSC4
La répartition correcte est toujours:
Motifs de LLM. Computes de base de données.
Mais vous pouvez aller un pas plus loin en modifiant Ce qui suit : Les raisons de la LLM sur.
La mise à niveau clé: Statistiques en tant qu’interface
Au lieu de donner les données du modèle,, donnez un Profil.
Un profil est un sommaire déterministe compact d’un ensemble de données.
- schéma + types déduits
- taux nul, uniquetéM SK1 cardinalité
- min / max / quantilesM SK2 skew, outliers
- valeurs supérieures pour les catégories sécuritaires
- Signales de risque PII (regex + classificateur
- temps-structure de la série M SK1étendue ,écarts, granularitéMSC4
- Deltas de dérive facultatifs contre une ligne de base
Ce profil devient le interface entre le raisonnement et la computation.
Le modèle peut maintenant:
- décider ce qui est intéressant
- proposer des questions de suivi raisonnables
- interpréter les résultats
- détecter la dérive
…sans jamais voir des lignes brutesM SK1
Architecture
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
Cela préserve la familiarité LLM → SQL → DuckDB loop, mais l’ancrage dans les faitsM SK1
- Le profilage est déterministe.
- LLM s’appuie sur des éléments de preuve, non pas sur des anecdotes.
Pourquoi le profil est utile (Even Without an LLM)
Un profil répond aux questions acharantes-maisM SK1immédiatement à des questions urgentes:
- Quelles sont les colonnes junk ?
- Quelles sont les colonnes qui présentent des risques de fuite (à proximitéM SK1identifiants uniques)?
- Quelles colonnes sont élevées-nulle ou exceptionnelleM SK1 lourde?
- Quelles sont les catégories dominantes?
- Cette série de temps est-elle contiguë ou remplie d’écarts?
- Les distributions sont-elles skevées ou nulles?
Voici les questions que vous découvrirez habituellement 30 minutes dans l'archéologie des feuilles de calcul .
Le profil vous les donne en secondes.
Pourquoi le profil fait de la LLM réellement utile
Si vous effectuer activer le LLM, le profil est ce qui l’empêche d’être performatif
Avec le profil-contexte seulement,le modèle peutM SK2
- concentrer sur les colonnes de haute-entropie ou de grandeM SK1skew
- Suggérer un groupe sensé-pars M SK1moyenne -catégories de cardionalité)
- Évitez le garbage SQL (pas de groupement sur 95%-columnes uniques)
- avis de la dérive de distribution
- demander cible Suivre les statistiques suivies- au lieu de demander plus de données
Vous n’avez pas besoin d’un modèle plus grand’
Vous avez besoin d’une meilleure preuve.
L’outil: DataSummarizer
J’ai transformé cela en CLI afin de pouvoir le faire fonctionner sur des fichiers arbitraires - y compris dans cron et CI - sans main
Démarrage rapide
Windows: traîner un fichier sur datasummarizer.exe
CLI:
datasummarizer mydata.csv
Mode d'outils (Outil JSON)
datasummarizer tool -f mydata.csv > profile.json
Que profile.json est le contrat:
- d'agents
- stockés pour détecter les déplacements
- utilisé pour la production de données synthétiques
Défaults opérationnels (ExplicitM SK1
Point final Ollama:
http://localhost:11434(configurable)Modèle par défaut:
qwen2.5-coder:7b(accélérer avec--model)Registre par défaut DB:
.datasummarizer.vss.duckdbConstraints de sécurité SQL:
- max 20 lignes retournées au LLM
- interdit:
COPY,ATTACH,INSTALL,CREATE,DROP,INSERT,UPDATE,DELETE, instablePRAGMA
Les valeurs par défaut sont intentionnellement conservatrices. Vous pouvez les assouplir - mais vous devez opter pour l’option .
Profilage déterministe (ExempleM SK1
datasummarizer -f patients.csv --no-llm --fast
Résultat (974 dossiers de patients avec PIIM SK1
── Summary ────────────────────────────────────────────────
974 rows, 20 columns. 4 columns have >10% nulls. 8 warnings.
Alertes Risques de fuite des drapeaux, élevésM SK1 colonnes nulles, champs constants , et identificateurs soupçonnés MST4 tous calculés par DuckDBMSC5
Aucune hypothèse. Aucune hallucinationM SK1
Outil JSON pour l'automatisation
datasummarizer tool -f patients.csv --store > profile.json
Résultats réduits:
{
"Profile": {
"RowCount": 974,
"ColumnCount": 20,
"ExecutiveSummary": "974 rows, 20 columns. 18 alerts."
},
"Metadata": {
"ProfileId": "0ae8dcc4d79b",
"SchemaHash": "44d9ad8af68c1c62"
}
}
Ce dispositif est conçu pour être différé, stocké et vérifié.
Détection automatique de la dérive (CronM SK1Friendly)
Une fois les profils existants, la dérive devient peu coûteuseM SK1
datasummarizer tool -f daily_export.csv --auto-drift --store
- Distance KS pour les colonnes numériques
- Jensen–Divergence de Shannon pour les catégories
- schéma-lignes de base imprimées par les doigts
L’infrastructure borne de ’ - est exactement ce que vous voulez.
The Killer Feature: Clones synthétiques à partir de formes
Une fois que vous avez une forme statistique, vous pouvez faire quelque chose vraiment utile.
Générer des ensembles de données synthétiques qui:
- contenir Aucune valeur originale
- contenir Il n'y a pas de PII
- préserver distribution, cardinalitéM SK1 et effets de dispersion
Il est idéal pour les repros de démonstration , CI , support repros , et des échantillons partagés |.
Le rapport de fidélité quantifie l’étendue des données synthétiques - plutôt que manuellementM SK1waving “realistique”.
Modèle de confiance
- Deterministe: toutes les statistiques, quantilesM SK1 scores de dérive , et les alertes sont calculées par DuckDB.
- Optionnel LLM: narration, raisonnementM SK1 et suggestions SQL seulement.
- Mode hermétique:
--no-llmproduit des produits entièrement vérifiables, adaptés à la CI ou aux environnements réglementés.
Le LLM n’invente jamais les faits; il réagit à ceux-ci.
Obtenez-le
Repo: https://githubMSC1comM SK2scottgal/mostlylucidwebMNK4treeMEK5mainMRK6Mostly LucidMMK7DataSummarizer
Exigences:
- .NET 10
- DuckDB (embedded)
- optionnel: Ollama
Connexe:
- Analyse des grands fichiers CSV avec les LLM locaux
- DocSummarizer
- Modèle de fuzziness restreint - La philosophie sous-jacente : calculs du déterminisme M SK2 propose la probabilité
- Sommaire de l'image - Le même modèle appliqué à la compréhension de l'image