يوضح لك شرح Cloudflare Workers AI كيفية نشر وتشغيل نماذج التعلم الآلي مباشرة على شبكة الحافة العالمية لشركة Cloudflare. مع منصة Cloudflare Workers AI ، يمكنك تشغيل نماذج اللغات الكبيرة (LLMs)، وترجمة النصوص، وتوليد الصور، وتفريغ الصوت بالقرب من مستخدميك دون الحاجة لإدارة خوادم GPU معقدة ومكلفة. تغطي الخطوات الواردة أدناه كيفية تكوين أداة Wrangler، وكتابة معالج الجلب (fetch handler)، وتشغيل نموذج Llama، وتحسين تكاليف واجهة برمجة التطبيقات على الحافة.

TL;DR

  • تشغيل نماذج الذكاء الاصطناعي بدون خادم (Serverless)؛ تدير منصة Cloudflare Workers AI البنية التحتية الأساسية لوحدات معالجة الرسومات (GPUs)، وتحاسبك فقط على وقت الحوسبة الفعلي.
  • تكوين الربط (bindings) في ملف wrangler.toml؛ اربط الـ worker الخاص بك مباشرة بخدمة الذكاء الاصطناعي دون الحاجة إلى إدارة مفاتيح واجهة برمجة التطبيقات (API keys).
  • كتابة معالج الجلب (fetch handler) لتلقي طلبات المستخدمين، وتشغيل النموذج، وبث استجابات JSON الحية.
  • تحديد نماذج محسنة من كتالوج Cloudflare (مثل Llama 3 أو Whisper أو Stable Diffusion) لتحقيق التوازن الأمثل بين السرعة والدقة.
  • وضع قيود للمعدل وسقوف للفواتير لحماية نقطة النهاية (endpoint) الخاصة بك من تكاليف استهلاك الرموز (tokens) المرتفعة في بيئة التشغيل الفعلية.

لماذا تشغل نماذج الذكاء الاصطناعي على الحافة السحابية؟

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

يؤدي استدعاء واجهات برمجة التطبيقات الخارجية إلى مشاكل تتعلق بزمن الاستجابة وخصوصية البيانات. كما أن إدارة خوادم GPU الخاصة بك تطرح تحديات في الصيانة وصعوبة في توسيع النطاق. تحل منصة Cloudflare Workers AI هذه المعضلة؛ حيث تستضيف المنصة نماذج مفتوحة المصدر على وحدات معالجة الرسومات (GPUs) المنتشرة عبر شبكة Cloudflare العالمية. يعمل الكود الخاص بك كـ Worker خفيف الوزن، ويقوم بتشغيل النماذج بالقرب من مستخدميك بزمن استجابة يقارب الصفر. للحصول على مقدمة حول بناء بنيات الحافة الأساسية، راجع دليلنا حول بناء واجهة برمجة تطبيقات بدون خادم باستخدام Cloudflare Workers .


المتطلبات المسبقة

قبل أن تبدأ، تأكد من توفر العناصر التالية:

  • حساب Cloudflare مع تفعيل خدمة Workers. تشتمل الخطة المجانية على حصة استنتاج يومية كافية لمتابعة هذا الدليل.
  • تثبيت Node.js 18 أو إصدار أحدث محليًا لتتمكن من تشغيل الأدوات وخادم التطوير المحلي.
  • تثبيت Wrangler (Workers CLI) وتسجيل الدخول فيه. قم بتثبيته عبر الأمر npm install -g wrangler ثم قم بتشغيل wrangler login لربطه بحسابك.
  • معرفة أساسية بلغة JavaScript ونموذج طلب واستجابة fetch الذي يُبنى عليه كل Worker.

إذا كنت تبدأ من الصفر، فقم بإنشاء مشروع جديد باستخدام أداة create-cloudflare (C3). ستقوم بإنشاء هيكل Worker جاهز للنشر، وملف wrangler.toml وتاريخ توافق (compatibility_date) مناسب:

