ПрименениеSQL

Text-to-SQL — генерация SQL из текста

Естественный язык → SQL запросы

Проблема: Бизнес-пользователям нужны данные, но они не умеют писать SQL. Разработчики превращаются в узкое место для каждого запроса "Можете вытащить цифры по...?". Как позволить любому запрашивать базу данных?

Решение: Поговори со своей базой данных

Text-to-SQL использует LLM для преобразования вопросов на естественном языке в SQL-запросы. Модели нужна схема базы данных (таблицы, столбцы, связи) в качестве контекста, после чего она генерирует корректный SQL. Это как переводчик между вопросами человека и языком базы данных — любой член команды может запрашивать данные без знания SQL.

Представьте это как эксперт по базам данных, говорящий обычным языком:

  • 1. Предоставляем схему базы данных: Включаем CREATE TABLE, описания столбцов и примеры значений в промпт
  • 2. Пользователь спрашивает на естественном языке: "Какие 5 продуктов принесли наибольшую выручку в прошлом месяце?" — знание SQL не нужно
  • 3. LLM генерирует SQL-запрос: Модель выдаёт корректный SELECT с нужными JOIN, агрегациями и фильтрами
  • 4. Валидируем и очищаем SQL: Парсим AST, отклоняем любые изменяющие данные операторы и применяем row-level security
  • 5. Выполняем на read-only реплике: Безопасно выполняем запрос, возвращаем результаты и отображаем в интерфейсе пользователя

Где это используется?

  • Бизнес-аналитика: "Покажи продажи по регионам в этом квартале" мгновенно превращается в корректный GROUP BY запрос
  • Дашборды поддержки клиентов: Агенты поддержки получают живую статистику тикетов без обращения к дата-инженеру
  • Самостоятельная отчётность: Маркетинговые и финансовые команды самостоятельно запрашивают свои данные, устраняя зависимость от разработчиков
  • Исследование данных: Аналитики задают уточняющие вопросы на естественном языке вместо переписывания запросов
  • Частая ловушка: выполнение SQL без валидации: Никогда не выполняйте SQL от LLM на продакшене без валидации — всегда запускайте на read-only реплике, защищайтесь от инъекций и требуйте подтверждения человека для деструктивных операций (UPDATE, DELETE)

Интересный факт: Бенчмарк Spider для Text-to-SQL содержит более 10 000 вопросов по 200+ базам данных. Топовые LLM достигают 85%+ точности на простых запросах, но снижаются до ~50% на сложных многотабличных JOIN. Секрет? Предоставление описаний столбцов и примеров значений вместе со схемой повышает точность на 15-20%.

Попробуйте сами!

Попробуй интерактивный пример ниже, чтобы увидеть, как вопросы на естественном языке преобразуются в SQL-запросы, и научись распознавать типичные ошибки перевода.

Перевод текста в SQL

Посмотрите, как вопросы на естественном языке превращаются в SQL-запросы шаг за шагом.

Схема базы данных интернет-магазина3 таблицы
products
PKidINT
nameVARCHAR
categoryVARCHAR
priceDECIMAL
ratingDECIMAL
in_stockBOOL
таблица
orders
PKidINT
FKproduct_idINT
FKcustomer_idINT
quantityINT
order_dateDATE
totalDECIMAL
таблица
customers
PKidINT
nameVARCHAR
emailVARCHAR
cityVARCHAR
joined_dateDATE
таблица
productsorders(product_id → products.id)
customersorders(customer_id → customers.id)
PK = Primary KeyFK = Foreign Key
Key Insight
  • Без точных имён таблиц и колонок LLM угадывает неверно. Всегда предоставляйте полную схему.
  • Одиночные SELECT с базовыми WHERE дают 85%+ точности. Сложные JOIN требуют ручной проверки.
  • Никогда не запускайте SQL от LLM на продакшене. Используйте read-only. Один пропущенный WHERE может удалить таблицу.
1 / 3

Частые вопросы

Как работает Text-to-SQL с LLM?

Вы предоставляете схему БД (таблицы, колонки, типы, связи) и вопрос на естественном языке. LLM генерирует SQL-запрос для ответа. Контекст схемы критичен — без него LLM угадывает имена таблиц и колонок.

Насколько точен SQL от LLM?

На стандартных бенчмарках топовые модели достигают 80–90% точности на простых запросах. Сложные запросы (несколько JOIN, подзапросы, оконные функции) менее надёжны. Всегда валидируйте SQL перед выполнением на продакшн-базе.

Как предотвратить SQL-инъекции из вывода LLM?

Никогда не выполняйте вывод LLM напрямую. Используйте параметризованные запросы, валидируйте SQL-синтаксис, ограничьте только SELECT (без DELETE/DROP/UPDATE) и запускайте на read-only реплике. Добавьте лимиты сложности.

Какую информацию о схеме предоставлять?

Включите имена таблиц, колонки с типами, связи первичных/внешних ключей и примеры значений для неочевидных колонок. CREATE TABLE — самый эффективный формат. Добавьте комментарии для неочевидных имён.

Попробуй сам

Интерактивное демо этой техники

Сравнение техник
Демо режим
Предзаписанные ответы
ЗадачаНачинающийКод

Преобразуй простой вопрос на естественном языке в SELECT-запрос

Без техники
Без техники
Промпт
Напиши SQL: "покажи всех пользователей из Москвы"
Ответ

SELECT * FROM users WHERE city = "Moscow";

Токены:16/18
Время:210ms
Качество:
С applications-text-to-sql
С техникой
Промпт
Преобразуй вопрос в SQL-запрос. Используй схему базы данных ниже. **Схема:** ```sql CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(255) UNIQUE, city VARCHAR(100), created_at TIMESTAMP, is_active BOOLEAN DEFAULT true ); ``` **Правила генерации:** - Используй конкретные имена столбцов вместо SELECT * - Добавь WHERE is_active = true если фильтрация по активным не противоречит вопросу - Используй одинарные кавычки для строк (стандарт SQL) - Добавь ORDER BY для детерминированного результата - Верни только код запроса без пояснений **Вопрос:** "Покажи всех активных пользователей из Москвы, отсортированных по имени"
Ответ
SELECT id, name, email, city, created_at
FROM users
WHERE city = 'Moscow'
  AND is_active = true
ORDER BY name ASC;
👁️Схема таблицы устраняет необходимость угадывать имена столбцов и типы данных
🧠Правило «конкретные столбцы вместо *» делает запрос предсказуемым и безопасным для индексов
🔍Одинарные кавычки и ORDER BY — детали, которые без явного указания модель часто пропускает
Токены:155/52
Время:640ms
Качество:
Почему это работает

Text-to-SQL без схемы — это угадывание. Предоставление DDL-схемы, стандартов кавычек и правил SELECT * превращает приблизительный запрос в корректный, готовый к выполнению SQL.

1 / 2

Квиз по уроку

1 из 3

1.Какой контекст наиболее критичен для Text-to-SQL?

Практика

Создайте бесплатный аккаунт для решения челленджей

1 челленджей с AI-проверкой для этого урока

Связанные уроки:Structured OutputInformation Extraction

Этот урок — часть структурированного курса по LLM.

Мой путь обучения