# DataSummarizer: швидке локальне відображання даних

<!--category-- Data Analysis, DuckDB, C#, LLM -->
<datetime class="hidden">2025-12-22T18:30</datetime>

Більшість систем “ спілкується з вашими даними ” робить ту ж саму помилку МSK2 вони ставляться до LLM так, наче це база даних

Вони вміщують рядки у контекст: , вміщають шматочки, , або вибирають МSK2 репрезентативні зразки, \ ” і сподіваються, що модель зможе зробити висновок про структуру, ♫ , ♫ якість, ♪ , ♫ та правду з анекдотів. ♫ МSK6 ♫ Це працює достатньо добре для демонстрації, | - ♫ а потім зруйнується під масштабом. ♪ МSK8 ♫ обмеження конфіденциальності. \ МSK9 ♫ або базові питання, такі як: ♫“ ♫ це сміття в цій колоні? \?” ♫

**DataSummarizer використовує протилежний підхід.**

Він обчислює **детерміністичний статистичний профіль** вашого масиву даних, використовуючи DuckDB, і *опціонально* шари **локальний LLM** нагорі, щоб інтерпретувати ці факти, запропонувати безпечне читанняM SK1 тільки SQL , і вказівник слідувати за нею- аналіз доти МSK4 Тяжке підтримування є числовимМSK5 перевірянимMSC6 і швидкимMSL7 ЛЛМ навмисно обмежений мисленням та розповіддю

Результат::

* швидко, приватне відображання
* надійна автоматизація (`tool` JSON)
* збудована
* і те, що більшість систем не можуть зробити **PII-бесплатні синтетичні набори даних, що зберігають статистичну форму**

Все без відправлення сирих рядків до моделі.

