AI एजेंट · पाठ

NL-to-SQL एजेंट कैसे काम करते हैं

स्कीमा इंजेक्शन, क्वेरी बनाना, निष्पादन और परिणाम का प्रारूपण।

पाठ 1, कुल 4 में से13 चरण

NL-to-SQL एजेंट कैसे काम करते हैं, CoddyKit पर AI एजेंट का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह AI एजेंट सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। AI एजेंट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

NL-से-एसक्यूएल एजेंट क्या है

एक प्राकृतिक भाषा से एसक्यूएल एजेंट साधारण अंग्रेज़ी के प्रश्नों को एसक्यूएल क्वेरी में बदलता है, उन्हें डेटाबेस पर निष्पादित करता है और मनुष्यों के लिए पढ़ने योग्य उत्तर लौटाता है।

SELECT COUNT(*) FROM orders WHERE status='pending' लिखने के बजाय, उपयोगकर्ता सरलता से पूछते हैं: "हमारे पास कितने लंबित ऑर्डर हैं?"

मुख्य आर्किटेक्चर

हर NL-से-एसक्यूएल एजेंट इसी कार्यप्रवाह का पालन करता है:

  1. स्कीमा सम्मिलित करना—प्रॉम्प्ट में डेटाबेस की संरचना सम्मिलित करना
  2. LLM एसक्यूएल बनाता है—मॉडल एक क्वेरी तैयार करता है
  3. निष्पादित करना—डेटाबेस पर क्वेरी चलाना
  4. परिणामों को स्वरूपित करना—पंक्तियों को पढ़ने योग्य पाठ में बदलना
  5. उत्तर लौटाना—उपयोगकर्ता को जवाब देना
# High-level pipeline
def nl_to_sql_agent(user_question, db_connection):
    schema = get_schema(db_connection)
    sql = llm_generate_sql(user_question, schema)
    rows = execute_query(db_connection, sql)
    answer = format_results(rows, user_question)
    return answer

स्कीमा सम्मिलन की व्याख्या

LLM को आपके डेटाबेस की संरचना के बारे में कोई जानकारी नहीं होती। आपको हर प्रॉम्प्ट में स्कीमा सम्मिलित करना होगा, ताकि मॉडल जान सके कि कौन-सी तालिकाएँ और कॉलम मौजूद हैं।

एक संक्षिप्त स्कीमा विवरण मॉडल को बताता है: "ऑर्डर तालिका में ये कॉलम हैं: आईडी, user_id, स्थिति, कुल, created_at।"

def build_schema_prompt(schema_info):
    lines = []
    for table in schema_info:
        cols = ', '.join(
            f"{c['name']} ({c['type']})"
            for c in table['columns']
        )
        lines.append(f"Table {table['name']}: {cols}")
    return '\n'.join(lines)

# Output:
# Table users: id (INT), email (VARCHAR), created_at (TIMESTAMP)
# Table orders: id (INT), user_id (INT), status (VARCHAR), total (FLOAT)

if __name__ == '__main__':
    demo_schema = [
        {'name': 'users', 'columns': [{'name': 'id', 'type': 'INT'}, {'name': 'email', 'type': 'VARCHAR'}]},
        {'name': 'orders', 'columns': [{'name': 'id', 'type': 'INT'}, {'name': 'user_id', 'type': 'INT'}]},
    ]
    print(build_schema_prompt(demo_schema))

LLM के लिए एसक्यूएल निर्माण प्रॉम्प्ट

प्रॉम्प्ट में LLM को तीन चीज़ें देनी चाहिए: स्कीमा, प्रश्न और केवल मान्य एसक्यूएल लौटाने के स्पष्ट निर्देश।

केवल SELECT तक सीमित रहने और लक्ष्य एसक्यूएल बोली (PostgreSQL, MySQL, SQLite) को स्पष्ट करना सुरक्षा और शुद्धता के लिए अत्यंत महत्वपूर्ण है।

SYSTEM_PROMPT = '''You are a SQL expert. Given a database schema and a question,
generate a valid {dialect} SELECT query. Return ONLY the SQL query, no explanation.
Do not use INSERT, UPDATE, DELETE, or DROP.

Schema:
{schema}
'''

def llm_generate_sql(question, schema, dialect='PostgreSQL'):
    prompt = SYSTEM_PROMPT.format(schema=schema, dialect=dialect)
    response = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': prompt},
            {'role': 'user', 'content': question}
        ]
    )
    return response.choices[0].message.content.strip()

तैयार किए गए एसक्यूएल को निष्पादित करना

LLM द्वारा एसक्यूएल लौटाने के बाद, उसे वास्तविक डेटाबेस पर निष्पादित करें। जहाँ संभव हो, पैरामीटरयुक्त क्वेरी का उपयोग करें और अपवादों को हमेशा पकड़ें—LLM अमान्य एसक्यूएल तैयार कर सकता है।

