Сравнение с ручными SQL-запросами и выгрузками в Excel

Text-to-SQL на русском: вопросы к базе данных обычным языком

ручными SQL-запросами и выгрузками в Excel

Обложка статьи: Text-to-SQL на русском

Text-to-SQL — это когда нейросеть переводит вопрос на обычном языке («сколько заказов закрыто в сентябре по менеджерам») в запрос к базе данных и возвращает ответ. Языковые модели уже уверенно пишут SQL и понимают русский, поэтому главная трудность не в синтаксисе, а в другом: модель должна знать схему базы и смысл ваших терминов, а запрос должен выполняться с узкими правами. В Интеграме модель вообще не пишет SQL: агент ИИ-чата составляет запрос на языке Интеграма — какие таблицы, колонки, фильтры и итоги нужны, — а ядро платформы само переводит его в SQL и выполняет с правами пользователя. Запрос остаётся в базе обычным отчётом, его можно открыть и проверить.

Text-to-SQL устроен просто. Пользователь пишет вопрос, система передаёт модели этот вопрос вместе с описанием базы — какие есть таблицы, колонки и связи, — модель составляет SQL-запрос, система его выполняет и показывает таблицу или число. Массовым этот подход стал вместе с большими языковыми моделями: они хорошо пишут код, включая SQL, и понимают вопросы на русском. Например, Сбер в описании линейки GigaChat 2 (Lite, Pro и Max) отдельно говорит о написании кода и о вызове внешних функций — двух навыках, на которых держатся и Text-to-SQL, и ИИ-агенты. Сложность Text-to-SQL не в языке SQL, а в смысле вопроса. «Выручка» — с НДС или без, по дате оплаты или отгрузки? Кто считается «активным клиентом»? Что лежит в колонке status2, и почему в поле «Город» встречаются и «Москва», и «г. Москва»? Человек-аналитик знает это из опыта, модель — только из того, что ей передали. Исследователи это учитывают: бенчмарк BIRD собран из 12 751 пары «вопрос — SQL» на 95 реальных базах общим объёмом 33,4 ГБ из более чем 37 предметных областей, со специально «грязными» значениями и вопросами, для которых нужны внешние знания. Даже у людей — инженеров данных и студентов-специалистов по базам — точность исполнения на нём указана на уровне 92,96%. Вывод простой: безошибочного перевода вопроса в запрос не бывает, поэтому важно не только как ИИ пишет запрос, но и как устроены права, проверка и следы. Точность упирается не только в модель, но и в то, что ей передали. Мы проверяли это на своём замере семи моделей: при поиске по словам GigaChat 2 Max, YandexGPT Pro и Claude Opus 5 отвечают верно в 40–42% случаев, а с памятью, которая подаёт модели нужные факты, GigaChat 2 Max выходит на 57% и обходит Claude Opus 5 без неё (41%). Задача там другая — найти в истории проекта изменение, которое уже чинило проблему, — но вывод для Text-to-SQL тот же: актуальная схема и описание данных в контексте дают больше, чем смена модели.

Три способа получить ответ из базы

Text-to-SQL можно «прикрутить» к любой СУБД, но тогда схему, права и проверку ответа приходится решать отдельно. В Интеграме модель пишет не SQL, а запрос платформы, и эти вопросы решает ядро.

SQL вручнуюText-to-SQL поверх СУБДИИ-чат в Интеграме
Кто составляет запросАналитик или программист, знающий SQL и схемуМодель пишет SQL по вопросу и по описанию схемы, переданному в промтАгент пишет запрос на языке Интеграма (отчёт: колонки, фильтры, итоги), SQL из него строит ядро
Знание схемыВ голове аналитика и в документацииОписание схемы нужно собрать и поддерживать, иначе модель гадает по названиям колонокОписание таблиц хранится рядом с данными; новая таблица видна агенту сразу после создания
С какими правами выполняетсяС учётной записью СУБД аналитикаЧасто с общим сервисным ключом; нужна отдельная учётная запись только на чтениеС правами пользователя: проверка на сервере, как для действия человека
Риск изменить данныеЗависит от дисциплины аналитикаЕсли у учётной записи есть права записи, модель может сгенерировать UPDATE или DELETEУдаление и изменение структуры — только после подтверждения человеком
Проверка ответаАналитик видит свой запросНужно показывать пользователю сгенерированный SQLОтчёт с видимыми колонками, фильтрами и итогами остаётся в системе — его читают без знания SQL
Что остаётся послеЗапрос в файле аналитикаОтвет в окне чатаОтчёт в базе и запись в журнале обращений к ИИ

Контекст

