بناء استعلامات SQL باستخدام الذكاء الاصطناعي | أصلي، ترجم بواسطة AI

Home 2025.07

مخطط قاعدة البيانات (PostgreSQL):

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    date_of_birth DATE,
    gender VARCHAR(10),
    phone_number VARCHAR(20),
    address TEXT,
    city VARCHAR(100),
    state VARCHAR(100),
    country VARCHAR(100),
    zip_code VARCHAR(20),
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE,
    last_login TIMESTAMP WITH TIME ZONE,
    is_active BOOLEAN DEFAULT TRUE,
    role VARCHAR(50),
    profile_picture_url VARCHAR(255),
    bio TEXT,
    failed_login_attempts INTEGER DEFAULT 0,
    account_balance NUMERIC(10, 2) DEFAULT 0.00
);

الجدول أعلاه هو قاعدة بيانات PostgreSQL، والجدول أدناه هو تعريف الجدول. إليك تعليمات استعلام اللغة الطبيعية.

أريد الحصول على بعض المستخدمين الذين اسمهم الأول هو “أندي”، تم إنشاؤهم في اليوم الماضي من الشهر الماضي، والذين يبلغون من العمر 20 عامًا في عام 2025، والذين تم تسجيل دخولهم الأخير في الأسبوع الماضي، أعطني الاستعلام SQL للحصول على مثل هذه المستخدمين.


استعلام SQL المولد:

SELECT *
FROM users
WHERE first_name ILIKE 'andy'
  AND CAST(created_at AS DATE) BETWEEN
      (CURRENT_DATE - INTERVAL '1 MONTH' - INTERVAL '1 DAY')
      AND
      (CURRENT_DATE - INTERVAL '1 MONTH' + INTERVAL '1 DAY')
  AND EXTRACT(YEAR FROM AGE(date_of_birth)) = 20
  AND last_login >= CURRENT_TIMESTAMP - INTERVAL '7 DAYS';

أدناه هو تعريف جدول PostgreSQL لجدول conversations يمكن استخدامه لتتبع تفاعلات المستخدمين مع نظام ذكاء اصطناعي مثل Grok. تم تصميم الجدول لتتبع المحادثات، بما في ذلك المستخدمين المعنيين، محتوى المحادثة، التوقيتات، والمعلومات ذات الصلة.