1npm create cloudflare@latest my-edge-ai
2cd my-edge-ai

اختر قالب Worker “Hello World” عند مطالبتك بذلك. يمنحك هذا نقطة انطلاق نظيفة يمكنك إضافة ربط الذكاء الاصطناعي إليها في الخطوة التالية.


الخطوة 1: تكوين ملف wrangler.toml

للوصول إلى نماذج الذكاء الاصطناعي، تحتاج أولاً إلى تعريف ربط (binding) خدمة الذكاء الاصطناعي في ملف تكوين مشروعك.

افتح ملف wrangler.toml (أو wrangler.json) وأضف الكتلة التالية:

1[ai]
2binding = "AI"

يجعل هذا الربط خدمة الذكاء الاصطناعي متاحة عبر متغير البيئة (env.AI) في كود الـ Worker الخاص بك. لا تحتاج إلى إدارة مفاتيح واجهة برمجة التطبيقات، أو تكوين نقاط النهاية، أو التعامل مع سلاسل الاتصال؛ وتتولى Wrangler معالجة المصادقة تلقائيًا عند النشر.

يبدو ملف wrangler.toml الكامل لهذا المشروع كالتالي:

1name = "my-edge-ai"
2main = "src/index.js"
3compatibility_date = "2025-01-01"
4
5[ai]
6binding = "AI"

يعد تاريخ التوافق (compatibility_date) أمرًا هامًا؛ فهو يثبت سلوك بيئة التشغيل حتى لا تؤدي تغييرات المنصة المستقبلية إلى تعديل كيفية تشغيل الـ Worker دون علمك. وإذا أغفلته، سيفشل النشر مع ظهور خطأ في التكوين، وهو أحد أكثر المشاكل شيوعًا في البداية.


الخطوة 2: كتابة كود الـ Worker

بمجرد تكوين الربط، يمكنك استدعاء خدمة الذكاء الاصطناعي من معالج الجلب fetch الخاص بك. يوضح المثال أدناه كيفية تلقي حمولة JSON تحتوي على موجه المستخدم (prompt) وتوليد إكمال النص باستخدام Llama 3.

 1export default {
 2  async fetch(request, env) {
 3    if (request.method !== "POST") {
 4      return new Response("Method not allowed", { status: 405 });
 5    }
 6
 7    try {
 8      const { prompt } = await request.json();
 9      if (!prompt) {
10        return Response.json({ error: "Missing prompt" }, { status: 400 });
11      }
12
13      // Call the model using the AI binding
14      const response = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
15        prompt: prompt,
16        max_tokens: 256
17      });
18
19      return Response.json(response);
20    } catch (err) {
21      return Response.json({ error: err.message }, { status: 500 });
22    }
23  }
24};

يسمح لك هذا الهيكل البسيط ببناء أدوات تلخيص النصوص، أو أدوات تحليل المشاعر، أو مولدات المحتوى. وإذا كنت ترغب في ربط هذه الميزات بقاعدة بياناتك، يمكنك الربط بقاعدة بيانات SQL بدون خادم؛ راجع إعداد قاعدة بيانات Cloudflare D1 للحصول على التفاصيل.

استخدام تنسيق رسائل المحادثة (Chat Message Format)

يعد حقل prompt مناسبًا للإكمال الفردي، ولكن النماذج الحوارية تعمل بشكل أفضل مع مصفوفة رسائل (messages) مهيكلة. يسمح لك هذا بتعيين تعليمات النظام لتوجيه أسلوب النموذج وإبقائها منفصلة عن مدخلات المستخدم:

 1const messages = [
 2  { role: "system", content: "You are a concise technical assistant." },
 3  { role: "user", content: prompt }
 4];
 5
 6const response = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
 7  messages,
 8  max_tokens: 512
 9});
10
11// Text models return the generated text on the `response` property
12return Response.json({ answer: response.response });

