
Project Lean
مدرب تغذية بالذكاء الاصطناعي
سبعة أسابيع من مستودع فارغ إلى مدرّب تغذية بالذكاء الاصطناعي على المتجرين.
- الدور
- تصميم وهندسة من البداية للنهاية
- المدة
- 7 أسابيع، 2026
- النوع
- تطبيق تدريب تغذوي بالذكاء الاصطناعي
- المنصات
- iOS و Android
التقنيات
المشكلة
يفشل تتبّع السعرات لسبب ممل: معظم من يتوقفون عن التتبّع لا يتخلّون عن الهدف، بل يتخلّون عن إدخال البيانات. يزيل Project Lean نصفَي هذا العبء. صوّب الكاميرا نحو الطبق بدل البحث في قاعدة بيانات أطعمة، واحصل على قراءة مدرّب لأنماطك بدل مجموع تراكمي.
كانت القيود حادة: منصتان تُطلقان في وقت واحد، ونموذج بيانات يجب أن يكون جديراً بالثقة من أول مستخدم، وفاتورة ذكاء اصطناعي تُحتسب مع كل مسح. سبعة أسابيع فصلت أول التزام برمجي عن الإصدار 1.1 على المتجرين، فكان على كل قرار معماري أن يستحق مكانه.
المنهجية
امسح وجبة، واحصل على أرقام حقيقية
يعمل خط المسح على Gemini Vision بمخطط JSON صارم مفروض على مستوى النموذج، فإما أن يُحلَّل الرد أو يفشل بوضوح. الإنتاج علّمنا الدروس المثيرة: كانت رموز التفكير المخفية في النموذج تستهلك ميزانية المخرجات بهدوء وتقطع JSON في منتصف النص، وحُلّت بتصفير ميزانية التفكير؛ ولا تقبل حزمة التطوير إشارة إلغاء، فصار سباق مع مؤقّت يحرس كل استدعاء؛ وحين يفشل المسح رغم إعادة محاولة واحدة، يتراجع التطبيق إلى الإدخال اليدوي بدل طريق مسدود. كل استدعاء يسجّل تكلفته أيضاً، لأن هذه الميزة تنفق مالاً مع كل ضغطة.

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

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

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

النتيجة
أُطلق الإصدار 1.0 على App Store، وتبعه 1.1 مع إطلاق Android على Google Play واشتراكات متعددة الخطط عبر Stripe، محصورة بالإمارات ومصر. ويتطور التطبيق في الإنتاج منذ ذلك الحين عبر تحديثات تصل مباشرة.
تحت السطح يقبع ما لا يلتقطه أحد في صورة: أهداف سعرات وبروتين تتكيّف وتعيد ضبط نفسها على متوسط وزن متحرك، ولوحة إدارة يستخدمها المدرّب البشري فعلاً لقراءة محادثات عملائه.
تريد شيئاً مشابهاً؟
أخبرنا بما تبنيه وسنعطيك تقييماً صادقاً للنطاق والجدول الزمني والتكلفة.