ai-agents-for-beginners

تصميم الوكيل المتعدد

(انقر على الصورة أعلاه لمشاهدة فيديو هذا الدرس)

الإدراك الفوقي في وكلاء الذكاء الاصطناعي

مقدمة

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

أهداف التعلم

بعد إكمال هذا الدرس، ستكون قادرًا على:

  1. فهم آثار حلقات الاستدلال في تعريفات الوكيل.
  2. استخدام تقنيات التخطيط والتقييم لمساعدة الوكلاء القادرين على تصحيح أنفسهم.
  3. إنشاء وكلائك القادرين على التلاعب بالكود لإنجاز المهام.

مقدمة في الإدراك الفوقي

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

في سياق أنظمة الذكاء الاصطناعي الوكيلية، يمكن أن يساعد الإدراك الفوقي في معالجة عدة تحديات، مثل:

ما هو الإدراك الفوقي؟

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

مثال: “فضلت الرحلات الأرخص لأن… قد أفقد الرحلات المباشرة، لذا دعني أراجع مرة أخرى.”. تتبع كيف أو لماذا اختار مسارًا معينًا.

أهمية الإدراك الفوقي في وكلاء الذكاء الاصطناعي

يلعب الإدراك الفوقي دورًا حاسمًا في تصميم وكلاء الذكاء الاصطناعي لأسباب عدة:

أهمية الإدراك الفوقي

مكونات وكيل الذكاء الاصطناعي

قبل الغوص في العمليات الإدراكية الفوقية، من الضروري فهم المكونات الأساسية لوكيل الذكاء الاصطناعي. عادةً ما يتكون وكيل الذكاء الاصطناعي من:

تعمل هذه المكونات معًا لإنشاء “وحدة خبرة” يمكنها أداء مهام محددة.

مثال: اعتبر وكيل سفر، خدمات وكيل لا تخطط فقط لعطلتك ولكنها تعدل مسارها بناءً على البيانات الفورية وتجارب رحلة العملاء السابقة.

مثال: الإدراك الفوقي في خدمة وكيل السفر

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

المهمة الحالية

المهمة الحالية هي مساعدة مستخدم في تخطيط رحلة إلى باريس.

خطوات إكمال المهمة

  1. جمع تفضيلات المستخدم: اسأل المستخدم عن تواريخ السفر والميزانية والاهتمامات (مثل المتاحف، المطابخ، التسوق) وأي متطلبات خاصة.
  2. استخراج المعلومات: ابحث عن خيارات الرحلات، الإقامات، المعالم، والمطاعم التي تناسب تفضيلات المستخدم.
  3. توليد التوصيات: قدم مسارًا شخصيًا مع تفاصيل الرحلات وحجوزات الفنادق والأنشطة المقترحة.
  4. التعديل بناءً على التغذية الراجعة: اسأل المستخدم عن رأيه في التوصيات وأجرِ التعديلات اللازمة.

الموارد المطلوبة

الخبرة والتأمل الذاتي

يستخدم وكيل السفر الإدراك الفوقي لتقييم أدائه والتعلم من التجارب السابقة. على سبيل المثال:

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

مثال عملي للمطور

إليك مثال مبسط على كيفية ظهور كود وكيل السفر عند دمج الإدراك الفوقي:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        # البحث عن الرحلات، الفنادق، والمعالم بناءً على التفضيلات
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        # تحليل التعليقات وتعديل التوصيات المستقبلية
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)

# مثال على الاستخدام
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)

لماذا الإدراك الفوقي مهم

من خلال دمج الإدراك الفوقي، يمكن لوكيل السفر تقديم توصيات سفر أكثر تخصيصًا ودقة، مما يعزز تجربة المستخدم بشكل عام.


2. التخطيط في الوكلاء

التخطيط هو مكون حاسم في سلوك وكيل الذكاء الاصطناعي. وهو يتضمن تحديد الخطوات اللازمة لتحقيق هدف، مع الأخذ في الاعتبار الحالة الحالية، الموارد، والعقبات المحتملة.

عناصر التخطيط

مثال: إليك الخطوات التي يحتاج وكيل السفر لاتخاذها لمساعدة المستخدم في تخطيط رحلته بفعالية:

خطوات لوكيل السفر

  1. جمع تفضيلات المستخدم
    • اسأل المستخدم عن تفاصيل تواريخ السفر، الميزانية، الاهتمامات، وأي متطلبات خاصة.
    • أمثلة: “متى تخطط للسفر؟” “ما نطاق ميزانيتك؟” “ما الأنشطة التي تستمتع بها في العطلة؟”
  2. استخراج المعلومات
    • ابحث عن خيارات السفر المناسبة بناءً على تفضيلات المستخدم.
    • الرحلات: ابحث عن رحلات متاحة ضمن ميزانية المستخدم وتواريخ السفر المفضلة.
    • الإقامات: اعثر على فنادق أو عقارات للإيجار تتناسب مع تفضيلات المستخدم للموقع، السعر، والمرافق.
    • المعالم والمطاعم: حدد المعالم والأنشطة وخيارات الطعام التي تتوافق مع اهتمامات المستخدم.
  3. توليد التوصيات
    • اجمع المعلومات المستخرجة في مسار شخصي.
    • قدم تفاصيل مثل خيارات الرحلات، حجوزات الفنادق، والأنشطة المقترحة، مع التأكد من تخصيص التوصيات لتناسب تفضيلات المستخدم.
  4. عرض المسار على المستخدم
    • شارك المخطط المقترح مع المستخدم لمراجعته.
    • مثال: “إليك مسار مقترح لرحلتك إلى باريس. يشمل تفاصيل الرحلات، حجوزات الفنادق، وقائمة بالأنشطة والمطاعم المقترحة. أخبرني برأيك!”
  5. جمع التغذية الراجعة
    • اسأل المستخدم عن رأيه في المخطط المقترح.
    • أمثلة: “هل تعجبك خيارات الرحلات؟” “هل الفندق مناسب لاحتياجاتك؟” “هل هناك أنشطة ترغب في إضافتها أو حذفها؟”
  6. التعديل بناءً على التغذية الراجعة
    • عدل المخطط بناءً على تغذية المستخدم.
    • أجري التغييرات اللازمة على توصيات الرحلات، الإقامة، والأنشطة لتلائم تفضيلات المستخدم بشكل أفضل.
  7. التأكيد النهائي
    • قدم المخطط المحدث للمستخدم للتأكيد النهائي.
    • مثال: “لقد أجريت التعديلات بناءً على ملاحظاتك. إليك المخطط المحدث. هل يبدو كل شيء جيدًا بالنسبة لك؟”
  8. حجز وتأكيد الحجوزات
    • بمجرد موافقة المستخدم على المخطط، قم بحجز الرحلات، الإقامات، وأي أنشطة مخططة مسبقًا.
    • أرسل تفاصيل التأكيد إلى المستخدم.
  9. تقديم الدعم المستمر
    • كن متاحًا لمساعدة المستخدم في أي تغييرات أو طلبات إضافية قبل وأثناء رحلته.
    • مثال: “إذا احتجت إلى أي مساعدة إضافية أثناء رحلتك، لا تتردد في الاتصال بي في أي وقت!”