Text-to-SQL нужен там, где вопросы к данным есть у многих, а SQL знают единицы. Типичные вопросы, которые сотрудники хотят задать базе обычным языком:

  • руководитель продаж: «сколько сделок закрыто в сентябре по каждому менеджеру и какая средняя сумма»;
  • склад: «какие позиции не двигались больше 90 дней и сколько их на остатке»;
  • договорной отдел: «у каких клиентов договор истекает в ближайшие 60 дней и кто за них отвечает»;
  • финансы: «сравни оплаты по месяцам за этот и прошлый год»;
  • сервис: «сколько заявок просрочено и у кого из исполнителей их больше всего».

Как это решает Интеграм

В Интеграме вопрос к данным задают в ИИ-чате внутри базы — он есть и в каждом приложении, собранном через сервис «Excel → приложение». За чатом стоит агент с инструкцией по работе с платформой: он умеет не только отвечать на вопросы, но и достраивать само приложение — таблицы, экраны, роли. Строки подключения к СУБД у него нет, он работает через API Интеграма под учётной записью пользователя. Вопрос к данным проходит так:

  1. вопрос пишется обычными словами — ИИ-консультанту на экране таблицы, карточки или отчёта, в ИИ-чат базы или во внешнем ИИ-клиенте, подключённом через MCP-сервер integram-mcp;
  2. агент читает актуальную структуру базы — таблицы, колонки, типы и связи — через API; видно только то, что разрешено этой учётной записи;
  3. агент составляет запрос на языке Интеграма. Запрос — это запись в служебной таблице «Запрос»: какие колонки взять, из каких таблиц и по каким связям, что суммировать или считать, как сортировать. Условия передаются параметрами — например, «Дата с 01.09.2026 по 30.09.2026», «Статус = Закрыта»;
  4. ядро переводит такой запрос в SQL — со связями, агрегатами, вложенными запросами и рекурсией — и выполняет его. Маска роли («менеджер видит только своих клиентов») применяется к запросу автоматически, обойти её формулировкой вопроса нельзя;
  5. ответ приходит в чат, а отчёт остаётся в системе: его можно открыть, проверить фильтры, выгрузить в XLSX или забрать в JSON по тому же адресу;
  6. если из вопроса вырастает действие — «закрой эти заявки», «добавь колонку», — удаление и изменение структуры выполняются только после подтверждения человеком, а каждое обращение к ИИ записывается в журнал;
  7. для чувствительных данных модель разворачивается в вашем контуре (Ollama, vLLM), а для внешней модели правила DLP задают таблицы, которые в неё отправлять нельзя.

Вопросы и ответы

Что такое Text-to-SQL простыми словами?

Это перевод вопроса на обычном языке в запрос к базе данных. Вы пишете «сколько заказов закрыто в сентябре», нейросеть по описанию базы составляет SQL-запрос, система его выполняет и показывает результат.

Может ли нейросеть написать SQL-запрос по вопросу на русском?

Да. Большие языковые модели пишут SQL и понимают русский. Основная трудность не в языке, а в том, знает ли модель схему вашей базы и что вы имеете в виду под «выручкой» или «активным клиентом».

Насколько точен Text-to-SQL?

Универсальной цифры нет: всё зависит от модели, схемы, качества данных и формулировки вопроса. Показательно, что на бенчмарке BIRD с реальными «грязными» базами даже у людей-специалистов точность исполнения указана около 93%. Поэтому ответы для важных решений нужно проверять.

Можно ли использовать GigaChat для запросов к базе данных?

GigaChat — семейство моделей Сбера; по описанию разработчиков, GigaChat 2 пишет код и умеет вызывать внешние функции, то есть подходит и для генерации SQL, и для агентных сценариев. Для Text-to-SQL выбор модели — лишь часть задачи: нужны ещё актуальная схема, узкие права и проверка результата. В нашем замере GigaChat 2 Max с хорошим контекстом обошёл Claude Opus 5 с обычным поиском — 57% против 41%.

Пишет ли ИИ-чат Интеграма SQL?

Нет. Агент составляет запрос на языке Интеграма — колонки, связи, фильтры, итоги, — а ядро платформы переводит его в SQL и выполняет с правами пользователя. Поэтому модели не нужно знать устройство хранилища, а запрос остаётся в базе обычным отчётом, который можно открыть и проверить.

Не испортит ли ИИ данные, отвечая на вопрос?

В Интеграме агент работает с правами пользователя, а удаление и изменение структуры выполняет только после подтверждения человеком. Для вопросов к данным агенту достаточно роли только на чтение.

Нужно ли заранее описывать базу для ИИ?

В Интеграме — нет. Агент читает структуру таблиц при каждом запросе, поэтому новая таблица или колонка доступна для вопросов сразу после создания.