AI Observability

التقاط انحراف الأوامر: أتمتة اختبارات الانحدار لنماذج اللغة الكبيرة باستخدام Braintrust في CI/CD

تُقدّم دمج نماذج اللغة الكبيرة (LLMs) في التطبيقات الإنتاجية تحديًا فريدًا: النموذج غير حتمي. على عكس البرمجيات التقليدية، حيث يمر الاختبار أو يفشل بناءً على منطق صارم، يمكن أن تتفاوت مخرجات LLMs قليلاً مع كل تشغيل مع بقائها "صحيحة"، أو تتدهور جودتها بشكل خفي بسبب تعديلات طفيفة في الأوامر (Prompts). بدون اختبارات صارمة، يمكن أن تؤدي هذه التغيرات الدقيقة - التي تُعرف غالبًا بانحراف الأوامر (Prompt Drift) - إلى أعطال صامتة، وانخفاض ثقة المستخدم، وارتفاع التكاليف التشغيلية.

يستكشف هذا المقال كيفية تنفيذ سير عمل قوي لاختبارات الانحدار لأوامر LLMs باستخدام Braintrust، وهو مصمم خصيصًا لمراقبة وتقييم LLMs. سنُظهر كيف يمكنك دمج هذه العملية مباشرةً في خط CI/CD الخاص بك لضمان التحقق من كل تغيير في الأوامر مقابل معيار قياسي قبل النشر.

لماذا تفشل اختبارات الوحدة التقليدية مع LLMs

تعتمد اختبارات الوحدة التقليدية على التطابق الدقيق. بالنسبة لـ LLM، يكون التحقق من أن المخرجات تساوي "الطقس مشمس." هشًا. إعادة صياغة طفيفة إلى "إنه يوم مشمس." يجب أن تمر، لكن الاختبار التقليدي سيصنفها كفشل. علاوة على ذلك، LLMs حساسة للسياق، وإعدادات الحرارة (Temperature)، وحتى الإصدار المحدد من النموذج الأساسي. إذا قمت بتحديث نموذجك الأساسي من GPT-4 إلى إصدار أحدث، أو ضبطت أمر النظام الخاص بك للوضوح، فإنك تخاطر بكسر حالات حافة لم تغطيها الاختبارات السابقة.

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

إعداد سير عمل التقييم في Braintrust

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

فيما يلي مثال عملي على سكربت تقييم، evals.py، يختبر أمر تلخيص. يتحقق من مقياسين: الدقة (هل يحتوي على الحقائق الرئيسية؟) والنبرة (هل هي احترافية؟).

import braintrust
from braintrust import Task, Eval
from my_app.llm import generate_summary

# Define the scoring function
def score(output, input, metadata):
    # Use a judge LLM or heuristic to score the output
    accuracy = check_factuality(output, input['expected_facts'])
    tone = check_tone(output)
    
    return {
        "accuracy": accuracy,
        "tone": tone,
        "pass": accuracy > 0.8 and tone > 0.7
    }

# Initialize the Braintrust project
project = braintrust.Project("summarizer-eval")

# Create the task with the current prompt version
task = Task(
    name="v2.1_prompt_update",
    evals=[
        Eval(
            name="summarization_test",
            data=[
                {"input": "Long text here...", "expected_facts": ["fact1", "fact2"]},
                # ... load full dataset from CSV/JSON
            ],
            query=generate_summary,
            score=score
        )
    ]
)

# Run the evaluation
result = project.create(task=task)
print(f"Evaluation ID: {result.id}")

الدمج مع CI/CD: خطوة البوابة

القوة الحقيقية لهذا سير العمل هي البوابات الآلية. في إعدادات GitHub Actions أو GitLab CI الخاصة بك، يمكنك تشغيل سكربت التقييم هذا على كل طلب سحب (Pull Request) يعدّل مجلد prompts/ أو كود استدعاء LLM.

إذا انخفض متوسط الدرجة عن عتبة محددة (مثل نسبة نجاح 90%)، يفشل مهمة CI، مما يمنع الدمج. يعمل هذا كبوابة، مما يضمن عدم وصول أي انحدار في الأوامر إلى الإنتاج.

# .github/workflows/llm-regression.yml
name: LLM Regression Tests

on: [pull_request]

jobs:
  llm-eval:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      
      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          pip install braintrust
      
      - name: Set Braintrust Token
        run: |
          echo "BRAINTRUST_TOKEN=${{ secrets.BRAINTRUST_TOKEN }}" >> $GITHUB_ENV
      
      - name: Run Evaluation
        run: |
          python evals.py
      
      - name: Check Pass Rate
        run: |
          # Script to fetch results from Braintrust API and fail if < 90% pass
          python check_threshold.py --min-pass-rate 0.90

مراقبة الأداء في الإنتاج

بينما يمنع CI/CD الانحدارات قبل النشر، يمكن أن يحدث انحراف الأوامر أيضًا في الإنتاج بسبب التغيرات في توزيع بيانات المستخدم. تتيح لك ميزات المراقبة في Braintrust تسجيل مسارات الإنتاج (Traces) جنبًا إلى جنب مع بيانات التقييم الخاصة بك. من خلال مقارنة درجات تقييماتك غير المتصلة بالإنترنت مع درجات حركة الإنتاج الحية، يمكنك اكتشاف متى يبدأ النموذج في المعاناة مع أنواع جديدة من المدخلات لم تكن موجودة في مجموعة بيانات الاختبار الخاصة بك.

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

الخاتمة

أتمتة اختبارات الانحدار لأوامر LLMs لم تعد اختيارية - بل هي مكون حاسم في هندسة الذكاء الاصطناعي الموثوقة. من خلال الاستفادة من أدوات مثل Braintrust، يمكن للمطورين الانتقال من اختبارات مطابقة السلاسل النصية الهشة إلى تقييمات دلالية قوية. دمج هذه العملية في خط CI/CD الخاص بك ينشئ شبكة أمان تلتقط انحراف الأوامر مبكرًا، وتقلل وقت تصحيح الأخطاء، وتقدم في النهاية تجربة مستخدم أكثر اتساقًا وموثوقية. مع توسع تطبيقات LLMs، سيكون بناء بنية المراقبة والاختبار هذه من اليوم الأول هو الفرق بين منتج مستقر وتجربة نشر فوضوية.

Share: