تطوير التطبيقات

بناء تطبيق بالذكاء الاصطناعي

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

  • الدرس 8 من 8
  • متوسط
  • مجاني، دون تسجيل

ما حصة الشاشات من منتج حقيقي؟

أسطر الكود في rgb-freelance، معدودة في 8 سبتمبر 202617963 سطراً
  1. 3231
  2. 11597
  3. 3135
  • الشاشات 3231
  • خلف الشاشات 11597
  • المظهر 3135

هذا منتج ويب لنا لا تطبيق موبايل؛ اقرأ الرقم بوصفه نسبةً لا قانوناً.

آخر مراجعة: تُراجع الحقائق وأسماء الأدوات في هذا الدرس مقابل مصادرها في هذا التاريخ.

أي جزء من التطبيق يبنيه الذكاء الاصطناعي فعلاً؟

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

إضافة سوق العمل لدينا، rgb-freelance، فيها ثلاثة مجلدات. مجلد الشاشات 3231 سطراً، ومجلد المنطق خلف الشاشات 11597 سطراً، والمظهر أي CSS وجافاسكريبت 3135 سطراً. أي 17963 سطراً في المجموع، حصة الشاشات فيها أقل قليلاً من الخُمس. وهذا ليس تطبيق موبايل ولا ندّعي ذلك؛ بل منتج ويب فيه مستخدمون ومشاريع ورسائل وملفات، وشكل تقسيمه هو الشكل الذي تراه في تطبيق الموبايل أيضاً.

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

فادعاء «ابنِ التطبيق بالذكاء الاصطناعي» ليس كذباً ولا هو القصة كاملة. وأدق منه: إنه يجعل الجزء الأسرع أسرع. فإن كان هذا توقعك ربحت ربحاً حقيقياً؛ وإن كان توقعك منتجاً منتهياً اكتشفت الفرق حين يصير لك مستخدمون حقيقيون.

بناء تطبيق بالذكاء الاصطناعي: أين ينفع وأين لا

سرعة النمذجة: ما تغيّر فعلاً

قبل قائمة المخاطر، اعتراف قلّما يُقال: شيء هنا تغيّر فعلاً، وتصغيره تهاون كتضخيمه.

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

وقيمة هذه السرعة الحقيقية في موضع قلّما يُفكَّر فيه: كلفة رمي العمل. فحين تستغرق النسخة الأولى نصف يوم يسهل التخلي عنها أيضاً. والفرق التي تنفق شهوراً على النسخة الأولى تتعلق بها بالقدر نفسه وتترك الفكرة السيئة متأخرةً. وهذا الموضع الوحيد الذي يكون فيه الكود الرخيص ميزة استراتيجية فعلاً لا مجرد توفير.

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

ماذا تسلّم للنموذج وماذا تبقي

أبقِه عندك

  • قرار من يرى ماذا
  • كل موضع يُحسب فيه مال أو مخزون
  • المفاتيح وكلمات السر وملف الإعدادات الحقيقي
  • القبول النهائي لكل قطعة تدخل المشروع

سلّمه للنموذج

  • الشاشات والنماذج والقوائم والحالات الفارغة
  • التخطيط المتجاوب والتكيّف من اليمين لليسار
  • نسخة أولى يُقصد رميها
  • إعادة قراءة كوده هو في جلسة منفصلة

العمود الأيمن لا يعني أن النموذج لا يستطيع؛ بل يعني أن على إنسان أن يقبل مخرجاته أو يرفضها.

أربعة أشياء تنكسر في تطبيق كتبه نموذج

هذه الأربعة ليست مكتوبة عن تخمين؛ فلكل واحد مصدر، ومصدر كل واحد كلام الشركة نفسها التي تبيع الأداة.

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

الثاني، الصلاحية التي لم يكتبها أحد. الكود المولَّد يبني المسار المتفائل كاملاً عادةً ولا يبني المسار المتشائم. وقائمة OWASP Mobile Top 10 تعطي المرتبة الأولى لسوء استعمال بيانات الاعتماد وتقيّم شيوعه شائعاً واكتشافه سهلاً وأثره شديداً؛ أي أن هذه الفئة من الأخطاء تقع كثيراً وتُوجد بسهولة، وهو مزيج سيئ. وأول سؤال يُطرح على كود مولَّد هو هذا: أين فُحص أن هذا المستخدم مسموح له بهذا؟

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

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