مثال تفاعل

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)

# مثال على الاستخدام داخل طلب حجز
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
travel_agent.adjust_based_on_feedback(feedback)

3. نظام RAG التصحيحي

أولاً، لنبدأ بفهم الفرق بين أداة RAG وحمل السياق الاستباقي

RAG مقابل تحميل السياق

التوليد المعزز بالاستخراج (RAG)

يجمع RAG بين نظام استرجاع ونموذج توليدي. عند إجراء استعلام، يقوم نظام الاسترجاع بجلب المستندات أو البيانات ذات الصلة من مصدر خارجي، وتُستخدم هذه المعلومات المُسترجعة لتعزيز الإدخال إلى النموذج التوليدي. هذا يساعد النموذج على توليد استجابات أكثر دقة وذات صلة بالسياق.

في نظام RAG، يسترجع الوكيل المعلومات ذات الصلة من قاعدة معرفة ويستخدمها لتوليد استجابات أو أفعال مناسبة.

منهجية RAG التصحيحية

تركز منهجية RAG التصحيحية على استخدام تقنيات RAG لتصحيح الأخطاء وتحسين دقة وكلاء الذكاء الاصطناعي. ويتضمن ذلك:

  1. تقنية المحفزات: استخدام محفزات محددة لتوجيه الوكيل في استرجاع المعلومات ذات الصلة.
  2. الأداة: تنفيذ خوارزميات وآليات تمكن الوكيل من تقييم مدى ملاءمة المعلومات المسترجعة وتوليد استجابات دقيقة.
  3. التقييم: تقييم أداء الوكيل بشكل مستمر وإجراء تعديلات لتحسين الدقة والكفاءة.

مثال: RAG التصحيحي في وكيل بحث

اعتبر وكيل بحث يسترجع معلومات من الويب للرد على استفسارات المستخدمين. قد تتضمن منهجية RAG التصحيحية:

  1. تقنية المحفزات: صياغة استعلامات البحث استنادًا إلى مدخلات المستخدم.
  2. الأداة: استخدام معالجة اللغة الطبيعية وخوارزميات التعلم الآلي لترتيب وتصفية نتائج البحث.
  3. التقييم: تحليل تغذية المستخدم لتحديد وتصحيح الأخطاء في المعلومات المسترجعة.

RAG التصحيحي في وكيل السفر

يعزز RAG التصحيحي (التوليد المعزز بالاستخراج) قدرة الذكاء الاصطناعي على استرجاع وتوليد المعلومات مع تصحيح أي عدم دقة. لنرَ كيف يمكن لوكيل السفر استخدام منهجية RAG التصحيحية لتقديم توصيات سفر أدق وأكثر ملاءمة.

وهذا يتضمن:

خطوات تنفيذ RAG التصحيحي في وكيل السفر

  1. التفاعل الأولي مع المستخدم
    • يجمع وكيل السفر تفضيلات المستخدم الأولية، مثل الوجهة، تواريخ السفر، الميزانية، والاهتمامات.
    • مثال:

      preferences = {
          "destination": "Paris",
          "dates": "2025-04-01 to 2025-04-10",
          "budget": "moderate",
          "interests": ["museums", "cuisine"]
      }
      
  2. استرجاع المعلومات
    • يسترجع وكيل السفر معلومات حول الرحلات، الإقامات، المعالم، والمطاعم استنادًا إلى تفضيلات المستخدم.
    • مثال:

      flights = search_flights(preferences)
      hotels = search_hotels(preferences)
      attractions = search_attractions(preferences)
      
  3. توليد التوصيات الأولية
    • يستخدم وكيل السفر المعلومات المسترجعة لتوليد مسار شخصي.
    • مثال:

      itinerary = create_itinerary(flights, hotels, attractions)
      print("Suggested Itinerary:", itinerary)
      
  4. جمع تغذية المستخدم
    • يطلب وكيل السفر من المستخدم تقديم ملاحظات حول التوصيات الأولية.
    • مثال:

      feedback = {
          "liked": ["Louvre Museum"],
          "disliked": ["Eiffel Tower (too crowded)"]
      }
      
  5. عملية RAG التصحيحية
    • تقنية المحفزات: يصيغ وكيل السفر استعلامات بحث جديدة بناءً على ملاحظات المستخدم.
      • مثال:

        if "disliked" in feedback:
            preferences["avoid"] = feedback["disliked"]
        
    • الأداة: يستخدم وكيل السفر خوارزميات لترتيب وتصنيف نتائج البحث الجديدة، مع التركيز على الملاءمة استنادًا إلى ملاحظات المستخدم.
      • مثال:

        new_attractions = search_attractions(preferences)
        new_itinerary = create_itinerary(flights, hotels, new_attractions)
        print("Updated Itinerary:", new_itinerary)
        
    • التقييم: يقيم وكيل السفر باستمرار مدى ملاءمة ودقة توصياته من خلال تحليل ملاحظات المستخدم وإجراء التعديلات اللازمة.
      • مثال:

        def adjust_preferences(preferences, feedback):
            if "liked" in feedback:
                preferences["favorites"] = feedback["liked"]
            if "disliked" in feedback:
                preferences["avoid"] = feedback["disliked"]
            return preferences
        
        preferences = adjust_preferences(preferences, feedback)
        

مثال عملي

إليك مثال مبسط لكود بايثون يدمج منهجية RAG التصحيحية في وكيل السفر:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        itinerary = create_itinerary(flights, hotels, attractions)
        return itinerary

    def adjust_based_on_feedback(self, feedback):
        self.experience_data.append(feedback)
        self.user_preferences = adjust_preferences(self.user_preferences, feedback)
        new_itinerary = self.generate_recommendations()
        return new_itinerary

# مثال على الاستخدام
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
new_itinerary = travel_agent.adjust_based_on_feedback(feedback)
print("Updated Itinerary:", new_itinerary)

حمل السياق الاستباقي

تحميل السياق الاستباقي يتضمن تحميل السياق أو المعلومات الخلفية ذات الصلة في النموذج قبل معالجة الاستعلام. هذا يعني أن النموذج لديه الوصول إلى هذه المعلومات من البداية، مما يمكنه من توليد ردود أكثر استنارة دون الحاجة إلى استرداد بيانات إضافية أثناء العملية.

إليك مثال مبسط عن كيفية ظهور تحميل السياق الاستباقي لتطبيق وكيل سفر في بايثون:

class TravelAgent:
    def __init__(self):
        # تحميل الوجهات الشهيرة ومعلوماتها مسبقًا
        self.context = {
            "Paris": {"country": "France", "currency": "Euro", "language": "French", "attractions": ["Eiffel Tower", "Louvre Museum"]},
            "Tokyo": {"country": "Japan", "currency": "Yen", "language": "Japanese", "attractions": ["Tokyo Tower", "Shibuya Crossing"]},
            "New York": {"country": "USA", "currency": "Dollar", "language": "English", "attractions": ["Statue of Liberty", "Times Square"]},
            "Sydney": {"country": "Australia", "currency": "Dollar", "language": "English", "attractions": ["Sydney Opera House", "Bondi Beach"]}
        }

    def get_destination_info(self, destination):
        # جلب معلومات الوجهة من السياق المحمّل مسبقًا
        info = self.context.get(destination)
        if info:
            return f"{destination}:\nCountry: {info['country']}\nCurrency: {info['currency']}\nLanguage: {info['language']}\nAttractions: {', '.join(info['attractions'])}"
        else:
            return f"Sorry, we don't have information on {destination}."

# مثال على الاستخدام
travel_agent = TravelAgent()
print(travel_agent.get_destination_info("Paris"))
print(travel_agent.get_destination_info("Tokyo"))

شرح

  1. التهيئة (طريقة __init__): تقوم فئة TravelAgent بتحميل قاموس يحتوي على معلومات عن وجهات شهيرة مثل باريس، طوكيو، نيويورك، وسيدني. يحتوي هذا القاموس على تفاصيل مثل البلد، العملة، اللغة، والمعالم الرئيسية لكل وجهة.

  2. استدعاء المعلومات (طريقة get_destination_info): عندما يستعلم المستخدم عن وجهة معينة، تقوم طريقة get_destination_info بجلب المعلومات ذات الصلة من قاموس السياق المحمل مسبقًا.

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

تمهيد الخطة بهدف قبل التكرار

تمهيد خطة بهدف يتضمن البدء بهدف واضح أو نتيجة مستهدفة في الاعتبار. من خلال تعريف هذا الهدف مسبقًا، يمكن للنموذج استخدامه كمبدأ موجه خلال العملية التكرارية. هذا يساعد في ضمان أن كل تكرار يقترب من تحقيق النتيجة المرغوبة، مما يجعل العملية أكثر كفاءة وتركيزًا.

إليك مثالًا عن كيفية تمهيد خطة سفر بهدف قبل التكرار لوكيل سفر في بايثون:

السيناريو

يريد وكيل السفر تخطيط إجازة مخصصة لعميل. الهدف هو إنشاء مسار سفر يعظم رضا العميل بناءً على تفضيلاته وميزانيته.

الخطوات

  1. تحديد تفضيلات العميل وميزانيته.
  2. تمهيد الخطة الأولية بناءً على هذه التفضيلات.
  3. التكرار لتحسين الخطة، مع التركيز على رضا العميل.

كود بايثون

class TravelAgent:
    def __init__(self, destinations):
        self.destinations = destinations

    def bootstrap_plan(self, preferences, budget):
        plan = []
        total_cost = 0

        for destination in self.destinations:
            if total_cost + destination['cost'] <= budget and self.match_preferences(destination, preferences):
                plan.append(destination)
                total_cost += destination['cost']

        return plan

    def match_preferences(self, destination, preferences):
        for key, value in preferences.items():
            if destination.get(key) != value:
                return False
        return True

    def iterate_plan(self, plan, preferences, budget):
        for i in range(len(plan)):
            for destination in self.destinations:
                if destination not in plan and self.match_preferences(destination, preferences) and self.calculate_cost(plan, destination) <= budget:
                    plan[i] = destination
                    break
        return plan

    def calculate_cost(self, plan, new_destination):
        return sum(destination['cost'] for destination in plan) + new_destination['cost']

# مثال على الاستخدام
destinations = [
    {"name": "Paris", "cost": 1000, "activity": "sightseeing"},
    {"name": "Tokyo", "cost": 1200, "activity": "shopping"},
    {"name": "New York", "cost": 900, "activity": "sightseeing"},
    {"name": "Sydney", "cost": 1100, "activity": "beach"},
]

preferences = {"activity": "sightseeing"}
budget = 2000

travel_agent = TravelAgent(destinations)
initial_plan = travel_agent.bootstrap_plan(preferences, budget)
print("Initial Plan:", initial_plan)

refined_plan = travel_agent.iterate_plan(initial_plan, preferences, budget)
print("Refined Plan:", refined_plan)

شرح الكود

  1. التهيئة (طريقة __init__): يتم تهيئة فئة TravelAgent بقائمة من الوجهات المحتملة، كل منها يحتوي على خصائص مثل الاسم، التكلفة، ونوع النشاط.

  2. تمهيد الخطة (طريقة bootstrap_plan): تنشئ هذه الطريقة خطة سفر أولية بناءً على تفضيلات العميل وميزانيته. تتصفح قائمة الوجهات وتضيفها إلى الخطة إذا كانت تطابق تفضيلات العميل وتتوافق مع الميزانية.

  3. مطابقة التفضيلات (طريقة match_preferences): تتحقق هذه الطريقة ما إذا كانت وجهة ما تطابق تفضيلات العميل.

  4. تكرار الخطة (طريقة iterate_plan): تحسن هذه الطريقة الخطة الأولية بمحاولة استبدال كل وجهة في الخطة بخيار أفضل، مع مراعاة تفضيلات العميل وقيود الميزانية.

  5. حساب التكلفة (طريقة calculate_cost): تقوم هذه الطريقة بحساب التكلفة الإجمالية للخطة الحالية، بما في ذلك إضافة وجهة جديدة محتملة.

مثال للاستخدام

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

الاستفادة من نماذج اللغة الكبيرة لإعادة الترتيب والتسجيل

يمكن استخدام نماذج اللغة الكبيرة (LLMs) لإعادة الترتيب والتسجيل بتقييم مدى صلة وجودة المستندات المسترجعة أو الردود المولدة. إليك كيف يعمل:

الاسترجاع: خطوة الاسترجاع الأولية تجلب مجموعة من المستندات أو الردود المرشحة بناءً على الاستعلام.

إعادة الترتيب: تقوم الـ LLM بتقييم هؤلاء المرشحين وتعاد ترتيبهم بناءً على صلتهم وجودتهم. تضمن هذه الخطوة عرض المعلومات الأكثر صلة وجودة أولاً.

التسجيل: تعطي الـ LLM درجات لكل مرشح، تعكس مدى صلته وجودته. يساعد هذا في اختيار أفضل رد أو مستند للمستخدم.

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

إليك مثالًا عن كيفية استخدام وكيل السفر لنموذج لغة كبير (LLM) لإعادة الترتيب والتسجيل لوجهات السفر بناءً على تفضيلات المستخدم في بايثون:

السيناريو - السفر بناءً على التفضيلات

يريد وكيل السفر أن يوصي بأفضل وجهات السفر لعميل بناءً على تفضيلاته. ستساعد الـ LLM في إعادة ترتيب وتسجيل الوجهات لضمان تقديم الخيارات الأكثر صلة.

الخطوات:

  1. جمع تفضيلات المستخدم.
  2. استرجاع قائمة بالوجهات المحتملة للسفر.
  3. استخدام الـ LLM لإعادة ترتيب وتسجيل الوجهات بناءً على تفضيلات المستخدم.

