إنشاء تطبيق لتوليد الصور بالذكاء الاصطناعي: الأدوات وAPI والتكاليف

خطة عملية لبناء تطبيق لتوليد الصور بالذكاء الاصطناعي: حلقة الطلبات، ومجموعة أدوات تُطلق بها التطبيق في أسبوع، وطريقة ربط API لتوليد الصور بكود Node يعمل، وميزانية شهرية تكشف تكلفة كل توليدة فعليًا قبل الإطلاق.

إنشاء تطبيق لتوليد الصور بالذكاء الاصطناعي: الأدوات وAPI والتكاليف
Cristian Da Conceicao
مؤسس Picasso IA

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

يعرض هذا المقال مجموعة أدوات يمكنك بناؤها في أسبوع، ويوضح كيف تتكامل استدعاءات API مع بعضها عبر شيفرة عملية مع PicassoIA API، ويقدّم حسابًا صريحًا للتكلفة الشهرية حتى تستطيع تسعير المنتج قبل يوم الإطلاق.

ما الذي تبنيه فعلًا

إذا أزلت العلامة التجارية، فكل تطبيق لتوليد الصور يؤدي المهمة نفسها: يحوّل طلب نص إلى ملف، ويفعل ذلك دون أن يجعل الشخص ينتظر أمام شاشة متجمدة. وحين تنظر إلى التطبيق بوصفه حلقة طلبات مع معرض مرفق بها، يصبح البناء أصغر بكثير.

حلقة الطلبات في خمس خطوات

  1. يرسل المتصفح الأمر النصي وبعض الخيارات (الحجم، والأسلوب، وعدد الصور) إلى الخلفية الخاصة بك.
  2. تتحقق الخلفية الخاصة بك من المستخدم والحصة والأمر النصي، ثم تنشئ تنبؤًا (prediction) عبر واجهة API الخاصة بالصور.
  3. تُعيد API الرد فورًا بمعرّف، لأن التوليد غير متزامن ويستغرق ثوانيَ لا ملّي ثانية.
  4. تستعلم الخلفية الخاصة بك عن هذا المعرّف بشكل دوري (أو تنتظر إشعار webhook). عندما تصبح الحالة succeeded، تنسخ الملف إلى مساحة التخزين الخاصة بك.
  5. يعرض المتصفح الصورة ويضيفها إلى معرض المستخدم.

امرأة تكتب وصفًا قصيرًا في تطبيق صور على هاتفها عند نافذة طاولة في مقهى

كل ميزة ستضيفها لاحقًا ستُبنى فوق هذه الخطوات الخمس. ترتبط النقاط بالخطوة 2، ويرتبط المعرض بالخطوة 5. وتوليد الفيديو هو الحلقة نفسها مع خطوة 4 أبطأ.

حدّد شكل المنتج أولًا

اختر أصغر نسخة يمكن أن يدفع أحد ثمنها. كل نوع إضافي من المدخلات يضيف عملًا في الخلفية.

شكل المنتجما يفعله المستخدمونالعمل الإضافي عليك
صندوق نص فقطيكتب جملة فيحصل على صورةالطابور، والمعرض، والحصة
نص مع تعديليرفع صورة ويغيّرهاحدود الرفع، وفحص الملفات، ونموذج تعديل مثل PicassoIA Image Editor Pro
صور مع فيديو قصيريحرّك نتيجة لتصبح مقطعًامهام أطول، وملفات أكبر، ونموذج فيديو مثل PicassoIA Video

💡 ابدأ بصندوق إدخال واحد وزر واحد. الميزات التي تضيفها لاحقًا تكلّف أقل من ميزات تضطر إلى إزالتها بعد أن يعتمد عليها المستخدمون.

اختر مجموعة أدوات تصل إلى الإطلاق

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

منظر علوي لمكتب خشبي عليه رسم هندسي بيد، وحاسوب محمول، وملاحظات لاصقة، وفنجان إسبريسو

خيارات الواجهة الأمامية

يوفّر إطار React مثل Next.js صفحة للأوامر النصية، ومعرضًا، ومسارات الخادم في مشروع واحد. إذا كان معظم مستخدميك على الهواتف، فأطلقه أولًا بوصفه تطبيق ويب تقدمي (progressive web app)، وانتقل إلى React Native أو Flutter فقط حين تحتاج إلى وصول أعمق إلى الكاميرا أو الملفات. الشاشة نفسها بسيطة: مربع نص، ومنتقي للحجم، وزر، وشبكة.

الخلفية والطابور

