في هذا الدفتر سنقوم بعمل متصفح الويب متعدد الوكلاء: نظام وكيلي مع عدة وكلاء يتعاونون لحل المشاكل باستخدام الويب!
سيكون تسلسلاً هرميًا بسيطًا، باستخدام وكيل مُدار
لالتفاف وكيل بحث الويب المُدار:
تم النسخ
+----------------+ | وكيل المدير | +----------------+ | _______________|______________ | | مترجم شفرة +--------------------------------+ أداة |العامل المُدار | | +------------------+ | | | وكيل البحث في الويب ||| | +------------------+ | | | | | | أداة البحث في الويب || | | أداة زيارة صفحة الويب | +--------------------------------+
لنقم بإعداد هذا النظام.
قم بتشغيل السطر أدناه لتثبيت التبعيات المطلوبة:
تم النسخ
!pip install markdownify duckduckgo-search smolagents --upgrade -q
دعنا نسجّل الدخول من أجل استدعاء واجهة برمجة تطبيقات HF Inference API:
تم النسخ
من huggingface_hub استيراد تسجيل الدخول من huggingface_hub تسجيل الدخول()
⚡️ سيتم تشغيل وكيلنا بواسطة Qwen/Qwen2.5-Coder-32B-Instructer باستخدام نموذج HfApiModel
الفئة التي تستخدم واجهة برمجة تطبيقات الاستدلال الخاصة ب HF: تسمح واجهة برمجة تطبيقات الاستدلال بتشغيل أي نموذج نظام تشغيل بسرعة وسهولة.
ملاحظة: تستضيف واجهة برمجة التطبيقات الاستدلالية نماذج تستند إلى معايير مختلفة، وقد يتم تحديث النماذج المنشورة أو استبدالها دون إشعار مسبق. تعرف على المزيد عنها هنا.
تم النسخ
model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"
🔍 إنشاء أداة بحث على الويب #
بالنسبة لتصفح الويب، يمكننا بالفعل استخدام أداة DuckDuckGoSearchTool
أداة لتوفير أداة مكافئة للبحث على Google.
ولكن بعد ذلك سنحتاج أيضًا إلى أن نكون قادرين على الوصول إلى الصفحة التي تم العثور عليها بواسطة أداة DuckDuckGoSearchTool
. وللقيام بذلك، يمكننا استيراد زيارةصفحة الويبأداة
، ولكننا سنقوم ببنائه مرة أخرى لنرى كيف يتم ذلك.
لذا دعونا نصنع زيارةصفحة الويبأداة
أداة من الصفر باستخدام ماركدونيفاي
.
تم النسخ
إعادة الاستيراد استيراد الطلبات من markdownify استيراد markdownify من requests.exceptions.exceptions استيراد RequestException من أداة استيراد smolagents من smolagents @الأداة def visit_webpage(url: str) -> str: """" يزور صفحة ويب على عنوان URL المحدد ويعيد محتواها كسلسلة تخفيض السعر. الأداة: url: عنوان URL لصفحة الويب المراد زيارتها. الإرجاع: محتوى صفحة الويب التي تم تحويلها إلى Markdown، أو رسالة خطأ إذا فشل الطلب. """ المحاولة: # إرسال طلب GET إلى عنوان URL الاستجابة = طلبات.get(url) respond.raise_for_status() # رفع استثناء لرموز الحالة السيئة # تحويل محتوى HTML إلى Markdown markdown_content = markdownify(response.text).strip() # إزالة فواصل الأسطر المتعددة markdown_content = re.sub(r"\n{3,}", "\n\n\n", markdown_content) إرجاع markdown_content باستثناء استثناء الطلب ك e: الإرجاع f"خطأ في جلب صفحة الويب: {str(e)}" باستثناء استثناء ك e: الإرجاع f"حدث خطأ غير متوقع: {str(e)}"
حسنًا، لنقم الآن بتهيئة الأداة واختبارها!
تم النسخ
طباعة(visit_webpage("https://en.wikipedia.org/wiki/Hugging_Face")[:500])
بناء نظامنا متعدد الوكلاء 🤖🤝🤖🤖 #
والآن بعد أن أصبح لدينا جميع الأدوات البحث
و زيارة_صفحة_الويب
يمكننا استخدامها لإنشاء وكيل الويب.
ما التكوين الذي يجب اختياره لهذا العامل؟
- تصفح الويب هو مهمة ذات خط زمني واحد لا تتطلب استدعاءات أدوات متوازية، لذا فإن استدعاء أداة JSON يعمل بشكل جيد لذلك. وبالتالي نختار بالتالي
وكيل JsonAgent
. - أيضًا، نظرًا لأن البحث على الويب يتطلب أحيانًا استكشاف العديد من الصفحات قبل العثور على الإجابة الصحيحة، فإننا نفضل زيادة عدد
الحد الأقصى_للخطوات
إلى 10.
تم النسخ
من smolagents استيراد ( CodeAgent, ToolCallingAgent, HfApiModel, ManagedAgent, DuckDuckGoSearchTool, LiteLLLLModel, ) نموذج = HfApiModel(model_id) web_agent = وكيل استدعاء الأدوات( الأدوات=[DuckDuckGoSearchTool()، visit_webpage], النموذج=النموذج, max_steps=10, )
ثم نلف هذا العامل في وكيل مُدار
التي ستجعلها قابلة للاستدعاء من قبل وكيلها المدير.
تم النسخ
وكيل_ويب_مدار = وكيل مُدار( وكيل=web_agent, name="بحث", الوصف="يدير عمليات البحث على الويب نيابةً عنك. أعطه استفسارك كوسيطة.".", )
أخيرًا نقوم بإنشاء وكيل مدير، وعند التهيئة نقوم بتمرير الوكيل المُدار إليه في الوكلاء_المُدارون
الحجة.
نظرًا لأن هذا الوكيل هو المكلف بالتخطيط والتفكير، فإن التفكير المتقدم سيكون مفيدًا، لذا فإن CodeAgent
سيكون الخيار الأفضل.
أيضًا، نريد طرح سؤال يتضمن السنة الحالية وإجراء حسابات بيانات إضافية: لذا دعونا نضيف الواردات_المصرح بها الإضافية=["الوقت"، "numpy"، "pandas"]
، فقط في حالة احتياج الوكيل لهذه الحزم.
تم النسخ
مدير_وكيل = CodeAgent( أدوات=[], النموذج=النموذج, man_agents=[manager_web_agent], additional_authorized_imports=["time", "numpy", "pandas"], )
هذا كل شيء! الآن دعونا نشغل نظامنا! نختار سؤالاً يتطلب بعض العمليات الحسابية والبحثية:
تم النسخ
الإجابة = manager_agent.run("إذا استمر التدريب على LLM في التوسع بالإيقاع الحالي حتى عام 2030، فما هي الطاقة الكهربائية بالجيغاواط المطلوبة لتشغيل أكبر عمليات التدريب بحلول عام 2030؟ كم سيقابل ذلك مقارنةً ببعض الدول؟ يرجى تقديم مصدر لأي أرقام مستخدمة.")).
نحصل على هذا التقرير كإجابة:
تم النسخ
استنادًا إلى توقعات النمو الحالية وتقديرات استهلاك الطاقة، إذا استمر التوسع في التدريب على إدارة التعلم مدى الحياة بالإيقاع بالإيقاع الحالي حتى عام 2030: 1. ستبلغ الطاقة الكهربائية اللازمة لتشغيل أكبر عمليات التدريب بحلول عام 2030 حوالي 303.74 جيجاواط، وهو ما أي ما يعادل حوالي 2,660,762 جيجاوات/ساعة في السنة. 2. وبمقارنة ذلك باستهلاك الدول للكهرباء: - سيعادل ذلك حوالي 341 تيرابايت 5 تيرابايت من إجمالي استهلاك الصين من الكهرباء. - وسيتجاوز إجمالي استهلاك الكهرباء في الهند (184%) وروسيا (267%) واليابان (291%). - وسيبلغ استهلاك الكهرباء ما يقرب من 9 أضعاف استهلاك الكهرباء في دول مثل إيطاليا أو المكسيك. 3. مصدر الأرقام: - يأتي التقدير المبدئي البالغ 5 جيجاوات للتدريب المستقبلي على الطاقة الكهربائية منخفضة الاستهلاك من الرئيس التنفيذي لشركة AWS مات جارمان. - واستخدمت توقعات النمو معدل نمو سنوي مركب يبلغ 79.801 تيرابايت 5 تيرابايت من أبحاث السوق التي أجرتها شركة Springs. - بيانات استهلاك الكهرباء في الدولة مأخوذة من إدارة معلومات الطاقة الأمريكية، بشكل أساسي لعام 2021.
يبدو أننا سنحتاج إلى بعض محطات الطاقة الضخمة إذا كانت فرضية التحجيم لا يزال صحيحًا.
تمكن عملاؤنا من التعاون بكفاءة في حل المهمة! ✅
💡 يمكنك بسهولة توسيع هذا التنسيق ليشمل المزيد من الوكلاء: أحدهم يقوم بتنفيذ التعليمات البرمجية، والآخر يقوم بالبحث في الويب، والآخر يتعامل مع تحميل الملفات...