الكتابات/tutorial/2024/11
Tutorial25 نوفمبر 2024·15 دقيقة

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

دليل خطوة بخطوة لبناء تطبيق مدعوم بالذكاء الاصطناعي لتحليل SQL باستخدام اللغة الطبيعية.

في هذا الدليل، سنمر عبر عملية بناء تطبيق مدعوم بالذكاء الاصطناعي يتفاعل مع قاعدة بيانات 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