الأدوات والموارد والتعليمات

دمج القدرات

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

القوة الحقيقية لـ MCP تأتي من دمج الأدوات والموارد والتعليمات في أنظمة متماسكة.

مثال كامل: خادم قاعدة المعرفة

دعنا نبني خادم قاعدة معرفة يجمع كل قدرات MCP:

from mcp.server import Server
from mcp.types import Tool, Resource, Prompt, TextContent

server = Server(name="knowledge-base")

# 1. الموارد: كشف المستندات
@server.list_resources()
async def list_resources():
    docs = await db.get_all_documents()
    return [
        Resource(
            uri=f"doc://{doc.id}",
            name=doc.title,
            description=f"مستند: {doc.title}",
            mimeType="text/markdown"
        )
        for doc in docs
    ]

@server.read_resource()
async def read_resource(uri: str):
    doc_id = uri.replace("doc://", "")
    doc = await db.get_document(doc_id)
    return [TextContent(type="text", text=doc.content)]

# 2. الأدوات: البحث والتعديل
@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="search_knowledge",
            description="البحث في قاعدة المعرفة",
            inputSchema={
                "type": "object",
                "properties": {
                    "query": {"type": "string"},
                    "limit": {"type": "integer", "default": 5}
                },
                "required": ["query"]
            }
        ),
        Tool(
            name="add_document",
            description="إضافة مستند جديد إلى قاعدة المعرفة",
            inputSchema={
                "type": "object",
                "properties": {
                    "title": {"type": "string"},
                    "content": {"type": "string"},
                    "tags": {"type": "array", "items": {"type": "string"}}
                },
                "required": ["title", "content"]
            }
        )
    ]

# 3. التعليمات: تفاعلات موحدة
@server.list_prompts()
async def list_prompts():
    return [
        Prompt(
            name="summarize_topic",
            description="تلخيص جميع المستندات حول موضوع",
            arguments=[
                PromptArgument(name="topic", required=True)
            ]
        )
    ]

سير العمل: الذكاء الاصطناعي يستخدم جميع القدرات

إليك كيف يمكن للذكاء الاصطناعي استخدام هذا الخادم:

  1. قراءة المورد للحصول على محتوى المستند الكامل
  2. استدعاء الأداة للبحث عن مستندات ذات صلة
  3. استخدام التعليمات لهيكلة طلب الملخص
المستخدم: "لخص سياسات أمان الذكاء الاصطناعي لدينا"

إجراءات الذكاء الاصطناعي:
1. search_knowledge(query="سياسات أمان الذكاء الاصطناعي") ← يحصل على معرفات المستندات
2. read_resource("doc://policy-123") ← يحصل على المحتوى الكامل
3. read_resource("doc://policy-456") ← يحصل على المزيد من المحتوى
4. يلخص بناءً على المستندات

تنسيق الموارد والأدوات

صمم الموارد والأدوات للعمل معاً:

# المورد: عرض للقراءة فقط
Resource(uri="user://123", name="ملف المستخدم 123")

# الأداة: تعديل المستخدم
Tool(name="update_user", description="تحديث ملف المستخدم")

أفضل الممارسات

الممارسة السبب
فصل واضح الموارد للقراءة، الأدوات للإجراءات
URIs متسقة تجعل الموارد قابلة للتنبؤ
تسمية ذات صلة user://123 مع أداة update_user
توثيق العلاقات اشرح في الأوصاف

الآن دعنا نطبق هذه الأنماط في مختبر عملي. :::

اختبار

اختبار الوحدة 3: الأدوات والموارد والتعليمات

خذ الاختبار