لاحظ أن نماذج توليد النصوص تضع مخرجاتها في حقل يسمى response؛ وبالتالي فإن النص المكتمل يوجد في المسار response.response وليس في المستوى الأعلى للكائن. تفاجئ هذه التفصيلية العديد من المطورين الجدد الذين يسجلون الكائن الخام ويرون بنية غير متوقعة.


اختيار النموذج المناسب

يضم كتالوج Cloudflare عشرات النماذج، ويعد الاختيار الجيد مسألة موازنة بين السرعة والجودة والتكلفة. تستجيب النماذج الأصغر حجمًا بشكل أسرع وتستهلك موارد أقل؛ بينما تتميز النماذج الأكبر بقدرة استدلال أفضل وتكلفة أعلى لكل طلب. يقارن الجدول أدناه بعض الخيارات الشائعة لتوليد النصوص.

النموذجالأفضل لـالسرعة النسبيةالتكلفة النسبية
@cf/meta/llama-3-8b-instructالدردشة العامة وتلخيص النصوصسريعمنخفضة
@cf/meta/llama-3.1-70b-instructالتفكير المعقد والإجابات الطويلةأبطأأعلى
@cf/mistral/mistral-7b-instruct-v0.2التعليمات الخفيفة والمسوداتسريعمنخفضة
@cf/meta/llama-guard-3-8bالإشراف وتصنيف المحتوىسريعمنخفضة

كقاعدة عامة، ابدأ بنموذج 8B مثل Llama 3 8B Instruct. فهو يتعامل مع غالبية مهام التلخيص والتصنيف والدردشة بجزء بسيط من زمن الاستجابة والتكلفة مقارنة بنموذج 70B. ولا تنتقل إلى نموذج أكبر إلا عندما تظهر تقييماتك الخاصة أن النموذج الأصغر يقصر بالفعل عن تلبية احتياجاتك.


الخطوة 3: بث الاستجابات لتحسين تجربة المستخدم

بالنسبة لتطبيقات المحادثة والدردشة، قد يؤدي الانتظار حتى توليد الاستجابة الكاملة إلى تجربة مستخدم ضعيفة.

يمكنك تكوين ربط الذكاء الاصطناعي لبث (stream) الاستجابة رمزًا تلو الآخر أثناء توليدها. ولتحقيق ذلك، قم بتمرير المعامل stream: true في خيارات طلبك. سيعيد الـ Worker كائن ReadableStream يمكنك توجيهه مباشرة إلى متصفح العميل، مما يخلق واجهة محادثة تفاعلية وسريعة. لمقارنة نهج بيئة التشغيل على الحافة هذا مع الاستضافة السحابية التقليدية، اقرأ مقارنتنا بين Cloudflare Workers و AWS Lambda .

إليك معالج بث كامل. بدلاً من إرجاع كائنات JSON المحللة، تقوم بتوجيه البث مباشرة إلى العميل مع تحديد ترويسة content-type الصحيحة حتى يتمكن المتصفح من استهلاكها كأحداث مرسلة من الخادم (Server-Sent Events):

 1export default {
 2  async fetch(request, env) {
 3    const { prompt } = await request.json();
 4
 5    const stream = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
 6      prompt,
 7      max_tokens: 512,
 8      stream: true
 9    });
10
11    return new Response(stream, {
12      headers: { "content-type": "text/event-stream" }
13    });
14  }
15};

الفرق الرئيسي عن الإصدار غير البثي هو الاستجابة نفسها: أنت تمرر البث مباشرة إلى الكائن new Response() وتضبط ترويسة content-type على القيمة text/event-stream. وإذا قمت بلف البث في الكائن Response.json() بدلاً من ذلك، فلن يتم تسلسله بشكل صحيح، وبالتالي يتلقى العميل استجابة فارغة.


اختبار ونشر الـ Worker الخاص بك

