بناء أداة تحليل SQL مدعومة بالذكاء الاصطناعي

Anis MarrouchiAI Bot
بواسطة Anis Marrouchi & AI Bot ·

جاري تحميل مشغل تحويل النص إلى كلام الصوتي...

في هذا الدليل، سنمر عبر عملية بناء تطبيق مدعوم بالذكاء الاصطناعي يتفاعل مع قاعدة بيانات PostgreSQL باستخدام اللغة الطبيعية. سيكون هذا التطبيق قادراً على توليد استعلامات SQL من مدخلات اللغة الطبيعية، وشرح مكونات الاستعلام بلغة بسيطة، وإنشاء رسوم بيانية لتمثيل نتائج الاستعلام.

إعداد المشروع

للبدء، سنستخدم مجموعة التقنيات التالية:

  • Next.js (App Router)
  • AI SDK
  • OpenAI
  • Zod
  • Postgres مع Vercel Postgres
  • shadcn-ui وTailwindCSS للتنسيق
  • Recharts لتصور البيانات

استنساخ المستودع

للتركيز على وظائف الذكاء الاصطناعي، استنسخ مستودع البداية:

git clone https://github.com/vercel-labs/natural-language-postgres
cd natural-language-postgres
git checkout starter

تثبيت التبعيات

ثبت التبعيات الضرورية باستخدام pnpm:

pnpm install

إعداد قاعدة البيانات

أنشئ قاعدة بيانات Postgres وأعد متغيرات البيئة:

# .env.local
POSTGRES_URL="postgres://..."
OPENAI_API_KEY="sk-..."

بناء واجهة الاستعلام

إنشاء مكون الإدخال

// components/QueryInput.tsx
'use client';
 
import { useState } from 'react';
 
export function QueryInput({ onSubmit }: { onSubmit: (query: string) => void }) {
  const [input, setInput] = useState('');
 
  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    if (input.trim()) {
      onSubmit(input);
    }
  };
 
  return (
    <form onSubmit={handleSubmit} className="w-full max-w-2xl">
      <div className="flex gap-2">
        <input
          type="text"
          value={input}
          onChange={(e) => setInput(e.target.value)}
          placeholder="اسأل عن بياناتك بلغة طبيعية..."
          className="flex-1 p-3 border rounded-lg"
        />
        <button
          type="submit"
          className="px-6 py-3 bg-blue-500 text-white rounded-lg hover:bg-blue-600"
        >
          تحليل
        </button>
      </div>
    </form>
  );
}

إنشاء مسار API

// app/api/analyze/route.ts
import { openai } from '@ai-sdk/openai';
import { generateObject } from 'ai';
import { z } from 'zod';
import { sql } from '@vercel/postgres';
 
const QuerySchema = z.object({
  sqlQuery: z.string().describe('استعلام SQL المولد'),
  explanation: z.string().describe('شرح ما يفعله الاستعلام'),
});
 
export async function POST(req: Request) {
  const { question } = await req.json();
 
  // توليد استعلام SQL من السؤال
  const { object } = await generateObject({
    model: openai('gpt-4-turbo'),
    schema: QuerySchema,
    prompt: `بناءً على السؤال التالي، ولد استعلام SQL لقاعدة بيانات PostgreSQL:
 
السؤال: ${question}
 
ولد استعلام SQL صالحاً وآمناً.`,
  });
 
  // تنفيذ الاستعلام
  try {
    const result = await sql.query(object.sqlQuery);
 
    return Response.json({
      query: object.sqlQuery,
      explanation: object.explanation,
      results: result.rows,
    });
  } catch (error) {
    return Response.json(
      { error: 'فشل تنفيذ الاستعلام' },
      { status: 500 }
    );
  }
}

تصور النتائج

إنشاء مكون الرسم البياني

// components/ResultChart.tsx
'use client';
 
import {
  BarChart,
  Bar,
  XAxis,
  YAxis,
  CartesianGrid,
  Tooltip,
  ResponsiveContainer,
} from 'recharts';
 
interface ResultChartProps {
  data: Record<string, any>[];
  xKey: string;
  yKey: string;
}
 
export function ResultChart({ data, xKey, yKey }: ResultChartProps) {
  return (
    <div className="w-full h-80">
      <ResponsiveContainer width="100%" height="100%">
        <BarChart data={data}>
          <CartesianGrid strokeDasharray="3 3" />
          <XAxis dataKey={xKey} />
          <YAxis />
          <Tooltip />
          <Bar dataKey={yKey} fill="#3b82f6" />
        </BarChart>
      </ResponsiveContainer>
    </div>
  );
}

أمثلة على الاستعلامات

يمكن للمستخدمين طرح أسئلة مثل:

  • "أظهر لي أفضل 10 عملاء حسب إجمالي المبيعات"
  • "ما هو متوسط قيمة الطلب لكل شهر؟"
  • "أي المنتجات لديها أعلى هامش ربح؟"

الخاتمة

لقد بنيت أداة تحليل SQL مدعومة بالذكاء الاصطناعي تتيح للمستخدمين استعلام قواعد البيانات باستخدام اللغة الطبيعية. يمكن توسيع هذه الأداة بإضافة المزيد من أنواع التصور ودعم استعلامات أكثر تعقيداً.


المرجع: Vercel Labs Natural Language Postgres


هل تريد قراءة المزيد من الدروس التعليمية؟ تحقق من أحدث درس تعليمي لدينا على تنفيذ RAG على ملفات PDF باستخدام البحث في الملفات في واجهة برمجة تطبيقات Responses.

ناقش مشروعك معنا

نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.

دعنا نجد أفضل الحلول لاحتياجاتك.

مقالات ذات صلة