بناء أداة للتحقق من أساسيات المعلومات باستخدام واجهة برمجة تطبيقات Upstage و LangChain

تُعدّ خدمة التحقق من أساسيات المعلومات (Groundedness Check) التي تُقدّمها Upstage واجهة برمجة تطبيقات قوية للتحقق من أن الردود المُولّدة بواسطة الذكاء الاصطناعي مُرتبطة بشكل وثيق بمصادر بيانات موثوقة. من خلال إرسال أزواج من السياق والإجابة إلى نقطة نهاية Upstage، يمكننا تحديد ما إذا كان السياق المُقدّم يدعم إجابة مُعطاة على الفور، بالإضافة إلى الحصول على تقييم لثقة هذه المعلومة. في هذا البرنامج التعليمي، سنُوضح كيفية استخدام إمكانيات Upstage الأساسية، بما في ذلك التحقق الفوري، ومعالجة الدُفعات، والاختبار متعدد المجالات، لضمان أن أنظمة الذكاء الاصطناعي لدينا تُنتج محتوى دقيقًا جديرًا بالثقة عبر مجالات مُختلفة.

تثبيت الحزم اللازمة وتكوين مفتاح API

أولاً، نقوم بتثبيت أحدث إصدارات LangChain الأساسية وحزمة تكامل Upstage، ثم نقوم باستيراد الوحدات النمطية اللازمة في بايثون لمعالجة البيانات والكتابة، وأخيراً نقوم بتعيين مفتاح API الخاص بنا في متغيرات البيئة للمصادقة على جميع طلبات التحقق من أساسيات المعلومات اللاحقة:

pip install -qU langchain-core langchain-upstage
import os
import json
from typing import List, Dict, Any
from langchain_upstage import UpstageGroundednessCheck

os.environ["UPSTAGE_API_KEY"] = "استخدم مفتاح API الخاص بك هنا"

بناء فئة مُحسّنة للتحقق من أساسيات المعلومات

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

class AdvancedGroundednessChecker:
    """غلاف مُحسّن للتحقق من أساسيات المعلومات من Upstage مع معالجة الدُفعات وتحليلها"""
    def __init__(self):
        self.checker = UpstageGroundednessCheck()
        self.results = []

    def check_single(self, context: str, answer: str) -> Dict[str, Any]:
        """التحقق من أساسيات المعلومات لزوج سياق-إجابة واحد"""
        request = {"context": context, "answer": answer}
        response = self.checker.invoke(request)
        result = {
            "context": context,
            "answer": answer,
            "grounded": response,
            "confidence": self._extract_confidence(response)
        }
        self.results.append(result)
        return result

    def batch_check(self, test_cases: List[Dict[str, str]]) -> List[Dict[str, Any]]:
        """معالجة حالات الاختبار المُتعددة"""
        batch_results = []
        for case in test_cases:
            result = self.check_single(case["context"], case["answer"])
            batch_results.append(result)
        return batch_results

    def _extract_confidence(self, response) -> str:
        """استخراج مستوى الثقة من الاستجابة"""
        if hasattr(response, 'lower'):
            if 'grounded' in response.lower():
                return 'عالية'
            elif 'not grounded' in response.lower():
                return 'منخفضة'
        return 'متوسطة'

    def analyze_results(self) -> Dict[str, Any]:
        """تحليل نتائج الدُفعات"""
        total = len(self.results)
        grounded = sum(1 for r in self.results if 'grounded' in str(r['grounded']).lower())
        return {
            "total_checks": total,
            "grounded_count": grounded,
            "not_grounded_count": total - grounded,
            "accuracy_rate": grounded / total if total > 0 else 0
        }

أمثلة على الاختبارات

سنقوم بتشغيل أربعة اختبارات مستقلة للتحقق من أساسيات المعلومات، تغطي خطأً في المعلومة، وبيانًا صحيحًا، ومطابقة جزئية غامضة، ومُزاعم مُتناقضة، باستخدام فئة AdvancedGroundednessChecker:

checker = AdvancedGroundednessChecker()

print("=== حالة الاختبار 1: اختلاف في الارتفاع ===")
result1 = checker.check_single(
    context="ماونا كيا هو بركان خامد في جزيرة هاواي.",
    answer="يبلغ ارتفاع ماونا كيا 5207.3 مترًا."
)
print(f"النتيجة: {result1['grounded']}")

print("n=== حالة الاختبار 2: معلومات صحيحة ===")
result2 = checker.check_single(
    context="بايثون هي لغة برمجة عالية المستوى أنشأها جيدو فان روسوم في عام 1991. وهي تُركز على سهولة قراءة الكود وبساطته.",
    answer="تم إنشاء بايثون بواسطة جيدو فان روسوم وتركز على سهولة قراءة الكود."
)
print(f"النتيجة: {result2['grounded']}")

# ... (حالات اختبار أخرى) ...

معالجة الدُفعات وتحليل النتائج

نقوم بتنفيذ سلسلة من عمليات التحقق من أساسيات المعلومات المُجمّعة على حالات الاختبار المُحددة مسبقًا، وطباعة الأحكام الفردية لـ Upstage، ثم حساب وعرض مقاييس الدقة الإجمالية. كما نقوم بإجراء عمليات التحقق متعددة المجالات في العلوم والتاريخ والجغرافيا لإظهار كيفية تعامل Upstage مع أساسيات المعلومات عبر مجالات مُختلفة:

print("n=== مثال على معالجة الدُفعات ===")
test_cases = [
    # ... (حالات اختبار مُتعددة) ...
]
batch_results = checker.batch_check(test_cases)
# ... (طباعة النتائج) ...

print("n=== تحليل النتائج ===")
analysis = checker.analyze_results()
# ... (طباعة تحليل النتائج) ...

إنشاء تقرير اختبار مُفصل

نقوم بتعريف دالة مساعدة create_test_report لجمع جميع عمليات فحص أساسيات المعلومات المُجمّعة في تقرير مُلخّص، مُكتمل مع الدقة الإجمالية والتوصيات المُخصصة، ثم نطبع مقاييس الأداء النهائية بالإضافة إلى مُراجعة للعروض الرئيسية للبرنامج التعليمي:

def create_test_report(checker_instance):
    # ... (تنفيذ الدالة) ...

الخاتمة

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

المصدر: MarkTechPost