«Спросить данные одной фразой» звучит просто, но на практике нужно решить много задач: бизнес-показатели трактуются по-разному, схема таблиц сложна, сгенерированный SQL может ошибаться, права нельзя превышать, а результат должен быть объяснимым. Суть AI API для анализа данных не в том, чтобы модель «умела писать SQL», а в том, чтобы стабильно переводить вопрос на естественном языке в доверенные данные и отчёты.

Ниже — схема внедрения для компании: архитектура, проектирование схемы, промпты, проверки, права, тестирование точности и стоимость.

Примечание: базы данных, BI-платформы и интерфейсы моделей различаются; пример основан на распространённой связке «база только для чтения + OpenAI-совместимый диалоговый интерфейс». Модели и цены смотрите в разделе тарифов.

1. Общая архитектура

Цепочку стоит разбить на наблюдаемые шаги:

Вопрос на естественном языке
  → определение намерения (запрос / объяснение / уточнение)
  → поиск по схеме (таблицы, поля, метрики, примеры)
  → генерация SQL
  → статическая проверка + внедрение прав
  → выполнение только для чтения (тайм-аут, лимит строк)
  → проверка результата
  → конфигурация графика + текстовая интерпретация

Ключевые принципы:

  1. Модель не подключается к продакшен-базе напрямую, только к реплике для чтения или хранилищу.
  2. Права внедряются на сервере, а не через ограничения в промпте.
  3. Каждый шаг оставляет лог: вопрос, найденные таблицы, сгенерированный SQL, время выполнения, число строк.
  4. При сбое пользователь получает понятное объяснение, а не сырой текст ошибки базы.

2. Схема важнее модели

Модель не знает, как в вашей компании определяются «активный пользователь» или «действительный заказ». Эти знания нужно явно передать.

Для каждой таблицы рекомендуется вести «карточку схемы»:

Поле Пример содержимого
Имя таблицы dwd_order
Бизнес-смысл Детализация заказов, одна строка — один товар в заказе
Первичный ключ / гранулярность order_id + sku_id
Частые поля Время заказа, сумма оплаты, статус, канал
Определение метрики Сумма оплаты = фактически оплачено, без возвратов
Связанные таблицы Пользователи, товары, каналы
Запрет Не использовать create_time вместо времени оплаты
Пример вопроса Сумма оплаты по каналам за последние 30 дней

Кроме карточек нужны:

  • бизнес-синонимы: GMV, выручка и оборот указывают на одну метрику;
  • словарь метрик: определение, числитель и знаменатель, временные рамки, задержка данных;
  • несколько примеров «вопрос → SQL» для типовых запросов;
  • пути join между таблицами, чтобы модель не угадывала ключи связи.

Поиск по схеме можно делать по ключевым словам и векторам, передавая в контекст 5–10 наиболее релевантных таблиц и определений. Передавать всю схему дорого и вредно: она мешает.

3. Как писать промпт

Цель промпта — ограничивать, а не вдохновлять. Рабочий шаблон:

Ты помощник по анализу данных компании. По заданной схеме и определениям метрик переведи вопрос пользователя в SQL.
Требования:
1. Генерируй только один оператор SELECT; INSERT/UPDATE/DELETE/DDL запрещены.
2. Используй только предоставленные таблицы и поля, не придумывай поля.
3. Определения метрик бери из «словаря метрик» и указывай их в assumptions.
4. Если период не указан, по умолчанию бери последние 30 дней и фиксируй это предположение.
5. Если вопрос неоднозначен, сначала верни clarifying_question, не угадывай.
6. Выводи JSON: {"sql": "", "assumptions": [], "clarifying_question": null}

Несколько деталей:

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

4. Проверка SQL и защитные барьеры

Генерация SQL — только начало. Перед выполнением нужно минимум пять проверок:

  1. Синтаксический разбор: разобрать парсером, отклонить несколько операторов.
  2. Тип оператора: разрешить только SELECT, запретить запись и хранимые процедуры.
  3. Белый список объектов: таблицы и поля должны быть в разрешённом перечне.
  4. Внедрение прав: автоматически добавлять фильтры по арендатору, подразделению, региону.
  5. Контроль стоимости: период, LIMIT, тайм-аут и лимит объёма сканирования.

На уровне выполнения используйте отдельную учётную запись только для чтения, подключайтесь к реплике и задайте:

  • тайм-аут запроса, например 30 секунд;
  • максимальное число строк, например 1000;
  • для больших таблиц сначала EXPLAIN и оценка объёма сканирования;
  • не более 1–2 повторов, ошибку базы можно вернуть модели для исправления;
  • кэш одинаковых вопросов, ключ включает область прав пользователя.

5. Права: модель не заменяет систему доступа

Самая частая авария в вопросах к данным — «пользователь увидел то, что видеть не должен». Правильно — переиспользовать модель прав BI/хранилища:

  • уровень набора данных: к каким таблицам есть доступ;
  • уровень строк: фильтрация по арендатору, подразделению, региону;
  • уровень столбцов: телефоны, удостоверения, закупочные цены маскируются или скрываются;
  • уровень метрик: чувствительные показатели выдаются отдельно;
  • уровень сессии: при смене пользователя контекст и кэш очищаются.

