منذ 5 سنوات، أطلقنا Gradio كمكتبة Python بسيطة للسماح للباحثين في جامعة ستانفورد بعرض نماذج الرؤية الحاسوبية بسهولة باستخدام واجهة الويب.
اليوم، يتم استخدام Gradio من قبل أكثر من مليون مطور شهريًا لإنشاء تطبيقات الويب المدعمة بالذكاء الاصطناعي ومشاركتها. يتضمن ذلك بعضًا من أكثر المشاريع مفتوحة المصدر شهرةً على الإطلاق، مثل Automatic1111 وOobaooga’s Text Generation WebUI وDall-E Mini وLLaMA-Factory.

كيف وصلنا إلى هنا؟ كيف استمرت Gradio في النمو في المجال المزدحم للغاية لمكتبات Python مفتوحة المصدر؟ أتلقى هذا السؤال كثيرًا من الأشخاص الذين يقومون ببناء مكتباتهم مفتوحة المصدر. يلخص هذا المنشور بعض الدروس التي تعلمتها خلال السنوات القليلة الماضية:
- استثمر في البدائيات الجيدة، وليس التجريدات عالية المستوى
- تضمين الانتشار مباشرة في مكتبتك
- التركيز على مكانة (متنامية).
- يجب أن تكون خريطة الطريق الوحيدة الخاصة بك هي التكرار السريع
- تعظيم الطرق التي يمكن للمستخدمين من خلالها استهلاك مخرجات مكتبتك
1. استثمر في البدائيات الجيدة، وليس في التجريدات عالية المستوى
عندما أطلقنا Gradio لأول مرة، قدمنا فصلًا دراسيًا واحدًا رفيع المستوى فقط (gr.Interface)، الذي أنشأ تطبيق ويب كاملاً من دالة بايثون واحدة. لقد أدركنا بسرعة أن المطورين يريدون إنشاء أنواع أخرى من التطبيقات (مثل سير العمل متعدد الخطوات، وروبوتات الدردشة، وتطبيقات البث)، ولكن عندما بدأنا في سرد التطبيقات التي أراد المستخدمون إنشاؤها، أدركنا ما يتعين علينا القيام به: الانتقال إلى مستوى أقل.
بدلاً من بناء العديد من الفئات عالية المستوى لدعم حالات الاستخدام المختلفة، قمنا ببناء واجهة برمجة تطبيقات منخفضة المستوى تسمى Gradio Blocks والتي تتيح للمستخدمين تجميع التطبيقات من المكونات المعيارية والأحداث والتخطيطات. على الرغم من كونها المزيد من العمل للاستخدام بشكل عام، gr.Blocks يمثل اليوم 80% من استخدام Gradio، بما في ذلك التطبيقات المشهورة للغاية المذكورة أعلاه.
مع وجود فريق صغير، فإن التركيز على التجريدات ذات المستوى المنخفض يعني بالضرورة أننا لا نستطيع مطاردة العديد من التجريدات المغرية وعالية المستوى. لكن هذا التركيز أنقذنا من مأزقين شائعين:
-
فخ التخصيص والصيانة: التجريدات عالية المستوى سهلة الاستخدام، لكن المستخدمين يطلبون معلمات إضافية لتخصيصها، مما يؤدي بدوره إلى زيادة عبء الصيانة نظرًا لأن كل تجريد ومعلمة تحتاج إلى التنفيذ والصيانة والاختبار لتجنب الأخطاء.
-
وهم الإنتاجية: يبدو أن استخدام التجريدات عالية المستوى يتطلب عملاً أقل، حتى يحتاج المستخدم إلى وظيفة غير مدعومة (والتي قد يكون من الصعب التنبؤ بها في بداية المشروع)، مما يجبر المطور على إجراء عملية إعادة كتابة مكلفة.
المشكلة الأولى النفايات وقتنا كمشرفين على Gradio، في حين أن المشكلة الثانية تضيع وقت مستخدمينا. حتى يومنا هذا، يتضمن Gradio فقط تجريدين عاليي المستوى (gr.Interface و gr.ChatInterface) والتي تم بناؤها بنفسها بالكتل.
إن ميزة وجود عناصر أولية جيدة هي أكثر دراماتيكية في عصر البرمجة بمساعدة الذكاء الاصطناعي، حيث نجد أن ماجستير إدارة الأعمال جيد بشكل عام في التمشيط من خلال التوثيق وبناء تطبيقات معقدة من البدائيات (راجع جميع الألعاب التي تم إنشاؤها باستخدام البدائيات) three.js على سبيل المثال). لا يستغرق الأمر الكثير من الوقت الإضافي لكتابة تعليمات برمجية منخفضة المستوى إذا كان الذكاء الاصطناعي هو من يكتب لك التعليمات البرمجية.
2. التركيز على مكانة (متنامية).
أفضل سفير لمكتبتك ليس أنت، بل المستخدم المتحمس. ويترتب على ذلك أنه يجب عليك إيجاد طرق للمستخدمين لمشاركة مكتبتك أو منتجاتها كجزء من سير العمل الخاص بهم. كان النمو المبكر لـ Gradio مدعومًا بميزة “مشاركة الروابط” (التي أنشأت رابطًا عامًا مؤقتًا لتطبيق Gradio الخاص بك في سطر واحد من التعليمات البرمجية). بدلاً من القلق بشأن تعبئة التعليمات البرمجية الخاصة بهم أو استضافتها على خادم ويب باستخدام النوع المناسب من الحوسبة، يمكن لمستخدمي Gradio مشاركة تطبيقاتهم مع زملائهم على الفور.
بعد الانضمام إلى Hugging Face، استفدنا أيضًا من كوننا واجهة المستخدم القياسية لـ Hugging Face Spaces، والتي يستخدمها مجتمع أبحاث التعلم الآلي على نطاق واسع. اجتذبت المساحات الأكثر انتشارًا ملايين الزوار، مما عرّض المطورين لـ Gradio، الذين بدورهم شاركوا وأنشأوا تطبيقات Gradio الخاصة بهم، باستخدام تلك المساحات نفسها (التي كان رمزها متاحًا للعامة) كمورد لمعرفة كيفية استخدام Gradio.
3. إنشاء حالة استخدام متخصصة (متنامية).
في وقت مبكر، واجهنا قرارًا حاسمًا: هل يجب أن يكون Gradio إطار عمل ويب Python للأغراض العامة، أم يجب أن نركز بشكل خاص على إنشاء تطبيقات ويب للتعلم الآلي؟ لقد اخترنا الخيار الأخير، وهذا ما أحدث الفارق.
في النظام البيئي المزدحم لمكتبات الويب Python، يُسألنا كثيرًا، “كيف يختلف Gradio عن X؟” إن إجابتنا الموجزة – وهي أن Gradio مُحسّن لتطبيقات الويب للتعلم الآلي – لا تُنسى ودقيقة بشكل أساسي. يأتي كل تطبيق Gradio مزودًا بميزات مناسبة بشكل خاص لسير عمل ML، مثل قائمة الانتظار المضمنة التي يمكنها إدارة مهام ML طويلة الأمد بكفاءة، حتى مع الآلاف من المستخدمين المتزامنين. تم تصميم المكونات التي صممناها خصيصًا لحالات استخدام تعلم الآلة. من ناحية أخرى، لفترة طويلة، لم يتضمن Gradio حتى ميزات مثل أزرار الارتباط، وذلك ببساطة لأن مستخدمينا الأساسيين لم يحتاجوا إليها أبدًا. من خلال تضييق نطاق تركيزنا، سرعان ما أصبح Gradio هو الاختيار المفضل بين مطوري التعلم الآلي – “واجهة المستخدم الافتراضية للذكاء الاصطناعي”.
وبطبيعة الحال، استفدنا بشكل كبير من اختيار المجال الذي كان في حد ذاته ينمو. لقد أفادتنا الرياح المعاكسة الأخيرة التي دفعت كل الأشياء المتعلقة بالذكاء الاصطناعي بشكل كبير، ومن المحتمل أننا لم نكن لنشهد نفس النوع من النمو إذا ركزنا على علم البيانات أو لوحات المعلومات على سبيل المثال.
4. يجب أن تكون خريطة الطريق الوحيدة الخاصة بك هي التكرار السريع
على عكس بعض المكتبات الأخرى، لا تقوم Gradio بنشر خرائط الطريق. وبدلاً من ذلك، فإننا نتتبع الاتجاهات الناشئة في التعلم الآلي ونشحن وفقًا لذلك. في البرامج مفتوحة المصدر بشكل عام، والذكاء الاصطناعي على وجه التحديد، تعد ميزات الشحن بناءً على احتياجات المجتمع (وإيقاف الميزات التي لم تعد هناك حاجة إليها) أمرًا أساسيًا للنمو المستمر. وكمثال ملموس، قمنا في الإصدارات الأولى من Gradio ببناء وظائف محددة للسماح للمطورين بإظهار “تفسير” نماذج التعلم الآلي الخاصة بهم – حيث كانت هذه حالة استخدام شائعة جدًا في الفترة ما بين 2020 و2021. ومع تضاؤل الاهتمام بالترجمة الفورية، فقد أهملنا ذلك وبذلنا جهودنا بدلاً من ذلك في بث الصوت/الفيديو والميزات المتعلقة بالدردشة.
عمليتنا الداخلية لا مركزية أيضًا. يتم تشجيع كل من المهندسين والمدافعين عن المطورين الأحد عشر في فريق Gradio على تحديد الأفكار المؤثرة، وإنشاء النماذج الأولية بسرعة، والمشاركة مباشرة مع مجتمع المصادر المفتوحة عبر GitHub، وHugging Face، ووسائل التواصل الاجتماعي. يعيد كل عضو في الفريق هذه الأفكار إلى الفريق ونعمل باستمرار على بناء وإعادة بناء الإجماع حول الأفكار التي من المحتمل أن تكون مؤثرة بينما نواصل تطوير الاتجاهات الأكثر تأثيرًا.
5. تعظيم الطرق التي يمكن للمستخدمين من خلالها استهلاك مخرجات مكتبتك
عندما تقوم بإنشاء تطبيق Gradio و”تشغيله ()”، تحصل على تطبيق ويب يعمل في متصفحك. ولكن هذا ليس كل شيء – يمكنك أيضًا الحصول على نقطة نهاية واجهة برمجة التطبيقات (API) لكل وظيفة من وظائف Python، بالإضافة إلى الوثائق التي يتم إنشاؤها تلقائيًا لكل نقطة نهاية. يمكن استهلاك نقاط النهاية هذه عبر عملاء Python أو JavaScript الذين أنشأهم فريقنا، أو مباشرة باستخدام cURL.
السبب وراء قيامنا بذلك هو أننا نريد أن تكون كل دقيقة يقضيها المطور مع Gradio مفيدة إلى أقصى حد. يجب تشغيل تطبيق Gradio واحد محليًا أو نشره دون أي تغييرات في التعليمات البرمجية على Hugging Face Spaces أو على الخادم الخاص بك، أو دمجه في تطبيقات أكبر برمجيًا، أو حتى يتم تسخيره بواسطة وكلاء الذكاء الاصطناعي من خلال MCPs (المزيد حول ذلك قريبًا!). من خلال التركيز على الحد الأقصى من سهولة الاستخدام، نأمل أن يتمكن المطورون من الاستمرار في الحصول على المزيد والمزيد من مكتبة Gradio.
فصاعدا إلى 10 مليون!