Почему Text-to-SQL не работает в корпоративной среде

Большинство демо-версий Text-to-SQL слишком идеальны.

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

В корпоративных базах данных самая сложная часть — это не оператор SELECT. Самая сложная часть — это путь соединения (join path).

Модель может написать корректный запрос для расчета выручки по клиентам. SQL выполняется. Дашборд показывает цифры. Но ответ неверный.

Почему так происходит?

  • Таблица клиентов не является официальным мастер-списком.
  • Поле выручки не является версией, утвержденной финансовым отделом.
  • Записи дублируются по разным регионам.
  • Соединение создает ошибки размножения строк (fanout errors).
  • Финансовые календари отличаются от календарных лет.

Синтаксически верный запрос — это не обязательно достоверный запрос.

Реальные производственные системы хаотичны. Вы сталкиваетесь с отсутствующими внешними ключами, устаревшими таблицами и связями «один ко многим», которые раздувают показатели. Даже людям нужно проверять старые отчеты или консультироваться с финансистами, прежде чем доверять результату соединения.

Модель ИИ видит только названия и столбцы. Она гадает. И иногда эта догадка бывает опасной.

Рассмотрим fanout. Если вы соединяете заказы (orders) со строками заказов (order lines), а затем с отгрузками (shipments), один заказ может посчитаться несколько раз. SQL написан правильно. Результат — ошибочен.

Метаданные помогают, но этого недостаточно. Названия столбцов не говорят о том, безопасна ли связь для финансовой отчетности. Внешние ключи не объясняют исторические исключения.

Text-to-SQL требует интеллекта в области взаимосвязей (relationship intelligence).

Надежная система должна знать:

  • Утвержденные пути соединения для конкретных бизнес-вопросов.
  • Кардинальность связей.
  • Известные риски fanout.
  • Какие пути являются устаревшими.

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

Пробел в текущих системах — это скачок от простого сопоставления имен к генерации SQL. Вам необходимо добавить слой контекста взаимосвязей.

Text-to-SQL — это не только проблема языка. Это проблема контекста.

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

Source: https://dev.to/arisyndata/why-text-to-sql-breaks-when-the-join-path-is-not-obvious-3bk0

Optional learning community: https://t.me/GyaanSetuAi