بمجرد إعداد الربط والمعالج، قم بتشغيل الـ Worker محليًا قبل طرحه في بيئة التشغيل الفعلية:

1npx wrangler dev

نظرًا لأن الاستنتاج (inference) يعمل على وحدات معالجة الرسومات (GPUs) الخاصة بشركة Cloudflare وليس على جهازك المحلي، فإن ربط الذكاء الاصطناعي يتصل بالشبكة حتى أثناء التطوير المحلي. تتولى Wrangler إدارة ذلك نيابة عنك، ولكن هذا يعني أن الاختبار المحلي يتطلب اتصالاً نشطًا بالإنترنت وتسجيل دخول صالح.

أرسل طلب اختبار باستخدام curl أثناء تشغيل wrangler dev:

1curl -X POST http://localhost:8787 \
2  -H "Content-Type: application/json" \
3  -d '{"prompt": "Summarise the benefits of edge computing in one sentence."}'

بمجرد رضاك عن النتيجة، قم بالنشر في الشبكة العالمية:

1npx wrangler deploy

تقوم Wrangler برفع الـ Worker الخاص بك وتعيد لك رابطًا ينتهي بـ *.workers.dev. نقطة النهاية الخاصة بك الآن نشطة في كل مركز بيانات لـ Cloudflare، ويتم توجيه كل طلب تلقائيًا إلى الموقع الأقرب للمستخدم.


الأخطاء الشائعة واستكشاف الأخطاء وإصلاحها

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

  • Cannot read properties of undefined (reading 'run') – ربط env.AI غير محدد. يعني هذا دائمًا تقريبًا أن كتلة [ai] مفقودة من ملف wrangler.toml الخاص بك، أو أنك قمت بتعديل الملف ولكنك لم تقم بإعادة تشغيل wrangler dev (أو إعادة النشر). تأكد من تطابق اسم الربط تمامًا.
  • خطأ No such model أو خطأ 400 عند الاستدعاء run – معرف النموذج خاطئ. أسماء النماذج حساسة لحالة الأحرف ويجب أن تشمل المسار الكامل، على سبيل المثال @cf/meta/llama-3-8b-instruct. انسخها مباشرة من كتالوج النماذج بدلاً من كتابتها من الذاكرة.
  • استجابات بث فارغة أو مشوهة – لقد قمت بإرجاع البث عبر Response.json() بدلاً من الكائن new Response(stream, ...). يجب توجيه التدفقات السحابية مباشرة، وليس تسلسلها.
  • أخطاء السعة أو خطأ 429 تحت الحمل العالي – النموذج مشبع مؤقتًا أو أنك واجهت حدًا من حدود الحساب. أضف آلية إعادة محاولة قصيرة مع تأخير متزايد (back-off)، وفكر في نموذج أصغر للتعامل مع طفرات حركة المرور الكثيفة.
  • إجابات مقتطعة – تتوقف الإجابة في منتصف الجملة لأن قيمة max_tokens منخفضة للغاية. ارفع الحد، ولكن تذكر أن القيم الأكبر تزيد من زمن الاستجابة والتكلفة معًا.

إذا فشل طلب بصمت، فراقب السجلات المباشرة باستخدام الأمر npx wrangler tail أثناء إرسال طلب اختبار. فهو يبث أخطاء وقت التشغيل ومخرجات console.log من الـ Worker المنشور.


تحسين تكاليف الإنتاج والأمان

بينما تعد خدمة Workers AI فعالة للغاية من حيث التكلفة، فإن تشغيل الاستنتاج في بيئة التشغيل الفعلية يتطلب ضوابط دقيقة.

  • تطبيق تحديد معدل الطلبات: حدد عدد المرات التي يمكن للعميل فيها الاتصال بنقطة النهاية الخاصة بك. تتزايد تكاليف حوسبة GPU طرديًا مع الاستخدام.
  • تصفية الموجهات (Sanitise Prompts): تحقق من صحة المدخلات لمنع هجمات الحقن (injection attacks) وضمان بقاء مخرجات النموذج متماشية مع هوية علامتك التجارية.
  • تقليص حجم السياق: حافظ على قصر تواريخ الموجهات. يؤدي إرسال مخازن سياق ضخمة في كل مكالمة إلى زيادة تكاليف معالجة الرموز.

