Iالحجة ضد SQL المُولَّد

لا ينبغي للنموذج أن
يكتب SQL.

تحويل النص إلى SQL هو المسار الأوضح لتوجيه وكيل نحو قاعدة بيانات، والعرض التوضيحي مثير للإعجاب فعلًا. لكن الإنتاج هو حيث تنقلب الأمور: السؤال ذاته يُترجَم إلى SQL مختلف، وخطأ صامت في الربط يُحرّك الإيرادات 15%، ومخرجات النموذج تصبح سطحًا للهجوم. ثمة مسار آخر.

IIالاعتراف أولًا

تحويل النص إلى SQL استحق الضجة — في نطاقه.

حيث يكون الأداة المناسبة

  • النماذج الأولية على بيانات مؤقتة
  • استكشاف مخطط غير مألوف بإشراف بشري
  • أسئلة استثنائية سيراجعها أحدهم
  • العرض التوضيحي — يبدو رائعاً فعلاً في العروض

حيث ينهار

  • أرقام سيُبنى عليها قرارات
  • نص غير موثوق في أي مكان من السياق
  • بيانات اعتماد الإنتاج على الاتصال
  • إجابات يجب أن تكون قابلة للتكرار أو المراجعة
  • وكلاء يعملون دون إشراف

النمط ليس خاطئاً. نطاق الضرر هو المشكلة. كل خطر في هذه الصفحة يعود إلى خيار تصميمي واحد: مخرجات النموذج تُنفَّذ كأكواد برمجية.

IIIالمساران

سؤال واحد. بنيتان مختلفتان.

تابع سؤالاً واحداً عبر المسارين — سلسلة SQL حرة على اليسار، وخطة مكتوبة بأنواع على اليمين. الأرقام المرقّمة تشير إلى سجل المخاطر أدناه.

السؤال

أي منطقة حققت أعلى إجمالي إيرادات؟

المسار A

النموذج يكتب SQL

  1. النموذج يرتجل سلسلة نصية 010304

    كل ما قرأه النموذج — رسالة مستخدم، أو صف مسترجع — قد يشكّل هذه السلسلة.

    التشغيل 1SELECT region, SUM(total) FROM orders GROUP BY region;التشغيل 2 · نفس السؤالSELECT o.region, SUM(i.amount) FROM orders o LEFT JOIN order_items i ON i.order_id = o.id GROUP BY 1;
  2. اتصالك ينفّذها 05

    بالصلاحيات الكاملة للاتصال. قراءة، ودمج — وما لم يتذكر أحدهم تفعيل الخيار، كتابة أيضاً.

الإجابة

run 1 → east · 2130.50

run 2 → east · 2450.08+15% — تضخم الدمج 02

تشغيلان، رقمان مختلفان. كلاهما معقول. لا مؤشر على أيهما — إن كان أيٌّ منهما — صحيحاً.

المسار B

النموذج يُقدّم خطة مكتوبة بأنواع

  1. نية مكتوبة بأنواع

    ليست سلسلة نصية — بل قيمة ذات مخطط. لا يمكنها إلا تسمية العمليات التي يحددها العقد.

    { "kind": "query", "version": "1", "source": "revenue", "op": "sum", "group_by": "region" }
  2. فحص العقد

    مثبَّت بالتجزئة. عملية غير معروفة تُعيد unsupported_operation مع أقرب البدائل — لا تخمين أبداً.

  3. فحص السياسة

    قائمة السماح على مستوى الكود. الطلب يمكنه تضييق النطاق فحسب، لا توسيعه.

  4. تنفيذ حتمي

    float64، خيط واحد، بيئة تشغيل مثبّتة. نفس الخطة، نفس البايتات، نفس الإجابة.

الإجابة

east · 2130.50

plan_hash f87610d8afeb…

decision_path "exact_spec"

إجابة واحدة، تحمل التجزئات لإعادة تشغيلها — الأسبوع القادم، الربع القادم، بأي من اللغتين.

IVسجل المخاطر

خمس طرق تُخفق بها SQL المولَّدة

  1. 01

    P2SQLarXiv 2308.01990

    الحقن انتقل إلى قناة المخرجات

    تعقيم المدخلات يفحص ما يدخل إلى النموذج. هجمات P2SQL تصل فيما يخرج منه: SQL خبيثة سليمة البنية، مُجمَّعة من تعليمات مخفية في رسالة مستخدم أو صف مسترجع. لا مرشح مدخلات يراها أبداً — الهجوم هو المخرج نفسه.

  2. 02

    −15%لوحة البيانات التي كذبت

    الدمج الخاطئ يفشل بصمت

    دمج متضخم يُضاعف عدّ الصفوف، فتظهر الإيرادات منخفضة بنسبة 15%. لا استثناء، لا تحذير — SQL الخاطئة لا تتعطل، بل تُبلّغ. النتيجة دائماً رقم، والرقم المعقول لا يحمل أي إشارة على خطئه.

  3. 03

    1 → nسؤال واحد، n استعلامات

    نفس السؤال، SQL مختلفة

    اسأل مرتين وقد يُترجم النموذج السؤال بطريقتين مختلفتين — وأحياناً إلى إجابتين مختلفتين. لا استعلام قانوني للمراجعة أو التخزين المؤقت أو الإعادة. رقم الأمس لا يمكن إعادة إنتاجه، حتى للتحقق منه فحسب.

  4. 04

    91.2 → 21.3% صحيح · المعيار المرجعي → مخطط المؤسسة

    هاوية الدقة

    على مخططات المعايير المرجعية النظيفة، كتب نموذج متقدم SQL صحيحة في 91.2% من الحالات. على مخططات المؤسسات الحقيقية: 21.3%. في الموجة البحثية ذاتها، فشل ما يقارب 40% من تشغيلات وكلاء تحويل النص إلى SQL كلياً أو أعادت نتائج خاطئة. المعايير المرجعية أنيقة. مخططك ليس كذلك.

  5. 05

    قاعدة بيانات إنتاج واحدةحذفها وكيل — حادثة Replit

    مسار الكتابة كان موجوداً دائماً

    حذف وكيل البرمجة في Replit قاعدة بيانات إنتاجية رغم تعليمات صريحة بعدم المساسها. هذا هو الدرس: تعليمة القراءة فقط مجرد طلب. إن كان الاتصال يسمح بالكتابة، فمسار الكتابة قائم، وستجده في نهاية المطاف إكمالاً خاطئاً واحداً. القراءة فقط يجب أن تكون خاصية في الأداة، لا سطراً في الـ prompt.

لا تُصفِّ المخرجات.
لا تُولِّدها أصلاً.

لا سلسلة SQL، لا حقن · لا تخمين، لا انجراف

Vالشهادة

خمسة أبعاد جنباً إلى جنب

ليس مولِّد LLM-to-SQLREADME المحرك

شهادة الاختلاف

سطح التأليفSQL مُولَّدسلسلة SQL حرة الصياغةخطة مكتوبةنية مكتوبة وموثوقة الإصدار
سطح التنفيذSQL مُولَّدكل ما يتيحه الاتصالخطة مكتوبة4,574 قدرة للقراءة فقط
مسار الكتابةSQL مُولَّدموجود ما لم يُحجبخطة مكتوبةمعدوم بالبناء
الحوكمةSQL مُولَّدعلى مستوى الـ prompt، بذل عنايةخطة مكتوبةقوائم سماح على مستوى الكود لا يستطيع النموذج توسيعها
قابلية الإعادةSQL مُولَّدمعدومةخطة مكتوبةبصمة إعادة تشغيل على كل نتيجة

العمود الأيمن مثبَّت على العقدsha256:79f1c5a6…924be9a1

الصياغة الدقيقة صامدة: المنفذ الوحيد في المحرك — getUnsafeRuntime — غائب عن كل سطح يواجه النموذج، فلا يستطيع الوصول إليه. ويُصرِّح README بالمبدأ صراحةً: هذا ليس مولِّد LLM-to-SQL.

VIأسئلة

سُئلت في الإنتاج

كيف أحجب DELETE وDROP في SQL المُولَّد بالذكاء الاصطناعي؟

لا تُصفِّ SQL — أوقف توليده. قوائم الحجب تفحص السلاسل النصية، والنماذج لا تنضب في ابتكار سلاسل جديدة. SQAI يُزيل الفئة بأكملها: يُقدِّم النموذج خطة مكتوبة مقابل 4,574 قدرة للقراءة فقط، ولا توجد قدرة كتابة لأي خطة تُسمِّيها.

ما هو حقن P2SQL؟

حقن Prompt-to-SQL: كود SQL خبيث يظهر في مخرجات النموذج، مُجمَّع من تعليمات مخفية فيما قرأه النموذج — رسالة مستخدم، أو مستند، أو صف مُسترجَع. تعقيم المدخلات لا يراه، لأن الهجوم يعيش في قناة المخرجات. موثَّق في arXiv 2308.01990.

هل text-to-SQL خيار صحيح في بعض الأحيان؟

نعم — للنماذج الأولية والاستكشاف المُشرَف على بيانات غير إنتاجية، فهو سريع ومفيد فعلاً. لكنه الخيار الخاطئ حين يُبنى على الرقم قرار، أو يحتوي السياق نصاً غير موثوق، أو يجب أن تكون الإجابة قابلة للإعادة.

كيف أمنح وكيل ذكاء اصطناعي وصولاً للقراءة فقط إلى قاعدة بيانات؟

اجعل القراءة فقط بنيوية، لا مُهيَّأة. علامة القراءة فقط على اتصال هي إعداد يمكن لأحدهم تغييره. سطح تنفيذ SQAI لا يحتوي إلا قدرات القراءة — مسار الكتابة غائب بالبناء، وحتى المنفذ الاحتياطي للمحرك لا يمكن الوصول إليه من أي أداة تواجه النموذج.

كيف تختلف الخطة المكتوبة عن SQL المُولَّد؟

سلسلة SQL تقول أي شيء تتيحه القواعد النحوية. الخطة المكتوبة لا تقول إلا ما يُعرِّفه العقد. كل خطة تُتحقق منها مقابل عقد مثبَّت بالبصمة، وتُفحص وفق سياسة قائمة السماح الخاصة بك، وتُنفَّذ على محرك حتمي — مع بصمة إعادة تشغيل على كل نتيجة.

سلك المسار الآخر.

لا حساب. لا مفتاح. البيانات المحلية تبقى محلية.