निष्पादन को try/except में लपेटने से आप त्रुटि संकेत LLM को वापस भेजकर फिर से प्रयास कर सकते हैं।

import psycopg2

def execute_query(conn, sql):
    try:
        with conn.cursor() as cur:
            cur.execute(sql)
            columns = [desc[0] for desc in cur.description]
            rows = cur.fetchmany(100)  # limit rows
            return {'columns': columns, 'rows': rows}
    except psycopg2.Error as e:
        return {'error': str(e), 'sql': sql}

उपयोगकर्ता के लिए परिणामों को स्वरूपित करना

कच्ची डेटाबेस पंक्तियाँ उपयोगकर्ता के लिए सुविधाजनक नहीं होतीं। एजेंट को उन्हें प्राकृतिक भाषा के उत्तर में बदलना चाहिए।

छोटे परिणाम-समुच्चयों के लिए, व्याख्या हेतु पंक्तियाँ LLM को वापस भेजें। बड़े समुच्चयों के लिए, पहले सारांश आँकड़े निकालें।

def format_results(result, original_question):
    if 'error' in result:
        return f'Query failed: {result["error"]}'

    rows = result['rows']
    columns = result['columns']

    if not rows:
        return 'No results found.'

    # For simple counts/aggregates — just return the value
    if len(columns) == 1 and len(rows) == 1:
        return f'Result: {rows[0][0]}'

    # For multi-row results — summarize
    summary = f'Found {len(rows)} rows.\n'
    for row in rows[:5]:  # show first 5
        summary += ', '.join(f'{columns[i]}: {row[i]}' for i in range(len(columns))) + '\n'
    return summary

if __name__ == '__main__':
    demo_result = {'rows': [[42]], 'columns': ['count']}
    print(format_results(demo_result, 'How many users signed up?'))
    demo_result2 = {'rows': [], 'columns': ['id']}
    print(format_results(demo_result2, 'Any orders today?'))

NL-से-एसक्यूएल कठिन क्यों है: अस्पष्टता

अस्पष्टता सबसे बड़ी चुनौती है। इस प्रश्न पर विचार करें: "मुझे शीर्ष ग्राहक दिखाएँ।"

  • राजस्व के आधार पर शीर्ष? ऑर्डर की संख्या के आधार पर? हाल की गतिविधि के आधार पर?
  • पिछला महीना? पूरा समय?
  • शीर्ष 10? शीर्ष 100?

मनुष्य संदर्भ समझते हैं, जबकि LLM अनुमान लगाते हैं। एजेंटों को अस्पष्ट प्रश्नों को सँभालने या स्पष्ट करने की रणनीतियों की आवश्यकता होती है।

AMBIGUITY_PROMPT = '''If the question is ambiguous, respond with JSON:
{"needs_clarification": true, "question": "your clarifying question"}

If clear, respond with the SQL query directly.

User question: {question}
'''

def generate_or_clarify(question, schema):
    response = llm_call(AMBIGUITY_PROMPT.format(
        question=question, schema=schema
    ))
    if '"needs_clarification"' in response:
        import json
        return json.loads(response)
    return {'sql': response}

NL-से-एसक्यूएल कठिन क्यों है: स्कीमा का आकार

एंटरप्राइज़ डेटाबेस में सैकड़ों तालिकाएँ और हज़ारों कॉलम हो सकते हैं। पूरा स्कीमा सम्मिलित करने से LLM की संदर्भ विंडो की सीमा पार हो जाएगी।

समाधानों में शामिल हैं: स्कीमा खोज (तालिका विवरणों को एम्बेड करके प्रासंगिक विवरण प्राप्त करना), तालिका फ़िल्टर करना (पहले LLM से पूछना कि किन तालिकाओं की आवश्यकता है) और स्कीमा संपीड़न (अनुक्रमणिका और ऑडिट कॉलम हटाना)।

# Two-phase approach for large schemas
def get_relevant_tables(question, all_tables):
    prompt = f'''Given these tables: {all_tables}
Which 3-5 tables are most relevant to answer: "{question}"?
Return a JSON list of table names only.'''
    response = llm_call(prompt)
    import json
    return json.loads(response)

def nl_to_sql_large_db(question, conn):
    all_tables = list_all_tables(conn)  # just names
    relevant = get_relevant_tables(question, all_tables)
    schema = get_schema_for_tables(conn, relevant)
    return llm_generate_sql(question, schema)

NL-से-एसक्यूएल कठिन क्यों है: एसक्यूएल बोली के अंतर

एसक्यूएल सार्वभौमिक नहीं है। PostgreSQL/MySQL में LIMIT, SQL Server में TOP बन जाता है। तारीख के फ़ंक्शन अलग-अलग डेटाबेस में अलग होते हैं। LLM को यह पता होना चाहिए कि कौन-सी बोली का उपयोग करना है।

