ऑराबेस का NL2SQL इंजनमूल AI का हिस्सा है जो बैकएंड में एकीकृत है: एक साथ रखने के लिए कोई तृतीय-पक्ष सेवा नहीं है। इस गाइड का पालन करने के लिए आवश्यक शर्तें: एक मौजूदा ऑराबेस प्रोजेक्ट, उदाहरण के लिए एक सरल डेटाबेस स्कीमा, और एक प्रोजेक्ट एपीआई कुंजी।
आप क्या बनाएंगे
एक समापन बिंदु जो एक प्राकृतिक भाषा प्रश्न प्राप्त करता है, उसे एक मान्य और सीमित SQL क्वेरी में बदल देता है, फिर परिणाम देता है। इंजन कभी भी जेनरेट किए गए SQL को बिना नियंत्रण के निष्पादित नहीं करता है: प्रत्येक क्वेरी डेटाबेस तक पहुंचने से पहले सिंटैक्टिक सत्यापन से गुजरती है।
यह ट्यूटोरियल @aurabase/aurabase-js जावास्क्रिप्ट एसडीके और समकक्ष कच्चे HTTP कॉल का उपयोग करता है, ताकि आप किसी भी भाषा का अनुसरण कर सकें।
NL2SQL इंजन कैसे काम करता है
प्रश्न एक कॉन्फ़िगर किए गए एलएलएम - ओपनएआई, एंथ्रोपिक (क्लाउड) या जेमिनी, तीन मूल प्रदाताओं के माध्यम से जाता है - जो एक उम्मीदवार एसक्यूएल उत्पन्न करता है। इस एसक्यूएल को कभी भी इस तरह निष्पादित नहीं किया जाता है: यह एक सत्यापनकर्ता से गुजरता है जो इसके सिंटैक्स ट्री (sqlparser) को पार्स करता है, केवल सरल SELECT प्रश्नों की अनुमति देता है, और यदि कोई गायब है तो एक बाध्य LIMIT जोड़ता है।
सत्यापनकर्ता स्पष्ट रूप से CTE/WITH, सबक्वेरीज़, UNIONs, लॉकिंग क्लॉज़ (FOR UPDATE), और श्वेतसूची के बाहर किसी भी फ़ंक्शन (count, sum, avg, min, max, lower, upper, coalesce) को अस्वीकार करता है। date_trunc, now). मल्टी-टेबल जॉइन समर्थित हैं।
प्रश्न→एलएलएम (ओपनएआई/क्लाउड/मिथुन)→एएसटी सत्यापन (एसक्यूएलपार्सर)→सीमाबद्ध सीमा→चयन निष्पादन
प्रश्नांकित आरेख आपके अनुरोध द्वारा कभी भी प्रदान नहीं किया जाता है: यह परियोजना के वास्तविक आधार से आत्मनिरीक्षण किया जाता है। अनुरोध निकाय में भेजे गए schema, allowed_schema या schema_context फ़ील्ड को चुपचाप अनदेखा करने के बजाय स्पष्ट रूप से अस्वीकार कर दिया जाता है (400 त्रुटि) - सर्वर ही तय करता है कि वास्तव में क्या मौजूद है।
NL2SQL एंडपॉइंट कॉन्फ़िगर करें
जावास्क्रिप्ट एसडीके के साथ, ऑराबेस क्लाइंट aura.ai.nl2sql()को उजागर करता है। हस्ताक्षर nl2sql(question, options)है: स्कीमा इसका हिस्सा नहीं है, यह सर्वर साइड पर आत्मनिरीक्षण किया गया है।
कच्चे HTTP में, समापन बिंदु POST /v1/ai/{project_id}/nl2sqlहै, जो प्रोजेक्ट एपीआई कुंजी द्वारा प्रमाणित है।
अनुरोध के मुख्य भाग में न तो schema, न ही allowed_schema, न ही schema_context भेजें: क्वेरी की गई स्कीमा सर्वर द्वारा निर्धारित की जाती है, इन फ़ील्ड्स को चुपचाप अधिलेखित करने के बजाय स्पष्ट रूप से अस्वीकार कर दिया जाता है (400)।
फ़्रेंच में वास्तविक प्रश्न के साथ परीक्षण करें
प्रश्न भेजा गया: "प्रीमियम ग्राहकों द्वारा इस महीने कितने ऑर्डर दिए गए?"। यहां वास्तव में प्रस्तुत SQL का स्वरूप है (तालिका नाम और कॉलम आपके स्कीमा पर निर्भर करते हैं):
limit_injected इंगित करता है कि क्या LIMIT टेम्पलेट से आता है या सर्वर द्वारा जोड़ा गया था। confidence प्रतिक्रिया के रूप पर एक अनुमान है (अच्छी तरह से गठित एसक्यूएल ब्लॉक या नहीं) - उत्पन्न एसक्यूएल की अर्थ संबंधी शुद्धता का माप नहीं। खराब शब्दों वाला प्रश्न भ्रामक एसक्यूएल के बजाय एक स्पष्ट त्रुटि देता है: उदाहरण के लिए, यदि जेनरेट किया गया एसक्यूएल आपके स्कीमा में नहीं किसी तालिका पर सवाल उठाता है, तो संदेश वास्तव में उपलब्ध तालिकाओं का नाम देता है।
सुरक्षित उत्पादन
तैनाती से पहले तीन जांचें: क्या पंक्ति छत (LIMIT) आपके वॉल्यूम के अनुकूल है, क्या इंजन द्वारा उपयोग की जाने वाली पोस्टग्रेज भूमिका प्रोजेक्ट स्कीमा तक सीमित रहती है, और क्या संवेदनशील तालिकाओं में एक सक्रिय आरएलएस नीति है - एनएल2एसक्यूएल आपके बाकी एप्लिकेशन के समान डेटाबेस पर सवाल उठाता है, इसमें डिफ़ॉल्ट रूप से विस्तारित एक्सेस अधिकार नहीं हैं।
- डिफ़ॉल्ट लाइन कैप सर्वर साइड पर कॉन्फ़िगर करने योग्य है; सर्वर कैप के ऊपर अनुरोधित मान को चुपचाप कम करने के बजाय स्पष्ट रूप से अस्वीकार कर दिया गया है।
- आपकी आरएलएस नीतियों की परवाह किए बिना, सिस्टम कैटलॉग (
pg_catalog,information_schema) और गैर-प्रोजेक्ट स्कीमा तक पहुंच सत्यापनकर्ता द्वारा अवरुद्ध है। - संवेदनशील तालिकाओं पर आरएलएस आपकी रक्षा की अंतिम पंक्ति बनी हुई है: सत्यापनकर्ता एसक्यूएल के रूप को सीमित करता है, न कि डेटा पर व्यावसायिक अधिकारों को।
वर्तमान सीमाओं के बारे में जागरूक होना चाहिए
इंजन सख्ती से पढ़ने योग्य है: केवल SELECT अनुरोध स्वीकार किए जाते हैं। टेम्पलेट द्वारा उत्पन्नINSERT, UPDATE, DELETE, DROP, CREATE या ALTER पर कोई भी प्रयास निष्पादन से पहले अस्वीकार कर दिया जाता है - यह एक त्वरित सम्मेलन नहीं है, यह सिंटैक्स ट्री स्तर पर लगाया गया एक नियम है।
अन्य संरचनात्मक सीमाएँ: कोई सबक्वेरी नहीं, कोई CTE/WITH नहीं, कोई UNION नहीं, और दस SQL फ़ंक्शंस की एक बंद श्वेतसूची। एक प्रश्न जो स्वाभाविक रूप से एक सबक्वेरी ("ग्राहक जिन्होंने कभी ऑर्डर नहीं किया है") को एक सरल SELECTमें फिट करने के लिए पुन: तैयार किया जाना चाहिए, या एप्लिकेशन पक्ष पर अलग तरीके से संभाला जाना चाहिए।
आरएजी और एजेंट
NL2SQL covers structured questions about your relational data. For questions about unstructured content (documents, notes, tickets), Aurabase's native RAG relies on pgvector and an HNSW search. Both capabilities — and how to combine them in an agent — are detailed on the Native AI on Postgres page.