Модель отвечает только за намерение запроса; права сервер принудительно внедряет на уровне SQL или представлений. В журнале фиксируйте исходный вопрос, финальный SQL, исполнителя и число строк — для аудита. Экспорт разрешайте отдельно, чтобы «может смотреть» не означало «может скачать всё».

6. От результата к графику

Результат запроса — ещё не отчёт. Лучше просить модель выдавать «конфигурацию графика + текстовый вывод», а не готовую картинку:

Форма данных Рекомендуемый график
Временной ряд Линейный график
Сравнение категорий Столбчатая диаграмма
Доли Круговая или накопительная столбчатая
Корреляция Точечная диаграмма
Одна метрика Карточка показателя

Текстовый вывод должен содержать трактовку, период, ключевые числа и аномалии. Например: «За последние 30 дней сумма оплаты снизилась на 8% к предыдущему периоду, основной вклад — канал Восточного Китая», с раскрываемой детализацией. Не ограничивайтесь фразой «данные показывают хорошую динамику».

7. Как измерять точность

Подготовьте 100–300 реальных бизнес-вопросов по уровням сложности:

  • запросы по одной таблице и агрегаты;
  • join нескольких таблиц;
  • год к году, месяц к месяцу, доли;
  • неоднозначные вопросы, требующие уточнения;
  • вопросы без данных или без прав.

Оценивайте не похожесть SQL, а совпадение результата выполнения. Фиксируйте:

Метрика Пояснение
Точность выполнения Результат совпадает с эталоном
Доля уточнений Правильно ли задан встречный вопрос
Блокировка превышения прав Отклонены ли запросы без доступа
Объяснимость сбоев Превращается ли ошибка в понятный текст
Средняя задержка От вопроса до графика

Прогоняйте регрессию раз в неделю и обязательно после изменений модели или схемы. На старте оставьте режим «ручное подтверждение SQL», автоматическое выполнение включайте после стабилизации.

8. Стоимость и производительность

Затраты складываются из трёх частей: поиск по схеме, генерация SQL, интерпретация результата.

  • Векторный поиск сокращает контекст — передавайте только релевантные таблицы.
  • Определение намерения и простые запросы — небольшой моделью, сложные — сильной.
  • Кэшируйте частые вопросы и результаты в одинаковой области прав.
  • Для интерпретации передавайте агрегаты, а не полную детализацию.
  • Длинные схемы сокращайте, не отправляйте каждый раз полный DDL.

Формула оценки:

Стоимость запроса =
  токены контекста схемы × цена входа
+ токены сгенерированного SQL × цена выхода
+ токены интерпретации × цена
+ стоимость выполнения в базе

Конкретные цены смотрите в разделе тарифов; стоимость базы считайте отдельно, особенно для сканирования больших таблиц.

9. Типовые сбои и решения

Симптом Частая причина Что делать
Поле не существует Схема не найдена или модель придумала поле Проверка по белому списку + повтор с текстом ошибки
Разная трактовка метрики Нет определения Дополнить словарь, требовать assumptions
Раздувание результата join Неверный ключ или гранулярность Дать пути join, проверять число строк
Неверный период Неясны часовой пояс или значение по умолчанию Единый часовой пояс, явный период по умолчанию
Превышение прав Только ограничения промпта Принудительные фильтры на сервере
Ответ не по теме Неоднозначный вопрос Сначала уточнить, затем запрашивать

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

Заменит ли AI-анализ данных BI?

Нет. Он лучше подходит для временных вопросов, быстрого получения данных и объяснения отчётов; сложные регулярные отчёты по-прежнему остаются за BI.

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

Нет. Поиск по схеме передаёт только релевантные таблицы и метрики — это дешевле и снижает число ошибок.

Можно ли выполнять сгенерированный SQL сразу?

Не рекомендуется. Нужны четыре проверки: синтаксис, белый список, права и стоимость, а выполнение — только на реплике для чтения.

Какой точности можно достичь?

Зависит от качества схемы, сложности вопросов и методики оценки. Сначала постройте базовый уровень на реальных вопросах, затем улучшайте по неделям; не судите по демонстрационным примерам.

С чего начать небольшой команде?

Выберите один домен, например продажи или операции, опишите 10–20 таблиц и словарь метрик, соберите набор из 50 вопросов и решите, стоит ли расширяться.

Что дальше

Успех анализа данных на 80% зависит от схемы, трактовки метрик и прав, а не от параметров модели. Начните с POC в одном домене, пройдите цикл «вопрос — проверка — выполнение — график — объяснение», затем расширяйтесь. Если нужен единый вход к моделям и управление расходом, можно зарегистрироваться в ZSQH AI Gateway; модели и цены смотрите в разделе тарифов.

Читайте также: