سنرى هنا استخداماً متقدماً للأداة.
إذا كنت جديدًا في بناء الوكلاء، تأكد أولاً من قراءة مقدمة للوكلاء و جولة إرشادية في smolagents.
ما هي الأداة، وكيفية بناء واحدة؟ #
الأداة هي في الغالب دالة يمكن أن يستخدمها العامل في نظام وكيلي.
ولكن لاستخدامها، يجب إعطاء LLM واجهة برمجة التطبيقات: الاسم، ووصف الأداة، وأنواع المدخلات والأوصاف، ونوع المخرجات.
لذا لا يمكن أن تكون دالة فقط. يجب أن تكون فئة.
لذا، فإن الأداة في جوهرها عبارة عن فئة تغلف دالة ببيانات وصفية تساعد LLM على فهم كيفية استخدامها.
إليك كيف يبدو الأمر:
تم النسخ
من أداة استيراد smolagents smolagents صنف HFModelDownloadsTool(أداة): الاسم = "model_download_counter" الوصف = """" هذه أداة تقوم بإرجاع أكثر النماذج التي تم تنزيلها لمهمة معينة على Hugging Face Hub. تقوم بإرجاع اسم نقطة التحقق.""""" المدخلات = {" "مهمة": { "نوع": "سلسلة", "الوصف": "فئة المهمة (مثل تصنيف النص، أو تقدير العمق، إلخ)", } } نوع_المخرجات = "سلسلة" def forward(self, task: str): من huggingface_hub استيراد قائمة_النماذج النموذج = التالي(تالي (تكرر(list_models(filter=مهمة، فرز="تنزيلات"، اتجاه=-1))) إرجاع model.id أداة_التنزيلات_الموديل = HFModelDownloadsTool()
الفئات الفرعية للأداة المخصصة الأداة لوراثة طرق مفيدة. تحدد الفئة الفرعية أيضًا:
- سمة
الاسم
والذي يتوافق مع اسم الأداة نفسها. يصف الاسم عادةً ما تقوم به الأداة. بما أن الشيفرة تُرجع النموذج الذي يحتوي على أكبر عدد من التنزيلات لمهمة ما، دعنا نسميهاعداد_تحميل_النموذج
. - سمة
الوصف
يُستخدم لملء موجه النظام الخاص بالوكيل. - أن
المدخلات
وهو عبارة عن قاموس يحتوي على مفاتيح"النوع"
و"الوصف"
. يحتوي على معلومات تساعد مترجم بايثون على اتخاذ خيارات مدروسة حول المدخلات. - أن
نوع_الإخراج
التي تحدد نوع الإخراج. الأنواع لكل منالمدخلات
ونوع_الإخراج
يجب أن يكون تنسيقات بيدانتيك، يمكن أن تكون أيًا من هذه:~أنواع_مصرح بها()
. - A
إلى الأمام
التي تحتوي على شيفرة الاستدلال المراد تنفيذها.
وهذا كل ما يحتاج إليه الوكيل!
هناك طريقة أخرى لبناء أداة. في جولة_إرشاديةقمنا بتنفيذ أداة باستخدام @أداة
مصمم ديكور إن أداة() المُزخرف هو الطريقة الموصى بها لتعريف الأدوات البسيطة، ولكن في بعض الأحيان تحتاج إلى أكثر من ذلك: استخدام عدة أساليب في الصنف لمزيد من الوضوح، أو استخدام سمات إضافية للصنف.
في هذه الحالة، يمكنك بناء أداتك عن طريق إنشاء فئة فرعية من الأداة كما هو موضح أعلاه.
شارك أداتك مع المحور #
يمكنك مشاركة أداتك المخصصة مع المحور عن طريق الاتصال بـ الدفع_إلى_المركز() على الأداة. تأكد من إنشاء مستودع لها على المحور واستخدام رمز مميز مع حق الوصول للقراءة.
تم النسخ
model_downloads_tool.push_to_hub("{your_username}/hf-model-downloads", token="")
لكي يعمل الدفع إلى Hub، يجب أن تحترم أداتك بعض القواعد:
- جميع الطرق مكتفية بذاتها، على سبيل المثال استخدام المتغيرات التي تأتي إما من الحجج الخاصة بها.
- وفقاً للنقطة أعلاه, يجب تعريف جميع الواردات مباشرةً ضمن وظائف الأداة، وإلا ستحصل على خطأ عند محاولة استدعاء حفظ() أو الدفع_إلى_المركز() بأداتك المخصصة.
- إذا قمت بتصنيف الفئة الفرعية
__بداية ___
لا يمكنك إعطاؤه أي وسيطة أخرى غيرذاتي
. هذا لأنه من الصعب تتبع الوسيطات التي تم تعيينها أثناء تهيئة مثيل أداة معينة، مما يمنع من مشاركتها بشكل صحيح مع المحور. وعلى أي حال، الفكرة من إنشاء صنف محدد هو أنه يمكنك بالفعل تعيين سمات الصنف لأي شيء تحتاج إلى ترميزه (فقط قم بتعيينالمتغير الخاص بك=(...)
مباشرة أسفل المحورصنف أداتك(أداة):
سطر). وبالطبع لا يزال بإمكانك إنشاء سمة صنف في أي مكان في شفرتك عن طريق تعيين الأشياء إلىالذات_المتغير الخاص بك
.
بمجرد دفع أداتك إلى Hub، يمكنك تصورها. هنا هو أداة_تحميل_النماذج
التي دفعتها. يحتوي على واجهة تدرج لطيفة.
عند الغوص في ملفات الأداة، يمكنك أن تجد أن كل منطق الأداة موجود تحت tool.py. هذا هو المكان الذي يمكنك فيه فحص أداة يشاركها شخص آخر.
ثم يمكنك تحميل الأداة باستخدام تحميل_أداة() أو إنشائه باستخدام من_المركز() وتمريرها إلى الأدوات
في وكيلك. نظرًا لأن تشغيل الأدوات يعني تشغيل شيفرة مخصصة، فأنت بحاجة إلى التأكد من أنك تثق في المستودع، وبالتالي نطلب تمرير رمز_الثقة_الرمز_المتصل=صحيح
لتحميل أداة من المحور.
تم النسخ
من smolagents smolagents استيراد أداة التحميل، وكيل الكود أداة_تحميل_النموذج_التحميل = أداة_التحميل( "{your_username}/hf-model-downloads", trust_remote_رمز_الثقة=صحيح )
استيراد مساحة كأداة #
يمكنك استيراد مساحة من المحور مباشرةً كأداة باستخدام أداة أداة.من_الفضاء() الطريقة!
ما عليك سوى توفير معرّف المساحة على المحور واسمها ووصف يساعد الوكيل على فهم ما تقوم به الأداة. تحت الغطاء، سيستخدم هذا غراديو-عميل
مكتبة للاتصال بالفضاء.
على سبيل المثال، لنقم باستيراد FLUX.1-dev مساحة من المحور واستخدامها لإنشاء صورة.
تم النسخ
image_generation_tool = Tool.from_space( "black-forest-labs/FLUX.1-schnell", name="image_generator", الوصف="توليد صورة من موجه" ) أداة_توليد_الصورة("شاطئ مشمس")
وها هي صورتك! 🏖️

ثم يمكنك استخدام هذه الأداة تمامًا مثل أي أداة أخرى. على سبيل المثال، دعنا نحسّن المطالبة أرنب يرتدي بدلة فضاء
وتوليد صورة لها.
تم النسخ
من smolagents smolagents استيراد CodeAgent, HfApiModel النموذج = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct") الوكيل = CodeAgent(الأدوات=[أداة_توليد_الصور]، النموذج=النموذج) agent.run( "تحسين هذه المطالبة، ثم توليد صورة لها."، المطالبة="أرنب يرتدي بدلة فضاء )
تم النسخ
=== أفكار العميل: يمكن أن تكون الصورة_المحسّنة "أرنب يرتدي بدلة فضاء زرقاء زاهية على سطح القمر، تحت غروب الشمس البرتقالي الساطع، مع رؤية الأرض في الخلفية" الآن بعد أن قمت بتحسين المطالبة، يمكنني استخدام أداة إنشاء الصور لتوليد صورة بناءً على هذه المطالبة. >> يقوم الوكيل بتنفيذ الشيفرة أدناه: image = image_generator(المطالبة="أرنب يرتدي بدلة فضاء زرقاء زاهية، على سطح القمر، تحت غروب الشمس البرتقالي الساطع، مع رؤية الأرض في الخلفية") إجابة نهائية(الصورة)