أربعة مواضع تبدو فيها مخرجات النموذج كاملة وهي ليست كذلك

  • مفتاح في المكان الخطأ

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

  • صلاحية غير مفحوصة

    المسار المتفائل كامل ولا يسأل في أي موضع إن كان هذا المستخدم مسموحاً له.

  • كود بلا صاحب

    قطع من أجوبة عدة بلا نمط مشترك وبلا من يعرف السبب.

  • ترخيص غير واضح

    توجد أداة لفحص التطابق مع الكود العام لكن كونها مشتعلة إعداد.

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

الترتيب الصحيح: المواصفات أولاً ثم الكود

البنود الأربعة أعلاه تشترك في جذر واحد وهو ليس تقنياً: طُلب من نموذج أن يكتب كوداً ولمّا يكن أحد قد اتخذ القرارات بعد. والنموذج لا يقرر بل يملأ الفراغ، ويملؤه بأكثر ما رآه شيوعاً.

فغيّر الترتيب. ثلاث تمريرات بهذا الترتيب، ولا تُسقط واحدة.

التمريرة الأولى هي المواصفات ولا كود فيها: قائمة القدرات بلغة بسيطة، وشكل البيانات، ومن يرى ماذا ويغيّر ماذا. وإن كنت قرأت ما هو الباك إند في التطبيق فهذا هو جدول الصلاحيات، وهذا مكانه بالضبط، قبل التوليد.

والتمريرة الثانية هي التوليد، ومدخلها مخرجات التمريرة الأولى لا وصفك الشفهي. والفرق بين الاثنين كبير: فحين تكون قائمة القدرات وشكل البيانات أمام النموذج لم يبقَ شيء للتخمين، والكود الذي ينتجه قابل للمقارنة بوثيقة.

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

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

ورقة مراجعة الكود المولَّدفي جلسة منفصلة عن التوليد

قبل إدخال الكود إلى المشروع

  • تستطيع قول ما تفعله هذه القطعة في جملة واحدة
  • حيثما تتغير البيانات تُفحص صلاحية المستخدم
  • لا مفتاح ولا كلمة سر في الكود إلا ما هو عام
  • لكل طلب شبكة حالة خطأ ومهلة

هذه تعني لا تقبله بعد

  • مبلغ أو دور أو مخزون يأتي من جهة العميل
  • الكود يستعمل مكتبة لم تسمع باسمها أصلاً
  • المراجعة أجراها النموذج نفسه في الجلسة نفسها
  • لا أحد يعرف لماذا هذه القطعة هنا

المسار السريع مع الذكاء الاصطناعي

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

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

وصفة جاهزة للنسخ

--- التمريرة 1: المواصفات، بلا كود ---
أريد بناء هذا التطبيق:
{وصف بسيط للتطبيق بلغة عادية}

لا تكتب أي كود. أعطني:
1) قائمة الشاشات، ولكل شاشة جملة عمّا يُفعل بها.
2) شكل البيانات: الجداول أو المجموعات والحقول ولأي مستخدم يعود كل سطر.
3) جدول الصلاحيات: لكل دور مستخدم، ماذا يرى وماذا يغيّر، كل خانة بجملة كاملة.
4) قائمة اسمها «أسئلة ينبغي أن أسألها» لكل فجوة. ولا تملأ الفجوات.

--- التمريرة 2: التوليد من الوثيقة ---
هذه وثيقة المواصفات وقد صححتها بنفسي:
{مخرجات التمريرة 1 بعد التصحيح}

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

--- التمريرة 3: المراجعة في جلسة جديدة ---
هذا كود تطبيق. أنت لم تكتبه ولا تاريخ لك معه.
{الكود}

أجب عن هذه الأسئلة الأربعة فقط، كل واحد بأرقام الأسطر:
1) أين افتُرض أن إدخال المستخدم صحيح؟
2) أين تتغير بيانات دون فحص صلاحية المستخدم؟
3) ما الموجود في الكود وينبغي أن يكون في الإعدادات؟
4) أي طلب شبكة بلا مهلة أو بلا حالة خطأ؟