Це будується безпосередньо на **[Як аналізувати великі CSV-файли з локальною LLM в C#](/blog/analysing-large-csv-files-with-local-llms)**,, що запропонувала головну ідею

> **LLM повинні генерувати питання, не споживати данихM SK1**

Ця стаття просуває цю ідею далі.

* don’ не fed ряди LLM
* навіть не годувати його. “заказкиM SK2 якщо ви не повинні
* нагодувати його **статистична форма**
* дозволити DuckDB обчислювати факти
* дозвольте LLM пояснити ці факти - і попросити про більше

---


[![Реліз GitHub](https://img.shields.io/github/v/release/scottgal/mostlylucidweb?filter=datasummarizer*&label=datasummarizer)](https://github.com/scottgal/mostlylucidweb/releases?q=datasummarizer)

> Полна документація живе в
> **[README DataSummarizer](https://github.com/scottgal/mostlylucidweb/blob/main/Mostlylucid.DataSummarizer/README.md)**
> Інструмент виглядає простим. *isn’t* надсилають на модель.

> **Nota:** Це не МСК0 , а МСК1 . Це ще ".", це intentional , МСК3 . МСК4 інтерфейс стабільний.

---


## Проблема з “Chat із вашими даними”

Коли команди підключають LLM до аналізу даних, вони зазвичай роблять одну з трьох речей:

1. ввести рядки у контекст. ( падіння над швидкою швидкістю
2. вміщувати фрагменти і відібрати їх (залишковий ряд МSK1рівномір МSK2 досі нестабільний )
3. пройти “реprezentативні зразки ” МSK2 часто нереprezentивні МSK3 все ще ризиковані M SK4

Навіть з 200k токенними контекстними вікнами

ЛЛМ не розроблені для обчислення сукупностей МСК0 виявлення помилок МSK1 чи надійного усвідомлення розподілу властивостей, читаючи рядки . Вони галюцинують через те, що їх запрошують виконувати роботу з базою даних.

Правильний розподіл залишається::

**Причина LLM. Перерахунки з бази данихM SK1**

Але ви можете піти ще один крок далі, змінюючи *що* причини LLM над .

---


## Key Upgrade: статистики як інтерфейс

Замість того, щоб дати модельні дані, **Профиль**.

Профиль - це компактний, детермінативний підсумок набору даних

* схема + випливають типи
* нульова ставка МСК0 унікальність МSK1 кардинальність
* мінус / макс МSK1 количини МSK2 skew , відхилення
* верхні значення для безпечних категорій
* Різкові сигнали ПII (регекс МSK1 класифікатор
* час-зрізок серії МSK1широтаM SK2 прогалини МSK3 граніальність )
* опціональний дрейф Deltas проти базової лінії

Цей профіль стає *інтерфейс* між мисленням і обчисленням.

Модель тепер

* вирішити, що є цікавим
* запропонувати розумні результати
* інтерпретувати результати
* розпізнати дрейф

…без жодного споглядання сирих рядківM SK1

### Архітектура

```mermaid
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
```

Це зберігає знайоме **LLM → SQL → DuckDB** петля, але прикріплює її до фактівM SK1

* структурування є детерміністичним
* ЛЛМ працює на основі доказів, а не анекдотів

---


## Чому цей профіль корисний? ( Навіть без LLM

Профиль відповідає нудним питанням.

* Які стовпці є сміттям? (всеM SK1null, константаМSK3 біляMSC4констанціяMSL5
* Які стовпії є ризиками витіку (наблизькіM SK1виняткові идентификатори)?
* Які стовпії високі-null або винятковіM SK1heavy?
* Якими є домінуючі категорії?
* Чи ця часова послідовність супутна чи повна прогалин?
* Чи розподіли skewed чи zero-inflated

Це питання, які ви зазвичай знаходите. 30 хвилини в археології таблиц

Профиль дає їх за кілька секунд.

---


## Чому профіль робить LLM дійсно корисним

Якщо ви *зробити* ввімкнути LLM, цей профіль - це те, що зупиняє його performaтивність

З профилем- тільки контекстом, модель можеM SK2

* зосереджуватися на високих-ентропіях або високих≥-скау столбках
* suggest sensible group-bys (lowM SK2cardinality categoricals )
* уникати сміттєвих SQL (не групування на МSK1унічні столбціM SK2
* зауваження розподільного дрейфу
* запитувати *націлена* стежити за статистикою замість того, щоб попросити більше даних

Вам не потрібна більша модель

Вам потрібні кращі докази.

---


## Програмне забезпечення: DataSummarizer

Я перетворив це на CLI, так що я міг запускати його на произвольних файлах - включно з cronом та CI - без руки МSK2 кожен раз для аналізу записів

[![Реліз GitHub](https://img.shields.io/github/v/release/scottgal/mostlylucidweb?filter=datasummarizer*&label=datasummarizer)](https://github.com/scottgal/mostlylucidweb/releases?q=datasummarizer)

### Швидкий старт

**Windows:** перетащите файл `datasummarizer.exe`

**МSK0**

```bash
datasummarizer mydata.csv
```

### Устрій інструмента ( виход JSON )

```bash
datasummarizer tool -f mydata.csv > profile.json
```

Це `profile.json` це контракт

* споживані агентами
* зберігається для виявлення дрейфу
* для генерації синтетичних даних

---


## За замовчанням: (ВиразокM SK1

* Ольlama кінцевий пункт: `http://localhost:11434` (конфигурованийM SK1

* Початкова модель: `qwen2.5-coder:7b` (переходити з `--model`)

* Початковий реестр DB: `.datasummarizer.vss.duckdb`

* Ситуація безпеки SQL:
  
  * max 20 ряди повертаються до LLM
  * заборонено: `COPY`, `ATTACH`, `INSTALL`, `CREATE`, `DROP`, `INSERT`, `UPDATE`, `DELETE`, небезпечно `PRAGMA`

Погані стандарти є навмисно консервативними. Ви можете розслабити їх M SK1 але вам треба вибрати в.

---


## Детерміністичний профиль (ПрикладM SK1

```bash
datasummarizer -f patients.csv --no-llm --fast
```

Виходи (974 записи пацієнтів з ПIIМSK1

```
── Summary ────────────────────────────────────────────────
974 rows, 20 columns. 4 columns have >10% nulls. 8 warnings.
```

Оповіщення про ризики витіку прапорця, високийM SK1 нульові стовпці , постійні поля МSK3 і підозрювані идентификатори - усі обчислені Дак-ДБMSC5

Ніяких припущень. Ніяких галюцинаційM SK1

---


## Набір інструментів JSON для автоматизації

```bash
datasummarizer tool -f patients.csv --store > profile.json
```

Приблизне wyjście:

```json
{
  "Profile": {
    "RowCount": 974,
    "ColumnCount": 20,
    "ExecutiveSummary": "974 rows, 20 columns. 18 alerts."
  },
  "Metadata": {
    "ProfileId": "0ae8dcc4d79b",
    "SchemaHash": "44d9ad8af68c1c62"
  }
}
```

Це розроблено для дефіциту , зберігання, і аудиту МSK2

---


## Автоматичний розпізнавання дрейфу (CronM SK1Friendly)

Як тільки profile існують, drift стає дешевим.

```bash
datasummarizer tool -f daily_export.csv --auto-drift --store
```

* Відстань KS для числових столбів
* Jensen–Шанонова дивергенція для категоричних
* schema-картини з пальцями

Це - нудна інфраструктура. МСК1 - саме те, чого ви хочете. МSK2

---


## Функція вбивця: Синтетичні клони з форми

Як тільки у вас з 'явиться статистична форма, ви можете зробити щось дійсно корисниеM SK1

Створити синтетичні набори даних, що:

* утримувати **ніяких оригінальних цінностей**
* утримувати **без ПII**
* зберегти **розподілу, кардинальністьM SK1 та впливи на розсіяність**

Це ідеальне для демонстрацій, CIM SK1 підтримувальних репромов, та спільних зразків .

Досконалість звіту вимірює, наскільки близькі синтетичні дані є -, а не ручним МSK1 хвилянням МSK2 реалістичним ”.

---


## Модель довіри

* **Детерміністичне:** всі статистичні дані, колицілиM SK1 показники дрейфу , і попередження обчислені комп 'ютером DuckDB
* **Опціональний LLM:** розповідь, обґрунтування
* **Герметичний режим:** `--no-llm` виробляє повністю перевірямі продукти, які підходять для CI або регулюванного середовища.

ЛЛМ ніколи не винаходить факти.

---


## Зрозумійте

**Репо:**
[https://githubMSC1comM SK2scottgal/mostlylucidwebMSL4treeMST5mainMSR6Mostly LucidM ST7DataSummarizer](https://github.com/scottgal/mostlylucidweb/tree/main/Mostlylucid.DataSummarizer)

**Требування:**

* МSK0NET 10
* Дак-ДБ (вбудованийM SK1
* опціонально: Ollama

**Подібне:**

* [Анализ великих CSV-файлів за допомогою локальних LLM](/blog/analysing-large-csv-files-with-local-llms)
* [DocSummarizer](/blog/building-a-document-summarizer-with-rag)
* [Стриманий візерунок невизначеності](/blog/constrained-fuzziness-pattern) - По суті, філософія : обчислення детермінізму МSK2 запропонує
* [Підсумовувач зображення](/blog/constrained-fuzzy-image-intelligence) - Те ж саме наслідування застосовується для розуміння зображення