ما مدى روعة هذا؟ 🤩
استخدام أدوات سلسلة اللغات #
نحن نحب لانغتشين ونعتقد أنها تحتوي على مجموعة أدوات مقنعة للغاية. لاستيراد أداة من LangChain، استخدم أداة من_سلسلة_لغة()
الطريقة.
إليك كيف يمكنك استخدامها لإعادة إنشاء نتيجة بحث المقدمة باستخدام أداة البحث على الويب LangChain. ستحتاج هذه الأداة إلى تثبيت نقطة تثبيت langchain google-search-results -q
للعمل بشكل صحيح.
تم النسخ
من langchain.agents.agents استيراد أدوات_التحميل أداة_البحث_أداة = Tool.from_langchain(load_tools(["serpapi"])[0]) وكيل = CodeAgent(الأدوات=[أداة_البحث]، النموذج=النموذج) agent.run("كم عدد الكتل الإضافية (يُشار إليها أيضًا بالطبقات) الموجودة في المشفر الأساسي BERT مقارنةً بالمشفر من البنية المقترحة في Attention is All You Need؟)
إدارة مجموعة أدوات وكيلك #
يمكنك إدارة صندوق أدوات الوكيل عن طريق إضافة أداة أو استبدالها في السمة أدوات الوكيل
، لأنه قاموس قياسي.
دعونا نضيف أداة_تحميل_النموذج
إلى وكيل موجود تمت تهيئته باستخدام صندوق الأدوات الافتراضي فقط.
تم النسخ
من smolagents استيراد نموذج HfApiModel model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct") وكيل = CodeAgent (أدوات=[]، نموذج=نموذج، إضافة_أدوات_قاعدة_أدوات=صحيح) agent.tools[model_download_tool.name] = model_download_tool
يمكننا الآن الاستفادة من الأداة الجديدة:
تم النسخ
agent.run( "هل يمكنك أن تعطيني اسم النموذج الذي يحتوي على أكبر عدد من التنزيلات في مهمة "تحويل النص إلى فيديو" على مركز تعانق الوجوه ولكن عكس الحروف؟ )
احذر من إضافة الكثير من الأدوات إلى الوكيل: فقد يؤدي ذلك إلى إرباك محركات LLM الأضعف.
استخدام مجموعة من الأدوات #
يمكنك الاستفادة من مجموعات الأدوات عن طريق استخدام كائن ToolCollection، مع سبيكة المجموعة التي تريد استخدامها. ثم مررهم كقائمة لتهيئة وكيلك وابدأ باستخدامهم!
تم النسخ
من smolagents smolagents استيراد مجموعة أدوات، وكيل كود image_tool_collection = ToolCollection( collection_slug="huggingface-tools/diffusion-tools-6630bb19a942c2306a2cdb6f", token="" ) الوكيل = CodeAgent(Tools=[*image_tool_collect_collection.Tools]، model=model، add_base_tools=True) agent.run("الرجاء رسم صورة للأنهار والبحيرات.")
لتسريع البدء، لا يتم تحميل الأدوات إلا إذا تم استدعاؤها من قبل الوكيل.