وإن لم تجد حالة لسؤال فاكتب «لم تُوجد حالة». ولا تضف شيئاً ولا تكتب كوداً مصححاً.

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

الذكاء الاصطناعي في هذا العمل

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

أدوات تساعد فعلا

  • Claude Code ينفع للتمريرتين الثانية والثالثة على المشروع نفسه، لأنه يرى الملفات ويستطيع إعطاء أرقام الأسطر. ويعمل على حساب أنثروبيك نفسه وإيران ليست في قائمة الدول المدعومة.
  • Claude مناسب لتمريرة المواصفات ولمراجعة الكود في جلسة جديدة. وإيران ليست في أي من قائمتي الدول المدعومة لدى أنثروبيك. قرأنا ذلك في صفحة أنثروبيك نفسها لا بقياس شبكي.
  • Gemini مجدٍ اقتصادياً للتمريرة الثانية وللأعمال المتكررة على الشاشات. وصفحة غوغل نفسها تقول إن تطبيق جيميناي على الويب يعمل في أكثر من مئتين وثلاثين دولة ومنطقة، وإيران ليست في تلك القائمة.

اين ينقلب ضدك

الخطر الأساسي في هذا الدرس ليس علة بل عادة: قبول كود لم يقرأه أحد. فثلاثة من الأربعة في القسم الثالث تُوجد كلها بمراجعة إنسان ولا يوجد أي منها باختبار آلي. فالقاعدة التي نقترحها ليست قاعدة برمجة بل قاعدة فريق: لكل قطعة كود شخص قبِلها ويستطيع شرحها ولو لم يكتبها.
والخطر الأوضح هو المفتاح ومصدره صفحة غوغل نفسها: فمفتاح فايربيس عام ووضعه في الكود آمن، لكن الصفحة نفسها تقول صراحةً إن واجهة مطوّر جيميناي يجب ألا تكون أبداً في قائمة السماح لمفتاح متاح للعموم. والنموذج الذي ينفذ «ضع المفاتيح في ملف إعدادات التطبيق» بلا بصيرة يرى الاثنين شيئاً واحداً. فكلما وضعت مخرجات نموذج مفتاحاً في مكان، اسأل نفسك إلامَ يعطي هذا المفتاح وصولاً وماذا يستطيع غريب يملكه أن يفعل.

المصادر: Firebase: learn about using and managing API keys GitHub Docs: Copilot code referencing OWASP Mobile Top 10: M1 improper credential usage Anthropic: supported countries Google: where Gemini Apps are available

حدود هذه النصيحة

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

من عملنا نحن

أرقام القسم الأول عددناها اليوم على إضافتنا نحن وتتكرر بثلاثة أوامر. داخل مجلد rgb-freelance: ملفات PHP في templates تبلغ معاً 3231 سطراً، وملفات PHP في includes تبلغ 11597 سطراً، وملف CSS مع ستة ملفات جافاسكريبت تبلغ 3135 سطراً. وما أوضحه لنا هذا العد هو هذا: الجزء الذي يتحدث عنه الجميع في عرض المنتج أقل من خُمس الكود المكتوب. وقرينة من قسم التعلم هذا بلغت النتيجة نفسها: مدقق هذه الدروس بعينها، الدالة rgbl_validate_lesson، يحمل ثلاثاً وعشرين قاعدة، وإحداها ترفض أي درس بلا كتلة حدود أو كتلة تجربة مباشرة. وقد جعلنا هاتين الكتلتين إلزاميتين من البداية لهذا السبب بالضبط: فهما بالضبط الشيئان اللذان يفتقدهما نص مولَّد افتراضياً.

اسئلة متابعة حقيقية

هل يمكن بناء تطبيق بالذكاء الاصطناعي دون معرفة البرمجة؟

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

هل في الكود المولَّد بالذكاء الاصطناعي مشكلة ملكية؟

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

أيُفضَّل أن تكتب النماذج التطبيق كله أم قطعه فقط؟

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