للحصول على نظرة تفصيلية حول إدارة السياق، راجع دليلنا حول بناء روبوت محادثة باستخدام واجهة برمجة تطبيقات OpenAI .


أهم النقاط المستفادة

  • توفر منصة Cloudflare Workers AI وصولاً بدون خادم إلى نماذج مفتوحة المصدر دون الحاجة لصيانة أجهزة GPU.
  • قم بتكوين الوصول عن طريق إضافة كتلة الربط [ai] إلى ملف wrangler.toml الخاص بك.
  • اكتب معالجات الجلب (fetch handlers) لتنفيذ مهام توليد النصوص أو الترجمة أو الصور مباشرة على الحافة السحابية.
  • قم بتمكين بث الرموز باستخدام المعامل stream: true لتحسين تجارب الأجهزة المحمولة والدردشة التفاعلية.
  • قم بتطبيق حدود المعدل وتصفية الموجهات لحماية نقاط النهاية الخاصة بك في بيئة الإنتاج.

ابنِ تطبيقات الذكاء الاصطناعي الخاصة بك على الحافة السحابية

يتطلب بناء تكاملات ذكاء اصطناعي موثوقة معرفة متخصصة بالبنية التحتية الخالية من الخوادم. تتخصص شركة Mecanik في تقديم خدمات تكامل الذكاء الاصطناعي وإعدادات واجهات برمجة التطبيقات المخصصة من خلال خدمة تكامل واجهة برمجة تطبيقات OpenAI الخاصة بنا. نحن نبني أدوات متوافقة مع بيئات الحافة وقابلة للتوسع بسلاسة، مما يحسن التكاليف وتجارب المستخدمين. اتصل بخبرائنا اليوم لمناقشة مشروعك.


الأسئلة الشائعة (FAQ)

ما هي خدمة Cloudflare Workers AI؟ هي منصة بدون خادم (serverless) تتيح لك تشغيل نماذج التعلم الآلي (توليد النصوص، والترجمة، وتحويل الكلام إلى نصوص، وتوليد الصور) على شبكة GPU العالمية التابعة لشركة Cloudflare.

هل أحتاج إلى مفتاح واجهة برمجة تطبيقات (API key) لاستخدام Workers AI؟ لا؛ فبمجرد إعلان ربط الذكاء الاصطناعي في ملف wrangler.toml الخاص بك، تتولى Cloudflare معالجة أوراق الاعتماد والمصادقة داخليًا، مما يجعل الخدمة سهلة الوصول عبر المتغير env.AI.

ما هي النماذج المتاحة على Cloudflare Workers AI؟ تستضيف المنصة نماذج مفتوحة المصدر شائعة، بما في ذلك Meta Llama، وMistral، وOpenAI Whisper، وStable Diffusion، والتي يتم تحديثها بانتظام في كتالوج النماذج الخاص بها.

هل يمكنني بث استجابات النصوص من خدمة Workers AI؟ نعم؛ فمن خلال ضبط القيمة stream: true في معاملات استدعاء env.AI.run الخاص بك، يعيد الـ worker كائن ReadableStream قياسي لبث النصوص إلى المتصفح مباشرة.

كيف تعمل الفوترة لخدمة Workers AI؟ تعتمد الفوترة على عدد الرموز (tokens) التي تتم معالجتها (للنماذج النصية) أو مدة وقت الحوسبة المستغرق (للنماذج الأخرى)، مما يوفر نموذج تسعير اقتصاديًا للدفع حسب الاستخدام الفعلي.