دليل عملي لتصميم تدفقات عمل متوازية ذكية باستخدام Parsl لتنفيذ وكلاء الذكاء الاصطناعي متعددي الأدوات
في هذا البرنامج التعليمي، سنقوم بتنفيذ خط أنابيب لوكيل ذكاء اصطناعي باستخدام مكتبة Parsl، مستفيدين من قدراتها على التنفيذ المتوازي لتشغيل مهام حسابية متعددة كتطبيقات Python مستقلة. سنقوم بتكوين ThreadPoolExecutor
محلي للوصول إلى التزامن، وتحديد أدوات متخصصة مثل حساب متتالية فيبوناتشي، وعدّ الأعداد الأولية، واستخراج الكلمات المفتاحية، ومحاكاة استدعاءات واجهة برمجة التطبيقات (API)، وتنسيقها من خلال مُخطط خفيف الوزن يُعيّن هدف المستخدم إلى استدعاءات المهام. يتم تجميع مخرجات جميع المهام ومرورها عبر نموذج توليد نصوص من Hugging Face لإنتاج ملخص متماسك وقابل للقراءة من قبل الإنسان.
تثبيت المكتبات وتكوين Parsl
نبدأ بتثبيت المكتبات المطلوبة واستيراد جميع الوحدات اللازمة لسير عملنا. ثم نقوم بتكوين Parsl باستخدام ThreadPoolExecutor
محلي لتشغيل المهام بالتزامن وتحميل هذا التكوين حتى نتمكن من تنفيذ تطبيقات Python الخاصة بنا بالتوازي.
pip install -q parsl transformers accelerate
import math, json, time, random
from typing import List, Dict, Any
import parsl
from parsl.config import Config
from parsl.executors import ThreadPoolExecutor
from parsl import python_app
parsl.load(Config(executors=[ThreadPoolExecutor(label="local", max_threads=8)]))
تعريف أدوات وكيل الذكاء الاصطناعي
سنُعرّف أربع دوال @python_app
من Parsl تعمل بشكل غير متزامن كجزء من سير عمل وكيلنا. سننشئ آلة حاسبة لمتتالية فيبوناتشي، وروتينًا لعدّ الأعداد الأولية، ومستخرجًا للكلمات المفتاحية لمعالجة النصوص، وأداة محاكاة تُقلّد استدعاءات واجهة برمجة التطبيقات الخارجية مع تأخيرات عشوائية. تتيح لنا هذه التطبيقات المعيارية إجراء عمليات حسابية متنوعة بالتوازي، مما يشكل اللبنات الأساسية لوكيل الذكاء الاصطناعي متعدد الأدوات لدينا.
@python_app
def calc_fibonacci(n: int) -> Dict[str, Any]:
# ... (كود حساب متتالية فيبوناتشي) ...
@python_app
def count_primes(limit: int) -> Dict[str, Any]:
# ... (كود عد الأعداد الأولية) ...
@python_app
def extract_keywords(text: str, k: int = 8) -> Dict[str, Any]:
# ... (كود استخراج الكلمات المفتاحية) ...
@python_app
def simulate_tool(name: str, payload: Dict[str, Any]) -> Dict[str, Any]:
# ... (كود محاكاة استدعاء API) ...
توليد الملخص باستخدام نموذج لغة كبير صغير
نقوم بتنفيذ دالة tiny_llm_summary
التي تستخدم خط أنابيب Hugging Face مع نموذج sshleifer/tiny-gpt2
الخفيف الوزن لإنشاء ملخصات موجزة لنتائج وكيلنا. يقوم بتنسيق مخرجات المهام المُجمعة كنقاط رئيسية، ويضيف تلميح “الخلاصة: “، ويستخرج فقط الخلاصة المُولدة النهائية للحصول على ملخص نظيف وقابل للقراءة من قبل الإنسان.
def tiny_llm_summary(bullets: List[str]) -> str:
# ... (كود توليد الملخص) ...
تخطيط وتنفيذ سير عمل وكيل الذكاء الاصطناعي
نُعرّف دالة plan
لربط هدف المستخدم بقائمة مُنسقة من استدعاءات الأدوات. تقوم بالتحقق من نص الهدف بحثًا عن كلمات رئيسية مثل “فيبوناتشي” أو “الأعداد الأولية” لتشغيل مهام حسابية محددة، ثم تضيف إجراءات افتراضية مثل استعلامات واجهة برمجة التطبيقات المُحاكاة، واسترداد المقاييس، واستخراج الكلمات الرئيسية، مما يشكل مخطط التنفيذ لوكيل الذكاء الاصطناعي لدينا.
def plan(user_goal: str) -> List[Dict[str, Any]]:
# ... (كود تخطيط المهام) ...
في دالة run_agent
، نقوم بتنفيذ سير عمل الوكيل الكامل من خلال إنشاء خطة مهام أولاً من هدف المستخدم، ثم نشر كل أداة كتطبيق Parsl ليتم تشغيله بالتوازي. بمجرد اكتمال جميع المستقبليات، نقوم بتحويل نتائجها إلى نقاط رئيسية واضحة وإدخالها في دالة tiny_llm_summary
لإنشاء سرد موجز. تقوم الدالة بإرجاع قاموس مُنسق يحتوي على الهدف الأصلي، والنقاط الرئيسية المُفصّلة، والملخص المُولّد بواسطة نموذج اللغة الكبير، ومخرجات الأدوات الخام.
def run_agent(user_goal: str) -> Dict[str, Any]:
# ... (كود تنفيذ وكيل الذكاء الاصطناعي) ...
مثال على التنفيذ
في كتلة التنفيذ الرئيسية، نُعرّف هدفًا نموذجيًا يُجمع بين الحساب العددي، وعدّ الأعداد الأولية، وتوليد الملخصات. نقوم بتشغيل الوكيل على هذا الهدف، وطباعة النقاط الرئيسية المُولّدة، وعرض الملخص المُصاغ بواسطة نموذج اللغة الكبير، ومعاينة مخرجات JSON الخام للتحقق من النتائج القابلة للقراءة من قبل الإنسان والنتائج المُنسقة.
if __name__ == "__main__":
# ... (كود مثال التنفيذ) ...
في الختام، يُظهر هذا التنفيذ كيف يمكن لنموذج التطبيق غير المتزامن في Parsl تنظيم أحمال العمل المتنوعة بكفاءة بالتوازي، مما يُمكّن وكيل الذكاء الاصطناعي من الجمع بين التحليل العددي، ومعالجة النصوص، والخدمات الخارجية المُحاكاة في خط أنابيب موحد. من خلال دمج نموذج لغة كبير صغير في المرحلة النهائية، نقوم بتحويل النتائج المُنسقة إلى لغة طبيعية، مما يُوضح كيف يمكن دمج الحساب المتوازي ونماذج الذكاء الاصطناعي لإنشاء وكلاء سريعة الاستجابة وقابلة للتوسيع مناسبة للمهام في الوقت الفعلي أو على نطاق واسع.
اترك تعليقاً