إليك كيف يمكنك تحديث المثال السابق لاستخدام خدمات Azure OpenAI:

المتطلبات

  1. يجب أن يكون لديك اشتراك في Azure.
  2. إنشاء مورد Azure OpenAI والحصول على مفتاح API الخاص بك.

مثال كود بايثون

import requests
import json

class TravelAgent:
    def __init__(self, destinations):
        self.destinations = destinations

    def get_recommendations(self, preferences, api_key, endpoint):
        # توليد موجه لـ Azure OpenAI
        prompt = self.generate_prompt(preferences)
        
        # تحديد الرؤوس والحمولة للطلب
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {api_key}'
        }
        payload = {
            "prompt": prompt,
            "max_tokens": 150,
            "temperature": 0.7
        }
        
        # استدعاء واجهة برمجة تطبيقات Azure OpenAI للحصول على الوجهات المعاد ترتيبها والمُدرجة
        response = requests.post(endpoint, headers=headers, json=payload)
        response_data = response.json()
        
        # استخراج التوصيات وإرجاعها
        recommendations = response_data['choices'][0]['text'].strip().split('\n')
        return recommendations

    def generate_prompt(self, preferences):
        prompt = "Here are the travel destinations ranked and scored based on the following user preferences:\n"
        for key, value in preferences.items():
            prompt += f"{key}: {value}\n"
        prompt += "\nDestinations:\n"
        for destination in self.destinations:
            prompt += f"- {destination['name']}: {destination['description']}\n"
        return prompt

# مثال على الاستخدام
destinations = [
    {"name": "Paris", "description": "City of lights, known for its art, fashion, and culture."},
    {"name": "Tokyo", "description": "Vibrant city, famous for its modernity and traditional temples."},
    {"name": "New York", "description": "The city that never sleeps, with iconic landmarks and diverse culture."},
    {"name": "Sydney", "description": "Beautiful harbour city, known for its opera house and stunning beaches."},
]

preferences = {"activity": "sightseeing", "culture": "diverse"}
api_key = 'your_azure_openai_api_key'
endpoint = 'https://your-endpoint.com/openai/deployments/your-deployment-name/completions?api-version=2022-12-01'

travel_agent = TravelAgent(destinations)
recommendations = travel_agent.get_recommendations(preferences, api_key, endpoint)
print("Recommended Destinations:")
for rec in recommendations:
    print(rec)

شرح الكود - حجز التفضيلات

  1. التهيئة: يتم تهيئة فئة TravelAgent بقائمة من وجهات السفر المحتملة، كل منها يحتوي على خصائص مثل الاسم والوصف.

  2. الحصول على التوصيات (طريقة get_recommendations): تنشئ هذه الطريقة مطالبة لخدمة Azure OpenAI بناءً على تفضيلات المستخدم وتجري طلب POST عبر HTTP إلى API الخاص بـ Azure OpenAI للحصول على وجهات معاد ترتيبها ومسجلة.

  3. إنشاء المطالبة (طريقة generate_prompt): تُنشئ هذه الطريقة مطالبة لـ Azure OpenAI، بما في ذلك تفضيلات المستخدم وقائمة الوجهات. ترشد المطالبة النموذج لإعادة ترتيب وتسجيل الوجهات بناءً على التفضيلات المُقدمة.

  4. استدعاء API: تُستخدم مكتبة requests لإجراء طلب POST HTTP إلى نقطة النهاية الخاصة بـ Azure OpenAI. يحتوي الرد على الوجهات المعاد ترتيبها والمسجلة.

  5. مثال للاستخدام: يجمع وكيل السفر تفضيلات المستخدم (مثل الاهتمام بالمعالم الثقافية والسياحية) ويستخدم خدمة Azure OpenAI للحصول على توصيات معاد ترتيبها ومسجلة لوجهات السفر.

تأكد من استبدال your_azure_openai_api_key بمفتاح API الخاص بك لخدمة Azure OpenAI واستبدال https://your-endpoint.com/... بالرابط الفعلي لنقطة النهاية لنشر Azure OpenAI الخاص بك.

من خلال الاستفادة من LLM لإعادة الترتيب والتسجيل، يمكن لوكيل السفر تقديم توصيات سفر مخصصة وأكثر صلة للعملاء، مما يعزز تجربتهم بشكل عام.

RAG: تقنية مطالبة مقابل أداة

التوليد المعزز بالاسترجاع (RAG) يمكن أن يكون كلاً من تقنية مطالبة وأداة في تطوير وكلاء الذكاء الاصطناعي. فهم الفرق بين الاثنين يمكن أن يساعدك في الاستفادة من RAG بشكل أكثر فاعلية في مشاريعك.

RAG كتقنية مطالبة

ما هي؟

كيف تعمل:

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

مثال في وكيل السفر:

RAG كأداة

ما هي؟

كيف تعمل:

  1. الدمج: تضمين RAG ضمن هيكلية وكيل الذكاء الاصطناعي، مما يسمح له بالتعامل تلقائيًا مع مهام الاسترجاع والتوليد.
  2. التشغيل الآلي: تدير الأداة العملية بأكملها، من استقبال إدخال المستخدم إلى توليد الرد النهائي، دون الحاجة لمطالبات صريحة لكل خطوة.
  3. الكفاءة: تعزز أداء الوكيل من خلال تبسيط عملية الاسترجاع والتوليد، مما يمكنه من تقديم ردود أسرع وأكثر دقة.

مثال في وكيل السفر:

المقارنة

الجانب تقنية المطالبة الأداة
يدوي مقابل تلقائي صياغة يدوية للمطالبات لكل استعلام. عملية آلية للاسترجاع والتوليد.
التحكم يقدم تحكمًا أكبر في عملية الاسترجاع. يبسط ويؤتمت الاسترجاع والتوليد.
المرونة يسمح بمطالبات مخصصة بناءً على احتياجات محددة. أكثر كفاءة للتطبيقات على نطاق واسع.
التعقيد يتطلب صياغة وضبط المطالبات. أسهل في الدمج داخل هيكل وكيل الذكاء الاصطناعي.

أمثلة عملية

مثال تقنية مطالبة:

def search_museums_in_paris():
    prompt = "Find top museums in Paris"
    search_results = search_web(prompt)
    return search_results

museums = search_museums_in_paris()
print("Top Museums in Paris:", museums)

مثال أداة:

class Travel_Agent:
    def __init__(self):
        self.rag_tool = RAGTool()

    def get_museums_in_paris(self):
        user_input = "I want to visit museums in Paris."
        response = self.rag_tool.retrieve_and_generate(user_input)
        return response

travel_agent = Travel_Agent()
museums = travel_agent.get_museums_in_paris()
print("Top Museums in Paris:", museums)

تقييم الصلة

تقييم الصلة هو جانب حاسم في أداء وكيل الذكاء الاصطناعي. يضمن أن المعلومات التي يسترجعها ويولدها الوكيل مناسبة، دقيقة، ومفيدة للمستخدم. دعنا نستكشف كيفية تقييم الصلة في وكلاء الذكاء الاصطناعي، بما في ذلك أمثلة وتقنيات عملية.