استخدم Node أو Python، أيهما يكتب به فريقك أصلًا. الجزء الذي لا ينبغي تجاهله هو طابور المهام (job queue). يستغرق توليد الصور وقتًا أطول كثيرًا مقارنةً بطلب ويب عادي، وتحدّ واجهات API الخاصة بالصور من عدد المهام التي تعمل في وقت واحد. يتيح لك الطابور (Redis مع BullMQ، أو Celery على Python) قبول كل نقرة فورًا، وإرسال الطلبات إلى API بوتيرة آمنة.

احتفظ بجدول generations واحد في Postgres يضم الأعمدة التالية: id، user_id، prompt، model، status، cost_usd، image_url، created_at. هذا الجدول الواحد يغذي المعرض، وفحص الحصة، وتقارير التكلفة.

التخزين والتسليم

انسخ كل صورة مكتملة إلى حاوية التخزين الخاصة بك خلف شبكة CDN. لا تعتمد على عنوان URL مؤقت يقدمه المزوّد وكأنه سيبقى حيًا إلى الأبد. احفظ الأصل مع صورة مصغّرة أصغر بصيغة WebP حتى يُحمَّل المعرض بسرعة على الهاتف.

الطبقةالخيار البسيطالترقية عندما
الواجهة الأماميةNext.js أو React البسيطتحتاج إلى ميزات الجهاز الأصلية
طبقة APINode (Fastify) أو FastAPIتحتاج الحركة إلى عمال منفصلين
الطابورRedis مع BullMQ أو Celeryتستدعي أكثر من مزوّد واحد
قاعدة البياناتPostgresتصبح التقارير ثقيلة
التخزينحاوية متوافقة مع S3 مع CDNيتوزع المستخدمون في مناطق كثيرة
تسجيل الدخولروابط البريد الإلكتروني أو OAuthتبيع حسابات للفرق

اختر API للصور

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

API مستضافة أم وحدة GPU خاصة بك

تعني API المستضافة لا برامج تشغيل، ولا عمل في التوسّع، وعدة نماذج خلف واجهة واحدة، وتدفع مقابل كل صورة. وتعني وحدة GPU المستأجرة فاتورة ثابتة بالساعة وقائمة طويلة من المهام المتكررة: أوزان النموذج، وحدود الذاكرة، والتحديثات، والطوابير، والأعطال في الساعة 3 فجرًا.

الحساب الرياضي هو الذي يحسم الأمر. لنفترض أن وحدة GPU مستأجرة تكلّف 1.50 دولار في الساعة، وتنتج 120 صورة في الساعة. إذا لم تتوقف أبدًا، فإن كل صورة تكلّف نحو 0.0125 دولار. وإذا كانت مشغولة 20% فقط من الوقت، فأنت فعليًا تنتج 24 صورة في الساعة، وتكلّف كل واحدة 0.0625 دولار. هذه أرقام توضيحية، لكن شكل النتيجة يظل صحيحًا: الاستضافة الذاتية لا تربح إلا مع حركة مرور ثابتة وكثيفة.

منظور من زاوية منخفضة لممر نظيف في مركز بيانات بين خزائن خوادم سوداء طويلة

نماذج تستحق الربط

تسرد مجموعة تحويل النص إلى صورة على PicassoIA أكثر من 200 نموذج، وهذا مفيد لأن لا يوجد نموذج واحد الأفضل في كل شيء. اختر نموذجًا افتراضيًا واحدًا، واحتفظ بنموذج أو اثنين بديلين خلف إعداد، حتى تستطيع التبديل حين تتغير الجودة أو السرعة أو السعر.

النموذججرّبه لـ
PicassoIA Imageنموذج افتراضي عام، متاح عبر PicassoIA API
P Imageنتائج فوتوغرافية سريعة بتكلفة منخفضة
FLUX Schnellالمسودات السريعة والمعاينات
FLUX 2 Proصور نهائية بجودة أعلى
Seedream 5 Proمشاهد مفصّلة تستحق المقارنة بنموذجك الافتراضي
GPT Image 2أوامر نصية بتعليمات محددة أو نص قصير داخل الصورة
Imagen 4 Fastبديل سريع بمظهر مختلف

أضف نموذجًا لغويًا لتحسين الأوامر

معظم الناس يكتبون أوامر مثل "كلب على شاطئ". يستطيع نموذج لغوي صغير أن يوسّع هذا الأمر إلى أمر أغنى قبل استدعاء توليد الصورة، وتكلفته جزء صغير من السنت. يناسب Claude Sonnet 5 وGemini 3.5 Flash هذه المهمة، ويعيد GPT 5 Structured مخرجات JSON نظيفة حين تحتاج إلى تقسيم إعادة الصياغة إلى حقول مثل الموضوع والإضاءة والعدسة.

