الدرس 11 من 20

MCP ومهارات الوكيل

إطار مهارات الوكيل

4 دقيقة للقراءة

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

مشكلة قوائم الأدوات المسطحة

# هذا يصبح غير قابل للإدارة على نطاق واسع
tools = [
    "search_web", "search_files", "search_database",
    "read_file", "write_file", "delete_file",
    "run_python", "run_bash", "run_javascript",
    "send_email", "send_slack", "send_sms",
    "create_pr", "merge_pr", "review_pr",
    # ... 50 أداة أخرى
]

النموذج يرى 60+ أداة ويضيع رموزاً في تحديد أيها يستخدم.

المهارات: قدرات مجمعة

نظّم الأدوات في مجموعات مهارات منطقية:

skills/
├── web/
│   ├── SKILL.md
│   └── tools: [search, fetch, scrape]
├── filesystem/
│   ├── SKILL.md
│   └── tools: [read, write, list, delete]
├── coding/
│   ├── SKILL.md
│   └── tools: [run_python, run_bash, lint]
└── communication/
    ├── SKILL.md
    └── tools: [email, slack, sms]

نمط SKILL.md

كل مهارة لها بيان يصف ما تفعله:

# مهارة نظام الملفات

## الغرض
قراءة وكتابة وإدارة الملفات في مساحة العمل.

## متى تُستخدم
- المستخدم يطلب قراءة أو تعديل ملفات
- الحاجة لحفظ المخرجات على القرص
- إدارة هيكل المشروع

## متى لا تُستخدم
- القراءة من URLs (استخدم مهارة الويب)
- عمليات قاعدة البيانات (استخدم مهارة قاعدة البيانات)

## الأدوات
- `read_file`: قراءة محتويات الملف
- `write_file`: إنشاء أو الكتابة فوق الملفات
- `list_directory`: عرض الملفات في دليل
- `delete_file`: حذف ملف

## أمثلة
"اقرأ ملف الإعدادات" → read_file("config.json")
"احفظ هذا في output.txt" → write_file("output.txt", content)

الكشف التدريجي

لا تحمّل جميع المهارات دفعة واحدة. حمّل بناءً على السياق:

class SkillManager:
    def __init__(self):
        self.available_skills = self.discover_skills()
        self.active_skills = set()

    def discover_skills(self) -> dict:
        """البحث عن جميع ملفات SKILL.md."""
        skills = {}
        for path in Path("skills").glob("*/SKILL.md"):
            skill_name = path.parent.name
            skills[skill_name] = self.parse_skill(path)
        return skills

    def get_relevant_skills(self, user_message: str) -> list[str]:
        """تحديد أي مهارات قد تكون مطلوبة."""
        relevant = []

        # مطابقة كلمات بسيطة (استخدم embeddings للإنتاج)
        keywords = {
            "filesystem": ["ملف", "اقرأ", "اكتب", "احفظ", "دليل"],
            "web": ["بحث", "url", "موقع", "جلب", "http"],
            "coding": ["شغّل", "نفّذ", "python", "سكربت", "كود"],
            "communication": ["إيميل", "سلاك", "أرسل", "رسالة", "أبلغ"]
        }

        message_lower = user_message.lower()
        for skill, words in keywords.items():
            if any(word in message_lower for word in words):
                relevant.append(skill)

        return relevant or ["filesystem"]  # المهارة الافتراضية

    def activate_skills(self, skill_names: list[str]):
        """تحميل المهارات المطلوبة فقط."""
        self.active_skills = set(skill_names)
        return self.get_active_tools()

    def get_active_tools(self) -> list[dict]:
        """الحصول على تعريفات الأدوات للمهارات النشطة فقط."""
        tools = []
        for skill_name in self.active_skills:
            skill = self.available_skills[skill_name]
            tools.extend(skill["tools"])
        return tools

تحميل المهارات الواعي بالسياق

async def process_message(user_message: str):
    # الخطوة 1: تحديد المهارات ذات الصلة
    relevant = skill_manager.get_relevant_skills(user_message)

    # الخطوة 2: تفعيل تلك المهارات فقط
    tools = skill_manager.activate_skills(relevant)

    # الخطوة 3: استدعاء LLM بمجموعة أدوات مركزة
    response = await llm.chat(
        messages=[{"role": "user", "content": user_message}],
        tools=tools  # 5-10 أدوات فقط بدلاً من 60
    )

    return response

الفوائد

المنهجالأدوات المرئيةتكلفة الرموزجودة القرار
قائمة مسطحة (60 أداة)60عاليةضعيفة (مُغرَق)
مهارات (3 نشطة)15منخفضةجيدة (مركزة)

⚠ Prices change frequently. The values above are for illustration only and may be out of date. Always verify current pricing directly with the provider before making cost decisions: Anthropic · OpenAI · Google Gemini · Google Vertex AI · AWS Bedrock · Azure OpenAI · Mistral · Cohere · Together AI · DeepSeek · Groq · Fireworks AI · Perplexity · xAI · Cursor · GitHub Copilot · Windsurf.

تركيب المهارات

المهارات يمكن أن تعتمد على مهارات أخرى:

# skills/research/SKILL.md
name: research
description: بحث عميق في المواضيع
depends_on:
  - web        # للبحث
  - filesystem # لحفظ الملاحظات
tools:
  - research_topic
  - summarize_sources

ملاحظة نيردية: فكر في المهارات مثل إضافات VS Code. المستخدمون لا يثبتون كل الـ 30,000. يختارون ما يحتاجون.

التالي: تحميل المهارات ديناميكياً أثناء التشغيل. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 3: MCP ومهارات الوكيل

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

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

بدون إزعاج. إلغاء الاشتراك في أي وقت.