مساعد SQL لقاعدة بياناتك
زوّد النموذج بمخطط، ودعه يكتب SQL، ثم نفّذه على قاعدة بيانات معزولة واشرح النتائج.
مساعد SQL لقاعدة بياناتك درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
هدف المشروع
ابنوا وكيلًا يحوّل الأسئلة باللغة الطبيعية إلى SQL، وينفذها على قاعدة بيانات معزولة، ويشرح النتائج.
إنه وكيل «التحدث إلى قاعدة بياناتي» الأساسي.
البنية
- المستخدم: "كم عدد المستخدمين النشطين هذا الشهر؟"
- يستدعي الوكيل list_tables وdescribe_table لمعرفة المخطط
- يستدعي الوكيل run_sql باستخدام الاستعلام المُنشأ
- يشرح الوكيل النتيجة باللغة الطبيعية
Step 1: Schema Tools
import psycopg
conn = psycopg.connect(DATABASE_URL)
def list_tables():
with conn.cursor() as cur:
cur.execute("SELECT table_name FROM information_schema.tables WHERE table_schema='public'")
return [r[0] for r in cur.fetchall()]
def describe_table(name):
with conn.cursor() as cur:
cur.execute('''
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = %s
''', (name,))
return cur.fetchall()الخطوة 2: أداة run_sql الآمنة
يجب تقييد ما يمكن للوكيل فعله — للقراءة فقط، مع مهلة للاستعلام وحد للصفوف:
import re
def run_sql(query: str, limit: int = 100):
q = query.strip().rstrip(';').lower()
if not q.startswith('select'):
return {'error': 'Only SELECT statements are allowed.'}
if any(bad in q for bad in [' drop ', ' delete ', ' update ', ' insert ', ' alter ', ' truncate ']):
return {'error': 'Statement contains a disallowed keyword.'}
with conn.cursor() as cur:
cur.execute(f'SET statement_timeout = 5000') # 5 seconds
cur.execute(f'SELECT * FROM ({query}) sub LIMIT {limit}')
cols = [c.name for c in cur.description]
rows = cur.fetchall()
return {'columns': cols, 'rows': rows}Tool Definitions
tools = [
{'type': 'function', 'function': {'name': 'list_tables', 'description': 'List tables in the database', 'parameters': {'type': 'object', 'properties': {}}}},
{'type': 'function', 'function': {'name': 'describe_table', 'description': 'Get columns of a table', 'parameters': {'type': 'object', 'properties': {'name': {'type': 'string'}}, 'required': ['name']}}},
{'type': 'function', 'function': {'name': 'run_sql', 'description': 'Execute a SELECT query (read-only, max 100 rows, 5s timeout)', 'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}}}
]
import json
print(json.dumps(tools, indent=2))
System Prompt
system = '''
You are a SQL analyst assistant for a Postgres database.
First use list_tables and describe_table to learn the schema.
Then write a single SELECT query to answer the user.
Never modify data.
After receiving results, explain them in plain language.
'''
print(system.strip())
تمرير المخطط في system prompt
لتحسين زمن الاستجابة، اجلبوا المخطط مرة واحدة عند بدء التشغيل وضعوه في system prompt — فهذا يوفر جولات ذهاب وإياب لاستدعاء الأدوات:
schema = ''
for t in list_tables():
cols = describe_table(t)
schema += f'{t}: {cols}\n'
system = system + f'\nSchema:\n{schema}'مستخدم قاعدة بيانات للقراءة فقط
حتى مع فحوصات الكود، أنشئوا أيضًا مستخدم DB للقراءة فقط، مع صلاحيات على المخطط التحليلي وحده. اتخذوا طبقات متعددة من الحماية.
إخفاء PII
يجب ألّا تتسرب بعض الأعمدة (البريد الإلكتروني والهاتف). أخفوا هذه الأعمدة في النتائج قبل إرجاعها:
PII_COLS = {'email', 'phone'}
for row in rows:
for i, col in enumerate(cols):
if col in PII_COLS:
row[i] = '[REDACTED]'تقدير تكلفة الاستعلام
استخدموا EXPLAIN لتقدير تكلفة الاستعلام؛ وارفضوا الاستعلامات التي تتجاوز تكلفتها حدًا معينًا (لمنع عمليات المسح العرضية للجدول بأكمله في الجداول الضخمة).
محادثة نموذجية
المستخدم: "أفضل 5 عملاء حسب الإنفاق في الشهر الماضي"
الوكيل:
- list_tables -> [users, orders, ...]
- describe_table(orders) -> [id, user_id, total, created_at]
- run_sql("SELECT user_id, SUM(total) ...")
- يعيد: "Alice ($1240), Bob ($910), ..."
مخططات المخرجات
للحصول على تجربة مستخدم أغنى، أضيفوا أداة render_chart تتلقى الأعمدة والصفوف وتعيد عنوان URL لصورة المخطط. ويمكن للوكيل استدعاؤها بعد الاستعلام.
التعامل اللطيف مع الفشل
أخطاء SQL شائعة. أعيدوا رسالة خطأ Postgres حرفيًا — فالنموذج ممتاز في إصلاح SQL المعطّل بنفسه عند عرض الخطأ له.
تدقيق كل استعلام
سجّلوا المستخدم، والسؤال باللغة الطبيعية، وSQL المُنشأ، وعدد النتائج. التدقيق أمر لا غنى عنه لوكلاء الوصول إلى DB.
لماذا نقيّد التنفيذ بـ SELECT؟
لماذا نقيّد الوكيل برمجيًا بحيث لا ينفذ إلا عبارات SELECT؟
مراجعة
وكلاء SQL مفيدون فورًا. ابنُوهم بعناية — مستخدم للقراءة فقط، ومهلة للعبارة، وحد للصفوف، وقائمة مسموحة لأنواع الاستعلامات، وسجل تدقيق.
الأسئلة الشائعة
هل درس «مساعد SQL لقاعدة بياناتك» مجاني؟
نعم — نص درس «مساعد SQL لقاعدة بياناتك» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «مساعد SQL لقاعدة بياناتك»؟
زوّد النموذج بمخطط، ودعه يكتب SQL، ثم نفّذه على قاعدة بيانات معزولة واشرح النتائج. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «مساعد SQL لقاعدة بياناتك»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- روبوت أسئلة وأجوبة فوق مستنداتك
- وكيل لشرح الشيفرة
- وكيل بحث وتصفح الويب
- مساعد SQL لقاعدة بياناتك