لماذا Edge Functions؟ ولماذا الآن؟
تخيل أنك تطلب بيتزا، وتنتظرها تُخبز من العجينة الطازجة كل مرة. هذا ما تفعله الخوادم التقليدية. أما Edge Functions فهي كأن لديك بيتزا جاهزة في كل فرع قريب منك، تُسخن في ثوانٍ. الفكرة ببساطة: تشغيل الكود الخاص بك على خوادم موزعة جغرافياً حول العالم، أقرب ما يكون إلى المستخدم. النتيجة؟ زمن استجابة أقل من 50 ملي ثانية في كثير من الحالات، وتجربة مستخدم سلسة كالحرير.
ومع ثورة الذكاء الاصطناعي، تحتاج أدوات الويب إلى معالجة فورية للطلبات، سواء كان ذلك لتوليد ردود دردشة، أو تحليل صور، أو تقديم توصيات. هنا يأتي دور Supabase Edge Functions، التي تجمع بين قوة Deno وTypeScript، وتتكامل بشكل طبيعي مع قاعدة بيانات Supabase وخدمات AI مثل OpenAI.
الخطوة الأولى: إعداد البيئة وإنشاء أول دالة
قبل أي شيء، تأكد من تثبيت supabase CLI. افتح terminal واكتب:
npm install -g supabase
supabase init
ثم أنشئ دالة جديدة:
supabase functions new my-ai-tool
سيُولد لك مجلد supabase/functions/my-ai-tool يحتوي على ملف index.ts. هذا هو قلب الدالة. لنملأه بشيء عملي: دالة تستقبل نصاً وترجع ملخصاً باستخدام OpenAI.
كتابة الدالة: TypeScript بقوة Deno
افتح index.ts واكتب الكود التالي:
import { serve } from 'https://deno.land/std@0.177.0/http/server.ts'
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2'
serve(async (req) => {
// التحقق من الطلب
if (req.method !== 'POST') {
return new Response('Method not allowed', { status: 405 })
}
const { text } = await req.json()
if (!text) {
return new Response('Missing text', { status: 400 })
}
// استدعاء OpenAI API
const openaiResponse = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${Deno.env.get('OPENAI_API_KEY')}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'system', content: 'لخص النص التالي في جملة واحدة.' },
{ role: 'user', content: text }
]
})
})
const data = await openaiResponse.json()
const summary = data.choices[0].message.content
// حفظ السجل في قاعدة البيانات
const supabase = createClient(
Deno.env.get('SUPABASE_URL')!,
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
)
await supabase.from('summaries').insert({ original_text: text, summary })
return new Response(JSON.stringify({ summary }), {
headers: { 'Content-Type': 'application/json' }
})
})
لاحظ أننا استخدمنا Deno.env.get لقراءة المتغيرات البيئية. هذا آمن وسهل. تأكد من تعيين OPENAI_API_KEY و SUPABASE_URL و SUPABASE_SERVICE_ROLE_KEY في لوحة تحكم Supabase.
ربط الدالة بقاعدة البيانات
افترض أن لديك جدول summaries في Supabase. يمكنك إنشاؤه بسرعة من SQL Editor:
CREATE TABLE summaries (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
created_at timestamp with time zone DEFAULT now(),
original_text text,
summary text
);
الآن، كل طلب يُعالج، يُحفظ النص الأصلي والملخص تلقائياً. هذا يسمح لك ببناء سجل تاريخي، أو حتى تدريب نموذجك الخاص لاحقاً.
أفضل الممارسات لتحسين الأداء
أولاً: التخزين المؤقت (Caching). إذا كانت الدالة تُعيد نفس النتيجة لنفس المدخلات، استخدم Cache-Control header. مثلاً، إذا كنت تقدم توصيات ثابتة نسبياً، أضف:
new Response(body, {
headers: { 'Cache-Control': 'public, max-age=3600' }
})
ثانياً: معالجة الأخطاء. لا تترك المستخدم في حيرة. استخدم try-catch وأعد رسائل خطأ واضحة. مثلاً:
try {
// الكود
} catch (error) {
console.error(error)
return new Response('Internal Server Error', { status: 500 })
}
ثالثاً: تقليل الحجم. Edge Functions لها حد زمني (عادة 10 ثوانٍ). لذا، تجنب استدعاءات API متعددة متسلسلة. اجعل الدالة خفيفة وسريعة.
أمثلة عملية: أدوات ويب ذكية
لنطبق ما تعلمناه في أدوات حقيقية:
1. مساعد دردشة آلي (Chatbot)
دالة تستقبل رسالة المستخدم، ترسلها إلى OpenAI، وتعيد الرد. يمكنك إضافة سياق من قاعدة البيانات (مثل معلومات المنتج) لجعل الردود مخصصة. مثلاً، دالة chat تستخدم supabase.from('products').select('*') لبناء برومبت دقيق.
2. محرك توصيات
تخيل متجراً إلكترونياً. دالة recommend تستقبل معرف المستخدم، تجلب سجل مشترياته من Supabase، ثم تستخدم OpenAI لتحليل الأنماط واقتراح منتجات. النتيجة تُخزن مؤقتاً لتسريع الطلبات المتكررة.
3. أداة تحليل المشاعر
دالة بسيطة تأخذ نصاً (مثل تعليق) وتُعيد تصنيف المشاعر (إيجابي/سلبي/محايد). يمكن استخدامها في لوحات التحكم أو أنظمة التقييم.
الخلاصة: المستقبل على الحافة
لم يعد بناء أدوات ويب ذكية حكراً على الشركات الكبيرة. مع Supabase Edge Functions، أصبح بإمكانك، كمطور فردي، نشر تطبيقات بزمن استجابة منخفض وتكامل AI سلس. ابدأ اليوم بخطوة صغيرة: دالة واحدة، وفكرة واحدة، وسترى كيف تتحول إلى أداة قوية تخدم آلاف المستخدمين. الحافة ليست مجرد مكان لتشغيل الكود، بل هي بوابة لعصر جديد من التطبيقات الذكية والتفاعلية.