Agent Frameworks

إتقان DSPy: من هندسة الأوامر إلى التحسين البرمجي لنماذج اللغة الكبيرة

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

ما هو DSPy؟

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

المفاهيم الأساسية: التواقيع والوحدات

الوحدة الأساسية لبناء DSPy هي Signature (التوقيع). يحدد التوقيع حقول المدخلات والمخرجات لاستدعاء نموذج اللغة. على سبيل المثال، إذا كنت تريد استخراج المشاعر من مراجعة، فإنك تحدد التوقيع على النحو التالي: "review -> sentiment".

import dspy

class SentimentClassifier(dspy.Module):
    def __init__(self):
        super().__init__()
        self.predict_sentiment = dspy.Predict("review, aspect -> sentiment")

    def forward(self, review, aspect="overall"):
        result = self.predict_sentiment(review=review, aspect=aspect)
        return dspy.Prediction(sentiment=result.sentiment)

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

قوة التحسين

هنا يلمع DSPy. مع هندسة الأوامر التقليدية، تخمن أي الأمثلة تعمل بشكل أفضل. مع DSPy، تقوم بتعريف مقياس (دالة تقيّم المخرجات) ومحسّن. ثم يبحث المحسّن عن أفضل مجموعة من الأمثلة القليلة وتعليمات الأمر التي تعظم مقياسك.

# Define a metric to evaluate performance
def exact_match(example, pred, trace=None):
    return example.sentiment == pred.sentiment

# Initialize the model
lm = dspy.OpenAI(model="gpt-4")
dspy.configure(lm=lm)

# Create the optimizer
optimizer = dspy.BootstrapFewShot(metric=exact_match)

# Compile the program
compiled_classifier = optimizer.compile(
    SentimentClassifier(),
    trainset=train_data
)

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

تطبيقات عملية

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

خاتمة

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

Share: