Почему 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