تستطيع العائلة نفسها من النماذج أداء مهمة ثانية: فحص الأوامر قبل أن تصل إلى نموذج توليد الصور. المزيد عن ذلك لاحقًا.

الاتصال بواجهة PicassoIA API

تقدّم PicassoIA واجهة REST API على غرار Replicate، لذا فإن التدفق هو التدفق نفسه من حلقة الطلبات: أنشئ تنبؤًا، واستعلم عنه، واجلب النتيجة. نقاط النهاية والحدود الواردة أدناه مأخوذة من صفحة API العامة، وهي المكان الذي تتأكد فيه من التفاصيل قبل النشر.

كيف تستخدم PicassoIA Image

قبل كتابة أي كود، جرّب النموذج يدويًا. يستغرق ذلك عشر دقائق، ويوفر أيامًا من التخمين.

  1. افتح صفحة PicassoIA Image.
  2. اكتب خمسة أوامر نصية تطابق ما سيكتبه مستخدموك فعلًا: قصيرة، وطويلة، وغامضة.
  3. جرّب نسب العرض إلى الارتفاع التي سيقدمها تطبيقك، مثل 1:1 و16:9 و9:16.
  4. ولّد كل أمر عدة مرات، ولاحظ مدى تباين النتائج.
  5. دوّن أي صياغة أعطت أفضل الصور. تصبح هذه القائمة القالب الذي يعيد كتابة الأوامر في تطبيقك.

💡 إذا كان تطبيقك يعدّل الصور، فكرر الاختبار نفسه مع PicassoIA Image Editor Pro باستخدام صور حقيقية مرفوعة، لا عينات جاهزة.

عنوان URL الأساسي والمصادقة

عنوان URL الأساسي هو https://api.picassoia.com/v1. يحمل كل طلب ترويسة Authorization: Bearer تتضمن سرًّا يبدأ بالعبارة pia_sk_. تنشئه من صفحة API الخاصة بالحساب، ولا يمكن للحساب أن يحمل أكثر من اثنين، لذا بدّل واحدًا في كل مرة. لا تضع هذا السر أبدًا في شيفرة المتصفح أو تطبيق الهاتف. مكانه الصحيح على خادمك، في متغير بيئة. تُدرج متطلبات الخطط وأسعار الوصول إلى API في تلك الصفحة، وقد تتغير، لذا اقرأها قبل أن تبني ميزانية حولها.

يمكن الوصول إلى أربعة نماذج عبر API:

النموذجالمخرجات
PicassoIA Imageصور من نص
PicassoIA Image Editor Proصور معدّلة
PicassoIA Videoفيديو من نص أو صورة
Seedance 2.5 Liteفيديو مع صوت

خطط وفق هذه الحدود:

الحدالقيمة
التنبؤات المتزامنة5 لكل حساب، مشتركة بين كل الأسرار واتصالات MCP
حجم جسم الطلب10 ميغابايت
طول الأمر النصي4,000 حرف
مهلة المهمة3 ساعات

يحدد سقف المهام الخمس بنية تطبيقك كلها، ولهذا فإن الطابور المذكور سابقًا ليس اختياريًا.

إنشاء، واستعلام، وجلب

نقاط النهاية هي POST /v1/models/{owner}/{name}/predictions لبدء مهمة، وGET /v1/predictions/{id} لقراءتها، وPOST /v1/predictions/{id}/cancel لإيقافها، وGET /v1/predictions لعرض المهام الأخيرة. إليك الحلقة كاملة في Node 18 أو أحدث:

const BASE = "https://api.picassoia.com/v1";
const headers = {
  Authorization: `Bearer ${process.env.PICASSOIA_TOKEN}`,
  "Content-Type": "application/json",
};

async function call(url, options) {
  const res = await fetch(url, { headers, ...options });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return res.json();
}

export async function generate(prompt) {
  const created = await call(
    `${BASE}/models/picassoia/picassoia-image/predictions`,
    {
      method: "POST",
      body: JSON.stringify({ input: { prompt, aspect_ratio: "16:9" } }),
    }
  );

  let job = created;
  while (!["succeeded", "failed", "canceled"].includes(job.status)) {
    await new Promise((r) => setTimeout(r, 2000));
    job = await call(`${BASE}/predictions/${created.id}`);
  }

  if (job.status !== "succeeded") throw new Error(job.error ?? job.status);
  return Array.isArray(job.output) ? job.output[0] : job.output;
}