المفاهيم الأساسية في تقييم الصلة

  1. الوعي بالسياق:
    • يجب على الوكيل فهم سياق استعلام المستخدم لاسترجاع وتوليد معلومات ذات صلة.
    • مثال: إذا طلب المستخدم “أفضل المطاعم في باريس”، يجب أن يأخذ الوكيل في الاعتبار تفضيلات المستخدم، مثل نوع المطبخ والميزانية.
  2. الدقة:
    • يجب أن تكون المعلومات التي يقدمها الوكيل صحيحة فعليًا ومحدثة.
    • مثال: التوصية بالمطاعم المفتوحة حاليًا والتي لديها تقييمات جيدة بدلاً من الخيارات القديمة أو المغلقة.
  3. نية المستخدم:
    • يجب على الوكيل استنتاج نية المستخدم وراء الاستعلام لتقديم المعلومات الأكثر صلة.
    • مثال: إذا طلب المستخدم “فنادق مناسبة للميزانية”، يجب على الوكيل إعطاء أولوية للخيارات الاقتصادية.
  4. دورة التغذية الراجعة:
    • جمع وتحليل ردود فعل المستخدمين باستمرار يساعد الوكيل على تحسين عملية تقييم الصلة.
    • مثال: تضمين تقييمات وردود فعل المستخدمين على التوصيات السابقة لتحسين الردود المستقبلية.

تقنيات عملية لتقييم الصلة

  1. تسجيل الصلة:
    • تعيين درجة صلة لكل عنصر مسترجع بناءً على مدى تطابقه مع استعلام المستخدم وتفضيلاته.
    • مثال:

      def relevance_score(item, query):
          score = 0
          if item['category'] in query['interests']:
              score += 1
          if item['price'] <= query['budget']:
              score += 1
          if item['location'] == query['destination']:
              score += 1
          return score
      
  2. الفلترة والترتيب:
    • تصفية العناصر غير ذات الصلة وترتيب العناصر المتبقية بناءً على درجات الصلة.
    • مثال:

      def filter_and_rank(items, query):
          ranked_items = sorted(items, key=lambda item: relevance_score(item, query), reverse=True)
          return ranked_items[:10]  # إرجاع أعلى 10 عناصر ذات صلة
      
  3. معالجة اللغة الطبيعية (NLP):
    • استخدام تقنيات NLP لفهم استعلام المستخدم واسترجاع المعلومات ذات الصلة.
    • مثال:

      def process_query(query):
          # استخدم معالجة اللغة الطبيعية لاستخراج المعلومات الأساسية من استعلام المستخدم
          processed_query = nlp(query)
          return processed_query
      
  4. دمج تغذية المستخدم:
    • جمع تغذية المستخدم حول التوصيات المقدمة واستخدامها لضبط تقييمات الصلة المستقبلية.
    • مثال:

      def adjust_based_on_feedback(feedback, items):
          for item in items:
              if item['name'] in feedback['liked']:
                  item['relevance'] += 1
              if item['name'] in feedback['disliked']:
                  item['relevance'] -= 1
          return items
      

مثال: تقييم الصلة في وكيل السفر

إليك مثالًا عمليًا عن كيفية قيام وكيل السفر بتقييم صلة توصيات السفر:

class Travel_Agent:
    def __init__(self):
        self.user_preferences = {}
        self.experience_data = []

    def gather_preferences(self, preferences):
        self.user_preferences = preferences

    def retrieve_information(self):
        flights = search_flights(self.user_preferences)
        hotels = search_hotels(self.user_preferences)
        attractions = search_attractions(self.user_preferences)
        return flights, hotels, attractions

    def generate_recommendations(self):
        flights, hotels, attractions = self.retrieve_information()
        ranked_hotels = self.filter_and_rank(hotels, self.user_preferences)
        itinerary = create_itinerary(flights, ranked_hotels, attractions)
        return itinerary

    def filter_and_rank(self, items, query):
        ranked_items = sorted(items, key=lambda item: self.relevance_score(item, query), reverse=True)
        return ranked_items[:10]  # إرجاع أفضل 10 عناصر ذات صلة

    def relevance_score(self, item, query):
        score = 0
        if item['category'] in query['interests']:
            score += 1
        if item['price'] <= query['budget']:
            score += 1
        if item['location'] == query['destination']:
            score += 1
        return score

    def adjust_based_on_feedback(self, feedback, items):
        for item in items:
            if item['name'] in feedback['liked']:
                item['relevance'] += 1
            if item['name'] in feedback['disliked']:
                item['relevance'] -= 1
        return items

# مثال للاستخدام
travel_agent = Travel_Agent()
preferences = {
    "destination": "Paris",
    "dates": "2025-04-01 to 2025-04-10",
    "budget": "moderate",
    "interests": ["museums", "cuisine"]
}
travel_agent.gather_preferences(preferences)
itinerary = travel_agent.generate_recommendations()
print("Suggested Itinerary:", itinerary)
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_items = travel_agent.adjust_based_on_feedback(feedback, itinerary['hotels'])
print("Updated Itinerary with Feedback:", updated_items)

البحث بناءً على النية

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

المفاهيم الأساسية في البحث بناءً على النية

  1. فهم نية المستخدم:
    • يمكن تصنيف نية المستخدم إلى ثلاث أنواع رئيسية: معلوماتية، تنقلية، ومعاملاتية.
      • النية المعلوماتية: المستخدم يبحث عن معلومات حول موضوع (مثل “ما هي أفضل المتاحف في باريس؟”).
      • النية التنقلية: المستخدم يريد التنقل إلى موقع ويب معين أو صفحة (مثل “الموقع الرسمي لمتحف اللوفر”).
      • النية المعاملاتية: يهدف المستخدم لإجراء معاملة، مثل حجز رحلة أو شراء منتج (مثل “احجز رحلة طيران إلى باريس”).
  2. الوعي بالسياق:
    • تحليل سياق استعلام المستخدم يساعد في تحديد نيته بدقة. يشمل هذا النظر في التفاعلات السابقة، تفضيلات المستخدم، والتفاصيل المحددة للاستعلام الحالي.
  3. معالجة اللغة الطبيعية (NLP):
    • تُستخدم تقنيات NLP لفهم وتفسير الاستعلامات المكتوبة بلغة طبيعية التي يقدمها المستخدمون. يشمل ذلك مهام مثل التعرف على الكيانات، تحليل المشاعر، وتجزيء الاستعلام.
  4. التخصيص:
    • تخصيص نتائج البحث بناءً على تاريخ المستخدم، تفضيلاته، وردود فعله يعزز صلة المعلومات المسترجعة.

مثال عملي: البحث بناءً على النية في وكيل السفر

