PRODसंप्रभु यूरोपीय BaaS मंचडैशबोर्ड खोलें →

मूल एआई · 8 मिनट पढ़ा

ट्यूटोरियल: पोस्टग्रेज पर एक NL2SQL एंडपॉइंट बनाएं

Affane Daylami · Fondateur · 28 अगस्त 2026

ब्लॉग पर वापस जाएँ

यह ट्यूटोरियल दिखाता है कि फ़्रेंच में एक प्रश्न कैसे प्राप्त करें, इसे एक मान्य और बाउंडेड SQL क्वेरी में कैसे बदलें, फिर परिणाम लौटाएँ - कभी भी अनियंत्रित SQL निष्पादित किए बिना। वास्तव में उत्पन्न SQL प्रत्येक चरण पर प्रदर्शित होता है, न कि केवल अंतिम परिणाम पर।

यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.

ऑराबेस का 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 त्रुटि) - सर्वर ही तय करता है कि वास्तव में क्या मौजूद है।

#
स्टेप 1

NL2SQL एंडपॉइंट कॉन्फ़िगर करें

जावास्क्रिप्ट एसडीके के साथ, ऑराबेस क्लाइंट aura.ai.nl2sql()को उजागर करता है। हस्ताक्षर nl2sql(question, options)है: स्कीमा इसका हिस्सा नहीं है, यह सर्वर साइड पर आत्मनिरीक्षण किया गया है।

app/api/ask/route.tstypescript
import { aura } from '@/lib/aurabase'

export async function POST(req: Request) {
  const { question } = await req.json()

  const { data, error } = await aura.ai.nl2sql(
    question,
    { limit: 50 }
  )

  if (error) return Response.json({ error }, { status: 400 })
  return Response.json(data)
}

कच्चे HTTP में, समापन बिंदु POST /v1/ai/{project_id}/nl2sqlहै, जो प्रोजेक्ट एपीआई कुंजी द्वारा प्रमाणित है।

terminalbash
curl -X POST https://<votre-gateway>/v1/ai/<project_id>/nl2sql \
  -H "apikey: <votre-cle-api>" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Combien de commandes ont été passées ce mois-ci par des clients premium ?",
    "limit": 50
  }'
सर्वर द्वारा फ़ील्ड अस्वीकृत कर दी गईं

अनुरोध के मुख्य भाग में न तो schema, न ही allowed_schema, न ही schema_context भेजें: क्वेरी की गई स्कीमा सर्वर द्वारा निर्धारित की जाती है, इन फ़ील्ड्स को चुपचाप अधिलेखित करने के बजाय स्पष्ट रूप से अस्वीकार कर दिया जाता है (400)।

#
चरण दो

फ़्रेंच में वास्तविक प्रश्न के साथ परीक्षण करें

प्रश्न भेजा गया: "प्रीमियम ग्राहकों द्वारा इस महीने कितने ऑर्डर दिए गए?"। यहां वास्तव में प्रस्तुत SQL का स्वरूप है (तालिका नाम और कॉलम आपके स्कीमा पर निर्भर करते हैं):

प्रतिक्रिया (अंश)json
{
  "data": {
    "sql": "SELECT count(*) FROM orders WHERE customer_plan = 'premium' AND created_at >= date_trunc('month', now()) LIMIT 50",
    "explanation": "Compte les commandes de ce mois pour les clients premium.",
    "confidence": 0.85,
    "tables": ["orders"],
    "columns": ["customer_plan", "created_at"],
    "limit": 50,
    "limit_injected": false
  },
  "meta": null
}

limit_injected इंगित करता है कि क्या LIMIT टेम्पलेट से आता है या सर्वर द्वारा जोड़ा गया था। confidence प्रतिक्रिया के रूप पर एक अनुमान है (अच्छी तरह से गठित एसक्यूएल ब्लॉक या नहीं) - उत्पन्न एसक्यूएल की अर्थ संबंधी शुद्धता का माप नहीं। खराब शब्दों वाला प्रश्न भ्रामक एसक्यूएल के बजाय एक स्पष्ट त्रुटि देता है: उदाहरण के लिए, यदि जेनरेट किया गया एसक्यूएल आपके स्कीमा में नहीं किसी तालिका पर सवाल उठाता है, तो संदेश वास्तव में उपलब्ध तालिकाओं का नाम देता है।

#
चरण 3

सुरक्षित उत्पादन

तैनाती से पहले तीन जांचें: क्या पंक्ति छत (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.

#
अक्सर पूछे जाने वाले प्रश्नों

पूछे जाने वाले प्रश्न

क्या NL2SQL एक जटिल स्कीमा (एकाधिक जोड़) के साथ काम करता है?+
मल्टी-टेबल जॉइन सत्यापनकर्ता द्वारा समर्थित हैं। दूसरी ओर, सबक्वेरीज़ और CTE/WITH को स्पष्ट रूप से अस्वीकार कर दिया जाता है: एक प्रश्न जो स्वाभाविक रूप से एक सबक्वेरी के लिए कॉल करता है उसे एक साधारण SELECT में जॉइन के साथ फिट करने के लिए पुन: तैयार किया जाना चाहिए, या अन्यथा एप्लिकेशन पक्ष पर संभाला जाना चाहिए।
NL2SQL के लिए कौन सा LLM प्रदाता चुनें?+
सत्यापनकर्ता द्वारा तीन मूल प्रदाताओं (ओपनएआई, एंथ्रोपिक/क्लाउड, जेमिनी) के साथ समान व्यवहार किया जाता है: जेनरेट किए गए एसक्यूएल के सत्यापन पर किसी को भी संरचनात्मक लाभ नहीं होता है। लागत और विलंबता आपके प्रोजेक्ट के लिए कॉन्फ़िगर किए गए विशिष्ट मॉडल पर निर्भर करती है - किसी सामान्य अनुशंसा का पालन करने के बजाय अपने स्वयं के वॉल्यूम पर उनकी तुलना करें।

तैनाती के लिए तैयार हैं?

पाँच मिनट में आपका बैकएंड।

किसी क्रेडिट कार्ड की आवश्यकता नहीं · 500 एमबी निःशुल्क · 50,000 एमएयू