| # NL→SQL Assistant — постановка задачи |
|
|
| **Дата:** 2026-05-10 |
| **Автор:** Julia Edomskikh |
| **Статус:** v1 draft (corrected 2026-05-10 после CX/KM review). См. также: `01_architecture.md` (v1 historical), `02_architecture_v2.md` (lean baseline), `03_eval_methodology.md` (ablation plan). |
|
|
| --- |
|
|
| ## 1. Что делаем |
|
|
| Инструмент, который принимает вопрос на естественном языке (русский или английский), |
| обращается к реляционной БД и возвращает ответ в одной из форм: |
|
|
| - **Число / скаляр** — для агрегатных вопросов («сколько заказов в марте?»). |
| - **Текстовое предложение** — для фактоидов с подстановкой данных |
| («у клиента X 12 заказов на сумму 340k за 2024 год»). |
| - **Таблица** — когда нужен список записей. |
| - **График** — когда вопрос про динамику, сравнение, распределение |
| (выбор типа графика автоматический: line / bar / pie / hist / scatter). |
| - **SQL-запрос** — всегда показывается пользователю как «доказательство» |
| + объяснение на естественном языке, что именно посчитали. |
|
|
| ## 2. Почему это не «ещё один чат с БД» |
|
|
| Демо-проект для портфолио, поэтому ценность создаётся не самим NL→SQL |
| (он есть у Vanna, DataHerald, WrenAI, defog/sqlcoder, LangChain SQLAgent), |
| а тремя слоями поверх: |
|
|
| 1. **Измеримая точность.** Eval-harness на публичных бенчмарках |
| (BIRD-bench и/или Spider) с метрикой Execution Accuracy и сравнением |
| против опубликованных результатов моделей. Без этого числа проект — игрушка. |
| 2. **Self-correction loop.** Если SQL падает или возвращает 0 строк или вырожденный |
| результат — граф автоматически переформулирует запрос с error-context |
| (паттерн из RAG_Support_Assistant: classify → retrieve → generate → verify → retry). |
| 3. **Schema-RAG, а не «всю схему в промпт».** На сложных БД (десятки таблиц, |
| сотни колонок) полная схема не влезает и шумит. Хранилище: |
| таблицы + колонки + описания + примеры значений + few-shot Q→SQL пары |
| индексируются в Chroma и достаются по релевантности к вопросу. |
|
|
| ## 3. Целевые БД |
|
|
| Для демо берём два разных профиля сложности: |
|
|
| | База | Профиль | Зачем | |
| |---|---|---| |
| | **BIRD Mini-Dev** | 500 Q→SQL примеров (специальный efficient-eval split BIRD; полный BIRD = 95 БД / 12 751 пар / 33.4 GB) | Eval-harness, число Execution Accuracy на публичном leaderboard'е | |
| | **StackExchange public dump** в Postgres | Реальная сложная схема (Posts, Users, Votes, Comments, Tags, Badges), миллионы строк, JSONB-поля, временные ряды | Демо-вопросы с красивыми графиками («активность по часам», «распределение тегов», «топ-N пользователей по карме») | |
|
|
| Опционально третья — **Sakila** или **Chinook** — для онбординг-демо |
| (простая, всем знакомая, быстро отрабатывает первое впечатление). |
|
|
| ## 4. LLM |
|
|
| Только Mistral по API. Две модели в роутинге: |
|
|
| - **`codestral-latest`** (Codestral v25.08, актуальный код-специалист — codestral-2501 deprecated с ноября 2025) — генерация SQL и self-correction. Mistral La Plateforme free tier. |
| - **`mistral-large-latest`** — объяснение результата на естественном языке (intent classification и format selection — детерминированно, без LLM, см. v2 архитектуру). |
|
|
| Embeddings — `mistral-embed`. |
|
|
| **Bakeoff providers ($0 hard budget):** `codestral-latest` + `gpt-4o-mini` через **GitHub Models** (free) + `qwen2.5-coder:7b` локально (Ollama, 4.7 GB Q4_K_M). |
|
|
| > **Provider abstraction обязательна** (LiteLLM или собственный adapter): локальное тестирование без API, замена модели для bakeoff (см. `02_architecture_v2.md` §6 + §6.6). |
|
|
| ## 5. Базовый сценарий (happy path) |
|
|
| ``` |
| Пользователь: "Покажи топ-10 тегов на StackOverflow по приросту вопросов в 2023 году" |
| | |
| v |
| 1. Classify intent → "aggregation + ranking + time-window + visualization" |
| 2. Schema retrieval → достать релевантные таблицы (Posts, Tags, PostTags) + 3 few-shot примера |
| 3. SQL generation → codestral пишет SQL с CTE по годам и приростом |
| 4. Validate → синтаксис ОК, EXPLAIN ОК, SELECT-only гард прошёл |
| 5. Execute → 10 строк × 3 колонки |
| 6. Verify → результат непустой, типы соответствуют ожиданиям |
| 7. Format → по структуре ответа выбран bar chart + краткий текст |
| 8. Render → markdown-ответ + Plotly-график + блок с SQL и объяснением |
| ``` |
|
|
| При фейле любого шага — retry с error-context (макс. 2 попытки), |
| дальше — graceful failure с показом, где именно споткнулись. |
|
|
| ## 6. Что НЕ делаем (scope cuts) |
|
|
| - Никаких write-операций. Read-only коннект к БД, гард на уровне SQL-парсера. |
| - Никакого мульти-БД join'а в одном запросе. |
| - Никакого fine-tuning моделей — только prompt-engineering + RAG. |
| - Никакой собственной аутентификации/мульти-тенанси |
| (это переусложнение для демо, в RAG_SA уже отработано — здесь не повторяем). |
| - Никаких write-back в БД на основе вопросов пользователя. |
| |
| ## 7. Критерии готовности (Definition of Done) |
| |
| - [ ] Execution Accuracy на BIRD Mini-Dev: **baseline ≥35-40% к неделе 4, stretch ≥50%**. Для калибровки: GPT-4 zero-shot на BIRD Mini-Dev = 47.8 / 40.8 / 35.8% EX (SQLite/MySQL/PostgreSQL); 50% — это уровень GPT-4 с table-augmentation, не Codestral zero-shot. **Hard checkpoint на неделе 3:** если EA <35% → scope down (см. v2 архитектуру). |
| - [ ] На StackExchange — 20 эталонных вопросов проходят end-to-end с корректным ответом. |
| - [ ] Веб-UI: ввод вопроса, четыре формата ответа, переключение БД, история. |
| - [ ] CI: тесты на гард SELECT-only, на парсер схемы, на pipeline-граф. |
| - [ ] README + диаграмма архитектуры + страница eval-результатов. |
| - [ ] Деплой: docker-compose с Postgres + Chroma + FastAPI + UI. |
| |