لنأخذ وكيل السفر كمثال لنرى كيف يمكن تنفيذ البحث بناءً على النية.

  1. جمع تفضيلات المستخدم

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. فهم نية المستخدم

    def identify_intent(query):
        if "book" in query or "purchase" in query:
            return "transactional"
        elif "website" in query or "official" in query:
            return "navigational"
        else:
            return "informational"
    
  3. الوعي بالسياق

    def analyze_context(query, user_history):
        # دمج الاستعلام الحالي مع سجل المستخدم لفهم السياق
        context = {
            "current_query": query,
            "user_history": user_history
        }
        return context
    
  4. البحث وتخصيص النتائج

    def search_with_intent(query, preferences, user_history):
        intent = identify_intent(query)
        context = analyze_context(query, user_history)
        if intent == "informational":
            search_results = search_information(query, preferences)
        elif intent == "navigational":
            search_results = search_navigation(query)
        elif intent == "transactional":
            search_results = search_transaction(query, preferences)
        personalized_results = personalize_results(search_results, user_history)
        return personalized_results
    
    def search_information(query, preferences):
        # مثال على منطق البحث للنية الإعلامية
        results = search_web(f"best {preferences['interests']} in {preferences['destination']}")
        return results
    
    def search_navigation(query):
        # مثال على منطق البحث للنية التنقلية
        results = search_web(query)
        return results
    
    def search_transaction(query, preferences):
        # مثال على منطق البحث للنية التجارية
        results = search_web(f"book {query} to {preferences['destination']}")
        return results
    
    def personalize_results(results, user_history):
        # مثال على منطق التخصيص
        personalized = [result for result in results if result not in user_history]
        return personalized[:10]  # إرجاع أفضل 10 نتائج مخصصة
    
  5. مثال على الاستخدام

    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
    user_history = ["Louvre Museum website", "Book flight to Paris"]
    query = "best museums in Paris"
    results = search_with_intent(query, preferences, user_history)
    print("Search Results:", results)
    

4. توليد الشيفرة كأداة

يستخدم وكلاء توليد الشيفرة نماذج الذكاء الاصطناعي لكتابة وتنفيذ الشيفرات، مما يحل المشكلات المعقدة ويؤتمت المهام.

وكلاء توليد الشيفرة

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

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

  1. توليد الشيفرة التلقائي: توليد مقاطع شيفرة لمهام محددة، مثل تحليل البيانات، أو استخراج البيانات من الويب، أو التعلم الآلي.
  2. SQL كـ RAG: استخدام استعلامات SQL لاسترجاع البيانات والتعامل معها من قواعد البيانات.
  3. حل المشكلات: إنشاء وتنفيذ الشيفرات لحل مشاكل محددة، مثل تحسين الخوارزميات أو تحليل البيانات.

مثال: وكيل توليد شيفرة لتحليل البيانات

تخيل أنك تصمم وكيلاً لتوليد الشيفرة. هكذا يمكن أن يعمل:

  1. المهمة: تحليل مجموعة بيانات لتحديد الاتجاهات والأنماط.
  2. الخطوات:
    • تحميل مجموعة البيانات في أداة تحليل بيانات.
    • توليد استعلامات SQL لتصفية وتجميع البيانات.
    • تنفيذ الاستعلامات واسترجاع النتائج.
    • استخدام النتائج لتوليد تصورات ورؤى.
  3. الموارد المطلوبة: الوصول إلى مجموعة البيانات، وأدوات تحليل البيانات، وقدرات SQL.
  4. الخبرة: استخدام نتائج التحليل السابقة لتحسين دقة وملاءمة التحليلات المستقبلية.

مثال: وكيل توليد شيفرة لوكيل سفر

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

نظرة عامة على وكيل توليد الشيفرة

  1. جمع تفضيلات المستخدم: يجمع مدخلات المستخدم مثل الوجهة، تواريخ السفر، الميزانية، والاهتمامات.
  2. توليد الشيفرة لجلب البيانات: يولد مقاطع شيفرة لاسترجاع بيانات عن الرحلات الجوية، الفنادق، والمعالم.
  3. تنفيذ الشيفرة المولدة: يشغل الشيفرة المولدة لجلب معلومات في الوقت الفعلي.
  4. توليد خط سير الرحلة: يجمع البيانات المسترجعة في خطة سفر مخصصة.
  5. التعديل بناءً على الملاحظات: يستقبل ملاحظات المستخدم ويعيد توليد الشيفرة إذا لزم الأمر لتحسين النتائج.

التنفيذ خطوة بخطوة

  1. جمع تفضيلات المستخدم

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. توليد الشيفرة لجلب البيانات

    def generate_code_to_fetch_data(preferences):
        # مثال: إنشاء رمز للبحث عن الرحلات الجوية بناءً على تفضيلات المستخدم
        code = f"""
        def search_flights():
            import requests
            response = requests.get('https://api.example.com/flights', params={preferences})
            return response.json()
        """
        return code
    
    def generate_code_to_fetch_hotels(preferences):
        # مثال: إنشاء رمز للبحث عن الفنادق
        code = f"""
        def search_hotels():
            import requests
            response = requests.get('https://api.example.com/hotels', params={preferences})
            return response.json()
        """
        return code
    
  3. تنفيذ الشيفرة المولدة

    def execute_code(code):
        # تنفيذ الشيفرة المولدة باستخدام exec
        exec(code)
        result = locals()
        return result
    
    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "dates": "2025-04-01 to 2025-04-10",
        "budget": "moderate",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
       
    flight_code = generate_code_to_fetch_data(preferences)
    hotel_code = generate_code_to_fetch_hotels(preferences)
       
    flights = execute_code(flight_code)
    hotels = execute_code(hotel_code)
    
    print("Flight Options:", flights)
    print("Hotel Options:", hotels)
    
  4. توليد خط سير الرحلة

    def generate_itinerary(flights, hotels, attractions):
        itinerary = {
            "flights": flights,
            "hotels": hotels,
            "attractions": attractions
        }
        return itinerary
    
    attractions = search_attractions(preferences)
    itinerary = generate_itinerary(flights, hotels, attractions)
    print("Suggested Itinerary:", itinerary)
    
  5. التعديل بناءً على الملاحظات

    def adjust_based_on_feedback(feedback, preferences):
        # ضبط التفضيلات بناءً على ملاحظات المستخدم
        if "liked" in feedback:
            preferences["favorites"] = feedback["liked"]
        if "disliked" in feedback:
            preferences["avoid"] = feedback["disliked"]
        return preferences
    
    feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
    updated_preferences = adjust_based_on_feedback(feedback, preferences)
       
    # إعادة إنشاء الكود وتنفيذه بالتفضيلات المحدثة
    updated_flight_code = generate_code_to_fetch_data(updated_preferences)
    updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)
       
    updated_flights = execute_code(updated_flight_code)
    updated_hotels = execute_code(updated_hotel_code)
       
    updated_itinerary = generate_itinerary(updated_flights, updated_hotels, attractions)
    print("Updated Itinerary:", updated_itinerary)
    

الاستفادة من الوعي البيئي والتفكير

يمكن أن يعزز فهم نظام لكيفية بناء الجدول عملية توليد الاستعلامات باستخدام الوعي البيئي والتفكير.