لقطة مقربة ليدين تكتبان على حاسوب محمول ونافذة طرفية داكنة على الشاشة

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

ما التكلفة الفعلية

تنقسم التكاليف إلى مجموعتين: تكاليف متغيرة تزداد مع كل نقرة، وتكاليف ثابتة تبقى كما هي. التكاليف المتغيرة هي الخطرة.

مكتب عليه آلة حاسبة، وفواتير مطبوعة، وجدول بيانات على حاسوب محمول، ويد تمسك قلمًا

تكلفة الصورة الواحدة هي الرقم الأساسي

المعادلة الأساسية قصيرة:

التكلفة الشهرية = عدد المستخدمين × عدد التوليدات لكل مستخدم × تكلفة الصورة الواحدة + التكاليف الثابتة

الكلمة التي يجب مراقبتها هي التوليدات. يضغط الناس الزر عدة مرات مقابل كل صورة يحتفظون بها، لذلك قِس عدد التوليدات لكل صورة محفوظة من اليوم الأول لنسختك التجريبية، وأعدّ الميزانية بهذا الرقم، لا بعدد الصور المحفوظة.

ميزانية شهرية مُعدّة كمثال

لنفترض 2,000 مستخدم نشط يُجري كل واحد منهم 20 توليدًا شهريًا. أي 40,000 صورة. الأسعار الواردة أدناه افتراضات للتخطيط، لذا استبدلها بالسعر الحالي للنموذج الذي تختاره. التكاليف الثابتة للاستضافة وقاعدة البيانات والتخزين محددة بمبلغ $100 شهريًا لهذا الحجم.

السيناريوسعر الصورة المفترضفاتورة الصورمع 100 دولار ثابتةالنتيجة مع إيرادات 2,700 دولار
نموذج مسودات سريع0.01 دولار400 دولار500 دولار+2,200 دولار
نموذج متوسط المستوى0.04 دولار1,600 دولار1,700 دولار+1,000 دولار
نموذج متميز0.08 دولار3,200 دولار3,300 دولار-600 دولار

يفترض رقم الإيرادات أن 300 من أصل 2,000 مستخدم يدفعون 9 دولارات شهريًا. يخسر الصف الخاص بالنموذج المتميز المال رغم أن التطبيق يبدو سليمًا، لأن المستخدمين المجانيين ينتجون صورًا أيضًا. ثلاثة حلول تعمل جيدًا معًا: ضع حدًا للمستوى المجاني، وبِع نقاطًا مقدّرة وفق السعر الفعلي لكل نموذج، وأرسل طلبات المسودات إلى النموذج الرخيص، واحجز النموذج المتميز للتصيير النهائي.

تكاليف ينساها الناس:

  • التوليدات الفاشلة والمتروكة. قد تدفع ثمن صور لا يفتحها أحد.
  • إعادة المحاولة. كل إعادة محاولة تلقائية استدعاء آخر قابل للفوترة، إلا إذا كانت المحاولة الأولى فشلت بوضوح.
  • التخزين وعرض النطاق. معرض من الصور كاملة الحجم يتراكم أسرع مما تتوقع، ولهذا تهم الصور المصغّرة وشبكة CDN.
  • استدعاءات إعادة كتابة الأوامر والإشراف. صغيرة في كل استدعاء، لكنها حقيقية عند الحجم الكبير.
  • رسوم الدفع ورسوم متاجر التطبيقات. تُخصم من كل عملية بيع.
  • وقت الدعم. يجب أن يردّ أحد على سؤال "صورتي تبدو خاطئة".

اجعله آمنًا وسريعًا

السرعة والأمان أمران رخيصان عند إضافتهما مبكرًا ومؤلمان بعد الإطلاق.

الطوابير والحدود وإعادة المحاولة

ثلاثة زملاء أمام لوح أبيض يرسمون أسهمًا بين مربعات مرسومة بالأيدي

مع خمس تنبؤات متزامنة لكل حساب في PicassoIA، يحدد الطابور مدى سلاسة عمل تطبيقك. لنفترض أن الصورة تستغرق نحو 10 ثوانٍ. عندئذ تعطيك خمس مهام في وقت واحد نحو 30 صورة في الدقيقة، أو 1,800 صورة في الساعة. 40,000 صورة من الميزانية أعلاه تعني في المتوسط نحو 55 صورة في الساعة. حتى ذروة الازدحام بخمسة أضعاف المتوسط، أي نحو 280 صورة، تتسع بهامش مريح.

