أصبحت النماذج اللغوية الكبيرة (LLMs) ومهام سير العمل الوكيلة ومخازن المتجهات أكثر قوة بشكل مستمر، كما ازدادت شعبية أطر العمل التي تسهِّل تطوير تطبيقات الذكاء الاصطناعي. يُعَد إطار عمل DSPy مجموعة أدوات توفِّر وحدات للأغراض العامة تستبدل هندسة المطالبات وإدخال اللغة الطبيعية مباشرةً باستخدام تكوين عبر كود Python.
بشكل عام، يتطلب العمل مع النماذج اللغوية الكبيرة أو نماذج الأساس هندسة مطالبات دقيقة، حيث يعمل المستخدم على تعديل مطالبات النص للحصول على المخرجات الصحيحة. رغم أن هذا النهج قد يكون فعَّالًا، فإنه يستغرق وقتًا طويلًا ومعرض للأخطاء، كما أنه ينشئ سلاسل أدوات هشة تحتاج إلى تحديث عند إصدار إصدارات جديدة من النموذج. تركِّز أطر العمل الشائعة مثل نماذج لغة السلسلة LangChain لبناء التطبيقات وLlamaIndex على تحسين قدرات البحث داخل النصوص. مع ذلك، لا يزال المطورون بحاجة إلى الخبرة في الضبط الدقيق للمطالبات والوقت لاختبار كل مطالبة للحصول على المخرجات المطلوبة. يعمل DSPy على تبسيط عملية ضبط المطالبات هذه باستخدام نهج برمجي لتوجيه وتحديد سلوك النموذج اللغوي.
يركِّز DSPy على أتمتة تحسين بناء المطالبات. لاستبدال أساليب اختراق المطالبات ومولِّدات البيانات الاصطناعية لمرة واحدة، يوفر DSPy وحدات تحسين عامة، وهي خوارزميات تحدِّث المَعلمات في برنامجك. كلما أجريت تعديلًا لكود أو البيانات أو الافتراضات أو المقاييس، تمكَّنت من إعادة تجميع برنامجك، وسيحسِّن DSPy المطالبة لإنشاء مطالبات جديدة فعَّالة تتوافق مع التغييرات.
أحيانًا يتخيل البعض أن تحسين المطالبات التلقائي يعني إنشاء نظام يعمل فيه النموذج اللغوي الكبير (LLM) على انتقاد وتحسين المطالبات التي ينشئها المستخدم. هذه ليست الطريقة الأكثر فاعلية لاستخدام النماذج اللغوية الكبيرة. يستفيد DSPy من قدرة النماذج اللغوية الكبيرة على توليد الأفكار لإنشاء المطالبات الخاصة بها. بعد ذلك، يختبر هذه الاختلافات باستخدام مجموعة مقاييس التقييم لمعرفة إذا ما كانت تحل المشكلة بشكل أفضل. وإذا لم يكن أداؤها أفضل عدديًا على مقياس معين من قِبَل المستخدم، يتم التخلص من المطالبات الجديدة. يشبه ذلك الخوارزميات التطورية، حيث يتم تقييم المطالبات من حيث ملاءمتها وتحسينها بشكل تكراري.
يمكن أن يكون DSPy مفيدًا في عدة أنواع مختلفة من مهام سير العمل والسيناريوهات. من بين أكثر الأساليب استخدامًا: التوليد المعزز بالاسترجاع، والإجابة عن الأسئلة متعددة الخطوات، وتلخيص المستندات.
تُحاكي المطالبة بسلسلة الأفكار (CoT) عمليات التفكير البشرية من خلال مطالبة النموذج بتقسيم المهام المعقدة إلى سلسلة من الخطوات المنطقية للوصول إلى الحل النهائي. يتم إدخال خطوات التفكير هذه في نافذة السياق الخاصة بالنموذج، ما يوفر مزيدًا من الأسس في المهمة المطروحة وغالبًا ما تؤدي إلى استجابات أفضل حتى في السيناريوهات المعقدة. يساعد DSPy من خلال جَعْل النموذج اللغوي يولِّد مطالبات واستراتيجيات سلسلة الأفكار، ثم يختبرها مع النموذج لإنتاج أكثر المطالبات فاعلية لسلسلة الأفكار (CoT) للنموذج المعنيّ.
التوليد المعزز بالاسترجاع (RAG)
يُعَد التوليد المعزز بالاسترجاع (RAG) أسلوبًا يُتيح للنماذج اللغوية الكبيرة الوصول إلى مجموعة كبيرة من المصادر المعرفية، والاستعلام في مخزن المعرفة الخاص بها للعثور على مقاطع أو محتوى ذي صلة، ومن ثم إنتاج استجابة مصقولة ودقيقة. يضمن RAG أن تتمكن النماذج اللغوية الكبيرة من استخدام المعرفة في الوقت الحقيقي بشكل ديناميكي، حتى إذا لم يتم تدريبها في الأصل على الموضوع، وتقديم إجابات صحيحة. تؤدي هذه القدرة الإضافية إلى زيادة التعقيد عند إعداد مسارات RAG. يقدِّم DSPy نهجًا سلسًا لإعداد مسارات المطالبات، سواء لتوليد مطالبات فعَّالة (ضبط المطالبات) أو، في حالة النماذج الصغيرة، لضبط أوزان النموذج نفسها.
يمكن تحسين مسارات RAG باستخدام DSPy بطريقتين: باستخدام أمثلة مصنّفة أو باستخدام أمثلة تمهيدية. الأمثلة المصنّفة هي ببساطة أمثلة موجودة مسبقًا تم تصنيفها يدويًا، وتُستخدم لتدريب نموذج الطالب مباشرةً. في سياق DSPy، تعني الأمثلة التمهيدية استخدام نموذج لغوي ضمن نموذج معلم وطالب. يُنشئ المعلم أمثلة تدريبية جديدة استنادًا إلى عدد قليل من المطالبات المقدَّمة من قِبَل المستخدم. تُستخدم هذه الأمثلة التمهيدية بعد ذلك إلى جانب الأمثلة المصنّفة يدويًا أو بدلًا منها لتدريب وحدة الطالب حتى تتمكن من تقديم الإجابات الصحيحة. ثم يتم تحديث المطالبات التي تُنشئ الاستجابات الصحيحة بشكل متكرر عبر مسار DSPy.
الإجابة عن الأسئلة متعددة الخطوات
في كثير من الأحيان، لا يكفي استعلام بحث واحد لمهمة الإجابة عن الأسئلة المعقدة. تتألف مجموعة البيانات الشهيرة HotPot Question Answering من أسئلة تتطلب تحليلًا متعدد الخطوات واسترجاع معلومات متعددة قبل إمكانية الإجابة عنها. على سبيل المثال: "في أي عام سافر بيل نيلسون كمتخصص حمولة على مكوك فضاء تم إطلاقه لأول مرة؟" تتطلب هذه الإجابة معرفة أن بيل نيلسون سافر على مكوك الفضاء كولومبيا، ثم القدرة على تحديد أن كولومبيا أقلعت لأول مرة في عام 1981.
النهج القياسي لمواجهة هذا التحدي في أدبيات التوليد المعزز بالاسترجاع هو بناء نظام بحث متعدد الخطوات. تقرأ هذه الأنظمة النتائج المستردة ثم تعمل على توليد استعلامات إضافية لجمع معلومات إضافية عند الحاجة قبل الوصول إلى الإجابة النهائية. باستخدام DSPy، يمكنك إنشاء النظام نفسه في بضعة أسطر من التعليمات البرمجية بطريقة قوية تُتيح لك تحديث النماذج وإعادة تشغيل المسار الخاص بك ببساطة.
يعمل التلخيص على اختصار نص طويل إلى نسخة أقصر مع الاحتفاظ بالمعلومات الأساسية والأفكار الرئيسية. إنها مهارة قوية يجب أن يتقنها النموذج اللغوي الكبير، مع تطبيقات تتراوح بين إنشاء ملخصات المقالات وتوليد تقارير مختصرة من مستندات طويلة.
يمثِّل تقييم جودة الملخصات التي تنتجها النماذج اللغوية تحديات كبيرة. على عكس المهام ذات الإجابات الصحيحة أو الخطأ الواضحة، غالبًا ما تكون جودة التلخيص ذاتية وتعتمد على السياق. يحتاج النموذج إلى تحقيق التوازن بين الاحتفاظ بالمعلومات والإيجاز مع الحفاظ على نغمة النص الأصلي والنية وضمان الدقة الواقعية دون حدوث أخطاء. يمثِّل التكيف مع أنواع مختلفة من المواد المصدرية وأغراض الملخص تحديًا إضافيًا. يُتيح لك DSPy استخدام البيانات المصنّفة لضبط مطالبات التلخيص للحصول على أفضل الإجابات الممكنة.
لدى DSPy قاموسه ومصطلحاته الخاصة، وفهم بعض هذه المصطلحات الرئيسية سيساعد على توضيح البنية العامة للنظام.
التجميع: هذه العملية هي الطريقة التي يترجم بها DSPy برنامجًا قائمًا على Python إلى تعليمات يمكن للنموذج اللغوي فهمها وتنفيذها بكفاءة.
التوقيع: هذه فئة تحدِّد أنواع المدخلات والمخرجات للوحدة، ما يضمن التوافق بين الوحدات المختلفة في برنامج DSPy. بعض أمثلة التوقيعات تشمل مهام مثل إدخال سؤال وإخراج الاستدلال والإجابة، أو أخذ مستند كمدخل وإخراج ملخص له.
أداة التحسين: يعمل هذا العنصر في DSPy على ضبط البرنامج المجمَّع ليتوافق مع النموذج اللغوي الذي تستخدمه، مثل GPT-3.5 Turbo أو GPT-4.0 أو Llama 3.1. تضمن أدوات التحسين تحقيق أقصى قدر من الأداء والدقة لبرنامجك. في الإصدارات القديمة من DSPy، كان يُطلق على هذه العناصر اسم أجهزة عرض النصوص (teleprompters). تتكون برامج DSPy من استدعاءات متعددة للنماذج اللغوية التي يتم تكديسها معًا كوحدات DSPy. تحتوي كل وحدة DSPy على ثلاثة أنواع من المَعلمات الداخلية: أوزان النموذج اللغوي، والتعليمات التي من المفترض أن تتبعها، وتخزين العروض التوضيحية لسلوك المدخلات/المخرجات.
عند تزويدها بمقياس، يُنشئ DSPy مطالبات محسَّنة باستخدام جميع الأوزان والتعليمات وسلوك النموذج من خلال خوارزميات تحسين متعددة المراحل. يمكن أن تجمع هذه بين الانحدار التدرجي (لأوزان النموذج اللغوي) والتحسين المدفوع بالنموذج اللغوي، أي لتصميم أو تحديث التعليمات، ولإنشاء الأمثلة التوضيحية أو التحقق منها. تُشبه العروض في DSPy أمثلة المطالبات بخطوات قليلة، لكنها أقوى بكثير. يمكن إنشاؤها من الصفر استنادًا إلى برنامجك، ويمكن تحسين عملية إنشائها واختيارها بعدة طرق فعَّالة.
في كثير من الحالات، يؤدي التجميع إلى مطالبات أفضل من الكتابة البشرية؛ لأن أدوات التحسين يمكنها تجربة المزيد من الأشياء، وبشكل أكثر منهجية، وضبط المقاييس مباشرةً أكثر مما يستطيع الإنسان.
المسار: "المسار" هو الطريقة التي يُشير بها DSPy إلى سلسلة من الوحدات المتصلة التي تعمل معًا لتحقيق مهمة معقدة. على سبيل المثال، قد يعالج أحد المسارات مقالًا لتلخيصه، ثم يترجمه من لغة المصدر إلى اللغة المستهدفة، ثم يولِّد أسئلة حوله باللغة المستهدفة.
المقاييس: يحدِّد DSPy عدة مقاييس مختلفة لقياس أداء المخرجات. على سبيل المثال، قد تحتاج إلى أن يكون الإخراج مطابقًا تمامًا للتصنيف الخاص بك. في حالات أخرى، قد تكون المطابقة الجزئية مناسبة تمامًا لاحتياجاتك. المقياس المستخدم بشكل شائع والذي يوفِّره DSPy هو Semantic F1. يقيس هذا المقياس مدى احتواء الإجابة على المعلومات الموجودة في التصنيف، ومدى قلة البيانات الزائدة التي لا توجد في الإجابة المستهدفة المصنّفة. إذا كنت بحاجة إلى طريقة مختلفة لقياس الأداء، فيمكنك أيضًا توفير المقاييس المخصصة الخاصة بك.
يُعَد البدء باستخدام DSPy أمرًا بسيطًا مثل استدعاء pip install dspy-ai. لا يلزم وجود أجهزة خاصة حيث يمكن استخدام معظم النماذج في السحابة من خلال واجهة برمجة التطبيقات أو تشغيلها محليًا. يمكن تشغيله محليًا أو على بيئات دفاتر ملاحظات مستضافة مثل Google Colab أو Watson Studio.
يتألف مسار DSPy النموذجي للتوليد المعزز بالاسترجاع من نموذج لغوي ونموذج استرجاع. على سبيل المثال، للعمل مع OpenAI GPT-3.5 Turbo كنموذج لغوي وColBERTV2 كنموذج استرجاع، سنقوم بتكوين DSPy على النحو التالي:
التوقيعات هي قوالب تُتيح لك ضبط كيفية هيكلة حقول الإدخال والإخراج لكلٍّ من النموذج اللغوي ونموذج الاسترجاع. على سبيل المثال، يوضِّح مقتطف الشيفرة هذا بناء الجملة لمطالبة النموذج اللغوي بالسياق ونموذج الاسترجاع بالبنية:
نعمل على إدراج أوصاف قصيرة لحقول السياق والإجابة لتحديد إرشادات أكثر وضوحًا حول ما سيتلقاه النموذج وما يجب أن يولِّده.
بمجرد تحديد التوقيعات الخاصة بك، يمكنك تشغيل برنامجك وإنشاء مطالبات مثالية لمهمتك باستخدام أداة تحسين مناسبة لمهمتك. في DSPy. هذه العملية تُعرَف باسم التجميع. يؤدي تجميع البرنامج إلى تحديث المَعلمات المخزنة في كل وحدة. في معظم السيناريوهات، يكون ذلك في المقام الأول في شكل جمع واختيار العروض التوضيحية الجيدة لتضمينها في المطالبة.
يتطلب التجميع:
• مجموعة تدريب أو أمثلة تمهيدية.
• مقياسًا للتحقق من الصحة. في سيناريو RAG، ستكون هذه طريقة لقياس مدى دقة الإجابة المتوقعة وأن السياق المسترجع يحتوي على الإجابة.
• أداة تحسين مخصصة لإنشاء المطالبات لاختبارها. على سبيل المثال، يمكن استخدام أداة التحسين BootstrapFewShot لإنشاء مطالبات ثم اختبار هذه المطالبات التي تم إنشاؤها.
لتجميع برنامج DSPy، يمكنك تكوين النماذج التي تريد استخدامها وتمريرها إلى طريقة التجميع لأداة التحسين التي تم تحديدها. على سبيل المثال، سيحتوي برنامج تطبيق RAG على نموذج لغوي ونموذج استرجاع. سيتم تمريرها بعد ذلك إلى طريقة التجميع وستستخدم أداة التحسين البيانات المستردة لتعيين سياق لإنشاء اللغة.
يمكنك بعد ذلك تحديد المقياس لتقييم كلٍّ من نموذج الاسترجاع والنموذج اللغوي. بعد ذلك، يتم إعطاء هذا التعريف الخاص بالمقياس إلى أداة تحسين مثل BootstrapFewShot أو LabeledFewShot لاستخدامه أثناء تقييم المطالبات التي يولِّدها النموذج اللغوي. وأخيرا، تعمل أداة التحسين على تجميع وحدة نمطية مخصصة تحتوي على طريقة إعادة التوجيه التي حددتها مع مجموعة بيانات التدريب.
عادةً ما يتطلب اختيار أداة التحسين المناسبة بعض التجربة والخطأ، لكن هناك إرشادات يمكن اتِّباعها:
• إذا كان لديك عدد قليل جدًا من الأمثلة (حوالي 10)، فقد تبدأ باستخدام BootstrapFewShot لتوليد بيانات تدريب جديدة.
• إذا كان لديك المزيد من البيانات، مثل 50 مثالًا أو أكثر، فجرِّب استخدام BootstrapFewShotWithRandomSearch لتوليد بيانات تدريب جديدة على أجزاء عشوائية من بياناتك التدريبية.
إذا كنت بحاجة إلى برنامج فعَّال جدًا، يمكنك ضبط نموذج لغوي صغير (LLM) لمهمتك باستخدام BootstrapFinetune.
بعد تجميع البرنامج ومقارنة المقاييس الخاصة بك، قد تكون سعيدًا بالنتائج. قد تجد أيضًا أنك لا تحب شيئًا ما في البرنامج النهائي أو النتائج وفقًا للمقاييس التي اخترتها. التطوير التكراري هو المفتاح. يوفر DSPy أدوات للقيام بذلك بشكل تدريجي من خلال تكرار البيانات الخاصة بك، وتحديث بنية برنامجك، والمقاييس وأداة التحسين التي اخترتها.
يُعَد DSPy مفتوح المصدر؛ لذا يمكنك الاطِّلاع على الكود ومتابعة تقدُّم عملية التطوير. تحتوي المستندات الموجودة في موقع StanfordNLP على Github على الوثائق والعديد من البرامج التعليمية والعروض التوضيحية خطوة بخطوة حول كيفية البدء باستخدام DSPy.