إليك مثال على كيفية القيام بذلك:

  1. فهم البنية: سيقوم النظام بفهم بنية الجدول واستخدام هذه المعلومات كأساس لتوليد الاستعلامات.
  2. التعديل بناءً على الملاحظات: سيعدل النظام تفضيلات المستخدم بناءً على الملاحظات ويفكر في الحقول التي تحتاج إلى تحديث ضمن البنية.
  3. توليد وتنفيذ الاستعلامات: سيولد وينفذ النظام استعلامات لجلب بيانات الرحلات والفنادق المحدثة بناءً على التفضيلات الجديدة.

فيما يلي مثال محدث لشيفرة Python يتضمن هذه المفاهيم:

def adjust_based_on_feedback(feedback, preferences, schema):
    # ضبط التفضيلات بناءً على ملاحظات المستخدم
    if "liked" in feedback:
        preferences["favorites"] = feedback["liked"]
    if "disliked" in feedback:
        preferences["avoid"] = feedback["disliked"]
    # الاستدلال بناءً على المخطط لتعديل التفضيلات الأخرى ذات الصلة
    for field in schema:
        if field in preferences:
            preferences[field] = adjust_based_on_environment(feedback, field, schema)
    return preferences

def adjust_based_on_environment(feedback, field, schema):
    # منطق مخصص لضبط التفضيلات بناءً على المخطط والملاحظات
    if field in feedback["liked"]:
        return schema[field]["positive_adjustment"]
    elif field in feedback["disliked"]:
        return schema[field]["negative_adjustment"]
    return schema[field]["default"]

def generate_code_to_fetch_data(preferences):
    # توليد كود لجلب بيانات الرحلات بناءً على التفضيلات المحدثة
    return f"fetch_flights(preferences={preferences})"

def generate_code_to_fetch_hotels(preferences):
    # توليد كود لجلب بيانات الفنادق بناءً على التفضيلات المحدثة
    return f"fetch_hotels(preferences={preferences})"

def execute_code(code):
    # محاكاة تنفيذ الكود وإرجاع بيانات وهمية
    return {"data": f"Executed: {code}"}

def generate_itinerary(flights, hotels, attractions):
    # توليد مسار الرحلة بناءً على الرحلات الجوية والفنادق والمعالم
    return {"flights": flights, "hotels": hotels, "attractions": attractions}

# مثال على المخطط
schema = {
    "favorites": {"positive_adjustment": "increase", "negative_adjustment": "decrease", "default": "neutral"},
    "avoid": {"positive_adjustment": "decrease", "negative_adjustment": "increase", "default": "neutral"}
}

# مثال للاستخدام
preferences = {"favorites": "sightseeing", "avoid": "crowded places"}
feedback = {"liked": ["Louvre Museum"], "disliked": ["Eiffel Tower (too crowded)"]}
updated_preferences = adjust_based_on_feedback(feedback, preferences, schema)

# إعادة توليد وتنفيذ الكود مع التفضيلات المحدثة
updated_flight_code = generate_code_to_fetch_data(updated_preferences)
updated_hotel_code = generate_code_to_fetch_hotels(updated_preferences)

updated_flights = execute_code(updated_flight_code)
updated_hotels = execute_code(updated_hotel_code)

updated_itinerary = generate_itinerary(updated_flights, updated_hotels, feedback["liked"])
print("Updated Itinerary:", updated_itinerary)

الشرح - الحجز بناءً على الملاحظات

  1. الوعي بالهيكلية: قاموس schema يحدد كيف ينبغي تعديل التفضيلات بناءً على الملاحظات. يتضمن حقول مثل favorites و avoid مع التعديلات المقابلة.
  2. تعديل التفضيلات (طريقة adjust_based_on_feedback): تقوم هذه الطريقة بتعديل التفضيلات بناءً على ملاحظات المستخدم والبنية.
  3. التعديلات المستندة إلى البيئة (طريقة adjust_based_on_environment): تقوم هذه الطريقة بتخصيص التعديلات بناءً على البنية والملاحظات.
  4. توليد وتنفيذ الاستعلامات: يولد النظام شيفرة لجلب بيانات الرحلات والفنادق المحدثة بناءً على التفضيلات المعدلة ويقوم بمحاكاة تنفيذ هذه الاستعلامات.
  5. توليد خط سير الرحلة: ينشئ النظام خط سير رحلة محدثًا بالاعتماد على البيانات الجديدة للرحلات والفنادق والمعالم.

بجعل النظام واعيًا بالبيئة ويمارس التفكير استنادًا إلى البنية، يمكنه توليد استعلامات أدق وأكثر ملاءمة، مما يؤدي إلى توصيات سفر أفضل وتجربة مستخدم أكثر تخصيصًا.

استخدام SQL كتقنية توليد معززة بالاسترجاع (RAG)

SQL (لغة الاستعلام البنيوية) هي أداة قوية للتفاعل مع قواعد البيانات. عند استخدامها كجزء من تقنية التوليد المعززة بالاسترجاع (RAG)، يمكن لـ SQL استرجاع البيانات ذات الصلة من قواعد البيانات لإعلام وتوليد الاستجابات أو الإجراءات في وكلاء الذكاء الاصطناعي. دعونا نستكشف كيف يمكن استخدام SQL كتقنية RAG في سياق وكيل السفر.

المفاهيم الأساسية

  1. التفاعل مع قاعدة البيانات:
    • تُستخدم SQL لاستعلام قواعد البيانات، واسترجاع المعلومات ذات الصلة، والتعامل مع البيانات.
    • مثال: جلب تفاصيل الرحلات الجوية، معلومات الفنادق، والمعالم من قاعدة بيانات السفر.
  2. الاندماج مع RAG:
    • تُنشأ استعلامات SQL بناءً على مدخلات المستخدم وتفضيلاته.
    • تُستخدم البيانات المسترجعة لتوليد توصيات أو إجراءات مخصصة.
  3. توليد الاستعلامات الديناميكي:
    • يولد وكيل الذكاء الاصطناعي استعلامات SQL ديناميكية استنادًا إلى السياق واحتياجات المستخدم.
    • مثال: تخصيص استعلامات SQL لتصفية النتائج بناءً على الميزانية والتواريخ والاهتمامات.

التطبيقات

مثال: وكيل تحليل بيانات:

  1. المهمة: تحليل مجموعة بيانات لاكتشاف الاتجاهات.
  2. الخطوات:
    • تحميل مجموعة البيانات.
    • توليد استعلامات SQL لتصفية البيانات.
    • تنفيذ الاستعلامات واسترجاع النتائج.
    • توليد تصورات ورؤى.
  3. الموارد: الوصول إلى مجموعة البيانات، وقدرات SQL.
  4. الخبرة: استخدام النتائج السابقة لتحسين التحليلات المستقبلية.