अपने सिस्टम प्रॉम्प्ट में लक्ष्य बोली हमेशा शामिल करें और कुछ-उदाहरण प्रॉम्प्टिंग में बोली-विशिष्ट उदाहरण जोड़ने पर विचार करें।

DIALECT_EXAMPLES = {
    'postgresql': 'Use LIMIT for row limits. Use NOW() for current time.',
    'mysql': 'Use LIMIT for row limits. Use NOW() for current time.',
    'sqlite': 'Use LIMIT. Use datetime("now") for current time.',
    'mssql': 'Use TOP N for row limits. Use GETDATE() for current time.',
    'bigquery': 'Use LIMIT. Use CURRENT_TIMESTAMP() for current time. Use backtick for table names.'
}

def get_dialect_hint(dialect):
    return DIALECT_EXAMPLES.get(dialect.lower(), '')

if __name__ == '__main__':
    for dialect in ['postgresql', 'sqlite', 'mssql']:
        print(f'{dialect}: {get_dialect_hint(dialect)}')

त्रुटि सुधार चक्र

तैयार किया गया एसक्यूएल अक्सर पहली कोशिश में विफल हो जाता है। एक सुदृढ़ एजेंट त्रुटि सुधार चक्र लागू करता है: विफल एसक्यूएल और त्रुटि संदेश LLM को वापस भेजकर उससे क्वेरी ठीक करने को कहता है।

ऐसी क्वेरी पर अनंत चक्र से बचने के लिए, जिसे ठीक नहीं किया जा सकता, पुनः प्रयासों को 2-3 तक सीमित रखें।

def nl_to_sql_with_retry(question, schema, conn, max_retries=3):
    sql = llm_generate_sql(question, schema)
    for attempt in range(max_retries):
        result = execute_query(conn, sql)
        if 'error' not in result:
            return format_results(result, question)
        # Ask LLM to fix the error
        fix_prompt = f'The SQL query failed with error: {result["error"]}\n'\
                     f'Original SQL: {sql}\n'\
                     f'Please fix the SQL query.'
        sql = llm_call(fix_prompt)
        print(f'Retry {attempt + 1} with fixed SQL')
    return 'Could not generate a valid query after retries.'

सब कुछ एक साथ जोड़ना

एक उत्पादन NL-से-एसक्यूएल एजेंट सभी हिस्सों को जोड़ता है: स्कीमा प्राप्त करना, प्रॉम्प्ट बनाना, एसक्यूएल तैयार करना, सत्यापन, निष्पादन, त्रुटि सुधार और परिणामों का स्वरूपीकरण।

क्वेरी कैशिंग जोड़ने से (एक ही प्रश्न → एक ही एसक्यूएल) दोहराई गई क्वेरी के लिए विलंबता और LLM लागत काफ़ी कम हो जाती है।

import hashlib

query_cache = {}

def cached_nl_to_sql(question, schema_hash, conn):
    cache_key = hashlib.md5((question + schema_hash).encode()).hexdigest()
    if cache_key in query_cache:
        print('Cache hit!')
        sql = query_cache[cache_key]
    else:
        schema = get_schema(conn)
        sql = llm_generate_sql(question, schema)
        query_cache[cache_key] = sql

    result = execute_query(conn, sql)
    return format_results(result, question)

ज्ञान जाँच

NL-से-एसक्यूएल एजेंट के कार्यप्रवाह में चरणों का सही क्रम क्या है?

पुनरावलोकन: NL-से-एसक्यूएल आर्किटेक्चर

NL-से-एसक्यूएल एजेंट एक संरचित कार्यप्रवाह के ज़रिए प्राकृतिक भाषा के प्रश्नों को निष्पादन योग्य एसक्यूएल क्वेरी में बदलते हैं: स्कीमा सम्मिलित करें → एसक्यूएल बनाएँ → निष्पादित करें → स्वरूपित करें → लौटाएँ।

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

शुरुआत निःशुल्क

एआई शिक्षक के साथ AI एजेंट सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
60
पाठ
239

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

क्या “NL-to-SQL एजेंट कैसे काम करते हैं” पाठ निःशुल्क है?

हाँ—“NL-to-SQL एजेंट कैसे काम करते हैं” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और AI एजेंट पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। AI एजेंट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“NL-to-SQL एजेंट कैसे काम करते हैं” में मैं क्या सीखूँगा?

स्कीमा इंजेक्शन, क्वेरी बनाना, निष्पादन और परिणाम का प्रारूपण। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI एजेंट का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या AI एजेंट शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर AI एजेंट शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“NL-to-SQL एजेंट कैसे काम करते हैं” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस AI एजेंट पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर AI एजेंट पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. NL-to-SQL एजेंट कैसे काम करते हैं
  2. स्कीमा समझना और इंजेक्ट करना
  3. SQL क्वेरी बनाना और सत्यापित करना
  4. अस्पष्ट डेटाबेस प्रश्नों को संभालना
← AI एजेंट पर वापस जाएँ