قواعد تحافظ على سلامة الطابور:

  • أعد المحاولة للأخطاء العابرة فقط، مثل انتهاء المهلة وأخطاء الخادم، مع تأخير متزايد بين المحاولات. لا تعيد أبدًا محاولة طلب رفضته API بسبب مدخل غير صالح.
  • قيّد عدد المهام لكل مستخدم إلى عدد صغير في الوقت نفسه، حتى لا يستطيع شخص واحد ملء الخانات الخمس كلها.
  • اعرض التقدّم، ولو برسالة بسيطة مثل "في الطابور، الترتيب الثالث"، حتى لا يعيد الناس الضغط.
  • استخدم نقطة نهاية الإلغاء عندما يغادر المستخدم، حتى تتوقف عن دفع ثمن عمل لن يراه أحد.

الإشراف قبل التوليد

افحص الأمر النصي قبل أن يصل إلى نموذج توليد الصور. يقرأ مصنّف أمان مثل Llama Guard 4 12B النص، ويعلّم الفئات التي تختار حظرها. وهو رخيص وسريع، ويحمي حسابك من المشكلات.

مراجع يرتدي سترة رمادية ينظر إلى شاشة مليئة بشبكة من الصور المصغّرة

إذا كان بإمكان المستخدمين رفع صور، فراجع الصور المرفوعة أيضًا. سجّل كل رفض مع معرّف المستخدم والسبب، لأن الأنماط في هذه السجلات تكشف من يحاول اختبار حدودك.

ترقيتان تستحقان التكلفة:

  • خزّن في الذاكرة المؤقتة حسب الوصفة. أنشئ تجزئة (hash) للأمر النصي والنموذج والحجم وقيمة البذرة. عندما تتكرر الوصفة نفسها، أعد الملف المخزَّن بدلًا من دفع ثمن جديد. تستفيد قوالب الأوامر النصية ومعارض الأمثلة من الذاكرة المؤقتة باستمرار.
  • أضف الفيديو لاحقًا. الحلقة نفسها، لكنها أبطأ. PicassoIA Video و Seedance 2.5 Lite متاحان كلاهما عبر API، ويمكن للصورة الثابتة المكتملة أن تعمل كإطار أول لمقطع. خصّص ميزانية منفصلة للفيديو، لأن المقاطع تكلّف أكثر من الصور وملفاتها أكبر حجمًا.

عشرات الصور المطبوعة منتشرة على طاولة خشبية بجانب قرص صلب خارجي وبطاقة SD

خطة أسبوعك الأول

يستطيع فريق صغير إطلاق نسخة تجريبية خاصة خلال سبعة أيام إذا بقي النطاق ضيقًا.

اليومالمهمة
1اختر نموذجًا افتراضيًا واحدًا واختبر 20 أمرًا نصيًا واقعيًا يدويًا
2ابنِ مسار الخلفية الذي ينشئ التنبؤ ويستعلم عنه
3أضف التخزين والصور المصغّرة وصفحة المعرض
4أضف تسجيل الدخول، وحصة يومية، وتسجيل تكلفة كل توليدة
5أضف الإشراف على الأوامر النصية وحدود المعدل لكل مستخدم
6أضف النقاط أو رابط دفع بسيطًا
7ادعُ 20 مختبرًا واقرأ السجلات معهم

لوح تخطيط عليه أعمدة من الملاحظات اللاصقة مرتبة حسب أيام الأسبوع ومطور يضيف ملاحظة أخرى

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

أنشئ صورتك الأولى على PicassoIA

أسرع طريقة للحكم على نموذج هي استخدامه. افتح PicassoIA Image، واكتب الأمر الذي سيكتبه مستخدم حقيقي، وانظر إلى ما يعود. ثم جرّب الأمر نفسه على نموذجين أو ثلاثة من قائمة النماذج الكاملة، وقارن الجودة والسرعة والأسلوب جنبًا إلى جنب.

حين تبدو النتائج صحيحة، اقرأ صفحة PicassoIA API، وأنشئ أول سر لك، وشغّل مقتطف Node المذكور أعلاه. أمر واحد، وتنبؤ واحد، وصورة واحدة محفوظة في تخزينك الخاص: هذا هو التطبيق كله مصغّرًا، وكل ما يليه توسيع له. ابدأ التجريب اليوم، فستعلّمك أول صورة ينشئها كودك أكثر مما تعلّمك أي خطة.

شارك هذا المقال

اختر لغتك

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