مثال عملي: استخدام SQL في وكيل السفر

  1. جمع تفضيلات المستخدم

    class Travel_Agent:
        def __init__(self):
            self.user_preferences = {}
    
        def gather_preferences(self, preferences):
            self.user_preferences = preferences
    
  2. توليد استعلامات SQL

    def generate_sql_query(table, preferences):
        query = f"SELECT * FROM {table} WHERE "
        conditions = []
        for key, value in preferences.items():
            conditions.append(f"{key}='{value}'")
        query += " AND ".join(conditions)
        return query
    
  3. تنفيذ استعلامات SQL

    import sqlite3
    
    def execute_sql_query(query, database="travel.db"):
        connection = sqlite3.connect(database)
        cursor = connection.cursor()
        cursor.execute(query)
        results = cursor.fetchall()
        connection.close()
        return results
    
  4. توليد التوصيات

    def generate_recommendations(preferences):
        flight_query = generate_sql_query("flights", preferences)
        hotel_query = generate_sql_query("hotels", preferences)
        attraction_query = generate_sql_query("attractions", preferences)
           
        flights = execute_sql_query(flight_query)
        hotels = execute_sql_query(hotel_query)
        attractions = execute_sql_query(attraction_query)
           
        itinerary = {
            "flights": flights,
            "hotels": hotels,
            "attractions": attractions
        }
        return itinerary
    
    travel_agent = Travel_Agent()
    preferences = {
        "destination": "Paris",
        "dates": "2025-04-01 to 2025-04-10",
        "budget": "moderate",
        "interests": ["museums", "cuisine"]
    }
    travel_agent.gather_preferences(preferences)
    itinerary = generate_recommendations(preferences)
    print("Suggested Itinerary:", itinerary)
    

أمثلة على استعلامات SQL

  1. استعلام الرحلات

    SELECT * FROM flights WHERE destination='Paris' AND dates='2025-04-01 to 2025-04-10' AND budget='moderate';
    
  2. استعلام الفنادق

    SELECT * FROM hotels WHERE destination='Paris' AND budget='moderate';
    
  3. استعلام المعالم

    SELECT * FROM attractions WHERE destination='Paris' AND interests='museums, cuisine';
    

من خلال الاستفادة من SQL كجزء من تقنية التوليد المعززة بالاسترجاع (RAG)، يمكن لوكلاء الذكاء الاصطناعي مثل وكيل السفر استرجاع واستخدام البيانات ذات الصلة بشكل ديناميكي لتقديم توصيات دقيقة وشخصية.

مثال على الوعي بالنفس (الميتاكونيجشن)

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

سنحاكي ذلك باستخدام مثال أساسي حيث يختار الوكيل الفنادق بناءً على مزيج من السعر والجودة، لكنه “يعكس” على قراراته ويعدلها وفقًا لذلك.

كيف يوضح هذا الميتاكونيجشن:

  1. القرار الأولي: يختار الوكيل أرخص فندق، دون فهم تأثير الجودة.
  2. التفكير والتقييم: بعد الاختيار الأولي، يتحقق الوكيل مما إذا كان الفندق خيارًا “سيئًا” باستخدام ملاحظات المستخدم. إذا وجد أن جودة الفندق منخفضة جدًا، يعكس على تفكيره.
  3. تعديل الاستراتيجية: يعدل الوكيل استراتيجيته بناءً على الانعكاس، حيث ينتقل من “الأرخص” إلى “الأعلى جودة”، محسنًا بذلك عملية اتخاذ القرار في التجارب المستقبلية.

إليك مثال:

class HotelRecommendationAgent:
    def __init__(self):
        self.previous_choices = []  # يخزن الفنادق التي تم اختيارها سابقًا
        self.corrected_choices = []  # يخزن الاختيارات المصححة
        self.recommendation_strategies = ['cheapest', 'highest_quality']  # الاستراتيجيات المتاحة

    def recommend_hotel(self, hotels, strategy):
        """
        Recommend a hotel based on the chosen strategy.
        The strategy can either be 'cheapest' or 'highest_quality'.
        """
        if strategy == 'cheapest':
            recommended = min(hotels, key=lambda x: x['price'])
        elif strategy == 'highest_quality':
            recommended = max(hotels, key=lambda x: x['quality'])
        else:
            recommended = None
        self.previous_choices.append((strategy, recommended))
        return recommended

    def reflect_on_choice(self):
        """
        Reflect on the last choice made and decide if the agent should adjust its strategy.
        The agent considers if the previous choice led to a poor outcome.
        """
        if not self.previous_choices:
            return "No choices made yet."

        last_choice_strategy, last_choice = self.previous_choices[-1]
        # لنفترض أن لدينا بعض ملاحظات المستخدم التي تخبرنا ما إذا كان الاختيار الأخير جيدًا أم لا
        user_feedback = self.get_user_feedback(last_choice)

        if user_feedback == "bad":
            # ضبط الاستراتيجية إذا كان الاختيار السابق غير مرضٍ
            new_strategy = 'highest_quality' if last_choice_strategy == 'cheapest' else 'cheapest'
            self.corrected_choices.append((new_strategy, last_choice))
            return f"Reflecting on choice. Adjusting strategy to {new_strategy}."
        else:
            return "The choice was good. No need to adjust."

    def get_user_feedback(self, hotel):
        """
        Simulate user feedback based on hotel attributes.
        For simplicity, assume if the hotel is too cheap, the feedback is "bad".
        If the hotel has quality less than 7, feedback is "bad".
        """
        if hotel['price'] < 100 or hotel['quality'] < 7:
            return "bad"
        return "good"

# محاكاة قائمة من الفنادق (السعر والجودة)
hotels = [
    {'name': 'Budget Inn', 'price': 80, 'quality': 6},
    {'name': 'Comfort Suites', 'price': 120, 'quality': 8},
    {'name': 'Luxury Stay', 'price': 200, 'quality': 9}
]

# إنشاء وكيل
agent = HotelRecommendationAgent()

# الخطوة 1: يوصي الوكيل بفندق باستخدام استراتيجية "الأرخص"
recommended_hotel = agent.recommend_hotel(hotels, 'cheapest')
print(f"Recommended hotel (cheapest): {recommended_hotel['name']}")

# الخطوة 2: يتأمل الوكيل في الاختيار ويضبط الاستراتيجية إذا لزم الأمر
reflection_result = agent.reflect_on_choice()
print(reflection_result)

# الخطوة 3: يوصي الوكيل مرة أخرى، هذه المرة باستخدام الاستراتيجية المعدلة
adjusted_recommendation = agent.recommend_hotel(hotels, 'highest_quality')
print(f"Adjusted hotel recommendation (highest_quality): {adjusted_recommendation['name']}")

قدرات الوعي بالنفس لدى الوكلاء

المفتاح هنا هو قدرة الوكيل على:

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

الخلاصة

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

هل لديك المزيد من الأسئلة حول نمط تصميم الوعي بالنفس؟

انضم إلى Microsoft Foundry Discord للتواصل مع متعلمين آخرين، حضور أوقات المكتب، والحصول على إجابات لأسئلتك حول وكلاء الذكاء الاصطناعي.

الدرس السابق

نمط تصميم الوكلاء المتعددين

الدرس التالي

وكلاء الذكاء الاصطناعي في الإنتاج


تنويه: تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.