smolagents - وكلاء الذكاء الاصطناعي من الكود أولاً
smolagents هي مكتبة وكيل قليلة الحد الأدنى وموجهة للكود من Hugging Face. الفكرة الرئيسية: بدلاً من أن ينبعث النموذج من استدعاءات الأداة كـ blobs JSON، يكتب CodeAgent أكواد Python وينفذها مباشرة. التعبير عن الإجراءات كود يسمح بخطوة واحدة بأن تستدعي أدوات متعددة وتستخدم حلقات ومتغيرات وسلسلة منطق — مما يقلل عدد جولات LLM (تقريبًا ~30% أقل) ويحسن الأداء في المهام المعقدة. إنها محايدة للنموذج، وتدعم التنفيذ في صندوق حماية، وتظل قليلة الحد الأدنى والقابلة للقرصنة.
التثبيت
| الطريقة | الأمر |
|---|
| pip | pip install smolagents |
| مع أدوات إضافية | pip install "smolagents[toolkit]" |
| إضافات Sandbox | pip install "smolagents[e2b]" (أو [docker]) |
| تعيين مفتاح نموذج | export HF_TOKEN=... أو مفاتيح المزود |
| التحقق | python -c "import smolagents; print('ok')" |
المفاهيم الأساسية
| المصطلح | المعنى |
|---|
| CodeAgent | وكيل يكتب إجراءات Python (الافتراضي) |
| ToolCallingAgent | وكيل ينبعث من استدعاءات أداة JSON الكلاسيكية |
| Tool | استدعاء يمكن للوكيل استخدامه (مع مخطط) |
| Model | خادم LLM (HF أو OpenAI أو LiteLLM أو محلي) |
| Sandbox | حيث يعمل الكود المنشأ (محلي أو E2B أو Docker أو Modal) |
CodeAgent الحد الأدنى
from smolagents import CodeAgent, WebSearchTool, InferenceClientModel
agent = CodeAgent(
tools=[WebSearchTool()],
model=InferenceClientModel(), # HF Inference API
)
agent.run("كم ثانية سيستغرق الفهد لعبور جسر Golden Gate Bridge؟")
| كائن | الدور |
|---|
CodeAgent(tools=[...], model=...) | الوكيل |
agent.run("task") | تنفيذ مهمة من البداية إلى النهاية |
WebSearchTool() | أداة مدمجة |
InferenceClientModel() | خادم نموذج HF |
النماذج
| الخادم | الفئة |
|---|
| HF Inference API | InferenceClientModel |
| تحويلات محلية | TransformersModel |
| أي مزود عبر LiteLLM | LiteLLMModel(model_id="openai/gpt-4o") |
| خادم متوافق مع OpenAI | OpenAIServerModel(...) |
| vLLM / نقاط نهاية محلية | عبر LiteLLM / OpenAI-compatible |
تحديد الأدوات
from smolagents import tool
@tool
def get_weather(city: str) -> str:
"""Return the weather for a city.
Args:
city: The city to look up.
"""
return f"Sunny in {city}"
agent = CodeAgent(tools=[get_weather], model=InferenceClientModel())
| آلية | الاستخدام |
|---|
@tool decorator | حول دالة مكتوبة إلى أداة |
Tool subclass | مزيد من التحكم في المخطط/السلوك |
| Tool Collections | استيراد مجموعات من الأدوات (على سبيل المثال من المحور) |
| MCP tools | ربط خوادم Model Context Protocol |
التنفيذ في صندوق حماية (مهم)
لأن CodeAgents تقوم بتشغيل Python المُنشأ، قيّده في الإنتاج.
| صندوق الحماية | الكيفية |
|---|
| محلي (افتراضي) | يعمل في العملية — جيد للتطوير الموثوق به فقط |
| E2B | executor_type="e2b" (صندوق حماية بعيد) |
| Docker | executor_type="docker" |
| Modal | التنفيذ البعيد في صندوق حماية |
| الواردات المسموحة | قيّد الوحدات التي قد يستوردها الكود المُنشأ |
agent = CodeAgent(tools=[...], model=..., executor_type="e2b")
وكلاء متعددين والاسترجاع
| النمط | الكيفية |
|---|
| وكلاء مُدارون | أعط وكيلًا واحدًا وكلاء آخرين كأدوات |
| Retrieval/RAG | أضف أداة retriever للإجابات المؤسسة |
| Planning | تمكين خطوات التخطيط الدورية للمهام الصعبة |
| Handoffs | اجمع المتخصصين تحت وكيل مدير |
سير العمل الشائع
# وكيل بحث يتصفح ويحسب في الكود
from smolagents import CodeAgent, WebSearchTool, InferenceClientModel
agent = CodeAgent(tools=[WebSearchTool()], model=InferenceClientModel(),
executor_type="docker")
agent.run("قارن نمو السكان في طوكيو ودلهي منذ عام 2000.")
smolagents مقابل أطر عمل وكيل أخرى
| الجانب | smolagents | LangGraph | Pydantic AI |
|---|
| تنسيق الإجراء | كود Python | Graph/state machine | استدعاءات أداة مكتوبة |
| الحجم/الفلسفة | حد أدنى وقابل للقرصنة | تنسيق الحالة الكامل | آمن من حيث النوع، نمط FastAPI |
| كفاءة LLM | عدد أقل من الاستدعاءات (الكود) | يعتمد | قياسي |
| الأفضل لـ | حلقات كود وكيل واحد | وكلاء ثابتة ودائمة | وكلاء إنتاج آمنة من حيث النوع |
الموارد