CREATE TABLE conversations (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL,
    title VARCHAR(255),
    conversation_type VARCHAR(50) DEFAULT 'chat',
    started_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    ended_at TIMESTAMP WITH TIME ZONE,
    status VARCHAR(50) DEFAULT 'active',
    message_count INTEGER DEFAULT 0,
    last_message_at TIMESTAMP WITH TIME ZONE,
    is_archived BOOLEAN DEFAULT FALSE,
    ai_model_version VARCHAR(100),
    total_tokens_used INTEGER DEFAULT 0,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

الشرح:

تم تصميم هذا الجدول ليكون مرنًا ويمكن توسيعه حسب الحاجة، مثل تخزين الرسائل الفردية في جدول منفصل messages أو إضافة حقول لتحليل المشاعر أو Tags للمحادثة. أخبرني إذا كنت بحاجة إلى جدول مرتبط (مثلًا، للرسائل) أو استعلام للتفاعل مع هذا الجدول!


لتمكين واجهة المستخدم التي يمكن للمستخدمين من خلالها استعلام محادثاتهم باستخدام اللغة الطبيعية (مثلًا، “أعطني آخر 5 محادثات” أو “المحادثات التي تحتوي عنوانها على كلمة عن جافا”)، يجب التأكد من أن استعلام SQL يقيد النتائج للمحادثات الخاصة بالمستخدم المصرح له. وهذا يتضمن دمج هوية المستخدم (مثلًا، user_id) في الاستعلام وتحويل اللغة الطبيعية إلى شروط SQL. أدناه تعليمات واستعلامات SQL المقابلة للجدول conversations، مع التأكد من أن المستخدمين يمكنهم الوصول فقط إلى بياناتهم الخاصة.

الاعتبارات الرئيسية

تعليمات اللغة الطبيعية واستعلامات SQL

تعليمات 1: “أعطني آخر 5 محادثات”

المتطلبات المحللة:

استعلام SQL:

SELECT *
FROM conversations
WHERE user_id = :authenticated_user_id
ORDER BY started_at DESC
LIMIT 5;

تعليمات 2: “المحادثات التي تحتوي عنوانها على كلمة عن جافا”

المتطلبات المحللة:

استعلام SQL:

SELECT *
FROM conversations
WHERE user_id = :authenticated_user_id
  AND title ILIKE '%java%';

ملاحظات التنفيذ للواجهة الأمامية

  1. المصادقة:
    • يجب أن يرسل الواجهة الأمامية معرف المستخدم المسجل (مثلًا، من رمز JWT أو جلسة) إلى واجهة برمجة التطبيقات الخلفية.
    • يجب أن يتحقق الخلفية من user_id ويستخدمها في شرط WHERE لتصفية النتائج.
  2. معالجة اللغة الطبيعية:
    • استخدام محلل بسيط قائم على القواعد أو نموذج ذكاء اصطناعي (مثل Grok) لفهم استعلام اللغة الطبيعية واستخراج:
      • النية: قائمة المحادثات.
      • المرشحات: الكلمات الرئيسية (مثلًا، “جافا”)، الترتيب (مثلًا، “الأحدث”)، أو الحدود (مثلًا، “5”).
    • على سبيل المثال، تحويل “الأحدث 5” إلى ORDER BY started_at DESC LIMIT 5 و”العنوان يحتوي على كلمة جافا” إلى title ILIKE '%java%'.
  3. تصميم واجهة برمجة التطبيقات:
    • إنشاء نقطة نهاية (مثلًا، /api/conversations) التي تقبل:
      • user_id: من الجلسة المصادقة.
      • query: الإدخال الطبيعي أو المعلمات المهيأة (مثلًا، { filter: "title contains java" }).
    • يتحول الخلفية الاستعلام إلى SQL، مع التأكد من أن user_id يتم تضمينه دائمًا في شرط WHERE.
  4. الأمان:
    • لا تتيح أبدًا للمستخدمين إدخال SQL مباشرة أو تعديل مرشح user_id.
    • استخدام استعلامات معلمة (مثلًا، :authenticated_user_id) لمنع حقن SQL.
    • التحقق من المدخلات لتجنب الأنماط الخبيثة في عمليات البحث ILIKE.
  5. عرض الواجهة الأمامية:
    • إرجاع الحقول مثل id، title، started_at، last_message_at، و status لعرض قائمة المحادثات.
    • السماح بالخيارات الترتيب أو التصفية في واجهة المستخدم (مثلًا، قوائم منسدلة لـ “الأحدث” أو إدخال نصي للبحث في العنوان).

مثال سير العمل

  1. يتسجل المستخدم، ويسترجع الواجهة الأمامية معرفه user_id (مثلًا، 123).
  2. يكتب المستخدم “أعطني آخر 5 محادثات” في شريط البحث.
  3. يرسل الواجهة الأمامية طلبًا إلى الخلفية: /api/conversations?user_id=123&query=latest 5.
  4. يحلل الخلفية الاستعلام، ويولد SQL:
    SELECT *
    FROM conversations
    WHERE user_id = 123
    ORDER BY started_at DESC
    LIMIT 5;
    
  5. يرسل الخلفية النتائج كJSON، ويظهر الواجهة الأمامية المحادثات.

ملاحظات إضافية

أخبرني إذا كنت بحاجة إلى مساعدة في كود الواجهة الأمامية، أو إعداد واجهة برمجة التطبيقات الخلفية، أو أمثلة استعلامات إضافية!


Back Donate