چرا Text-to-SQL در محیطهای سازمانی شکست میخورد
بیشتر دموهای Text-to-SQL بیش از حد ساده و بینقص هستند.
آنها از اسکیماهای (schemas) ساده و نامهای آشکار برای جداول استفاده میکنند. فرض را بر این میگذارند که یک یا دو جدول بهطور کامل به هم متصل هستند. این روش برای یک دمو جواب میدهد، اما در یک شرکت واقعی شکست میخورد.
در پایگاههای داده سازمانی، بخش دشوار، عبارت SELECT نیست؛ بلکه بخش دشوار، مسیر اتصال (join path) است.
یک مدل ممکن است یک پرسوجوی (query) معتبر برای محاسبه درآمد به تفکیک مشتری بنویسد. دستور SQL اجرا میشود، داشبورد اعداد را نشان میدهد، اما پاسخ اشتباه است.
چرا این اتفاق میافتد؟
- جدول مشتریان، لیست اصلی و رسمی نیست.
- فیلد درآمد، نسخه تأیید شده توسط بخش مالی نیست.
- رکوردها در مناطق مختلف تکرار شدهاند.
- اتصال (join) باعث ایجاد خطاهای fanout میشود.
- تقویمهای مالی با سالهای تقویمی متفاوت هستند.
یک پرسوجوی از نظر سینتکسی (ساختاری) معتبر، لزوماً یک پرسوجوی قابل اعتماد نیست.
سیستمهای واقعی در محیط عملیاتی (production) آشفته هستند. شما با کلیدهای خارجی مفقود، جداول قدیمی (legacy) و روابط یک-به-چند مواجه هستید که باعث بزرگنمایی اعداد میشوند. حتی انسانها هم قبل از اعتماد به یک اتصال (join)، نیاز دارند گزارشهای قدیمی را بررسی کنند یا از بخش مالی سوال بپرسند.
یک مدل هوش مصنوعی فقط نامها و ستونها را میبیند. او حدس میزند و گاهی این حدس خطرناک است.
موضوع fanout را در نظر بگیرید. اگر جداول سفارشات (orders) را به جزئیات سفارش (order lines) و سپس به محمولهها (shipments) متصل کنید، ممکن است یک سفارش چندین بار محاسبه شود. دستور SQL درست است، اما نتیجه اشتباه است.
متادیتا (Metadata) کمک میکند، اما کافی نیست. نام ستونها به شما نمیگویند که آیا یک رابطه برای گزارشدهی مالی ایمن است یا خیر. کلیدهای خارجی نیز استثنائات تاریخی را توضیح نمیدهند.
Text-to-SQL به هوشِ رابطهای (relationship intelligence) نیاز دارد.
یک سیستم قابل اعتماد باید بداند:
- مسیرهای اتصال تأیید شده برای سوالات تجاری خاص.
- کاردینالیته (cardinality) روابط.
- ریسکهای شناختهشده fanout.
- کدام مسیرها منسوخ (deprecated) شدهاند.
سیستم باید به جای صرفاً نوشتن کد، درباره ایمنیِ آن استدلال کند. سیستم باید مسیر قابل اعتماد را انتخاب کند یا در صورت نامشخص بودن مسیرها، درخواست کمک کند.
شکاف موجود در سیستمهای فعلی، جهش از نگاشت نامها به تولید SQL است. شما باید لایهای از بافتِ رابطهای (relationship context) را اضافه کنید.
Text-to-SQL فقط یک مسئله زبانی نیست؛ بلکه یک مسئله بافتاری (context) است.
تا زمانی که مدلها درک نکنند کدام اتصالات ایمن هستند، در دموها کار خواهند کرد اما در محیط عملیاتی شکست میخورند.
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
