Skip to main content

تنسيق الوكلاء المتعددين

نسّق عدة وكلاء LLM باستخدام عقول Synapse المشتركة، المهام، والدردشة.


تنسيق الوكلاء المتعددين

عندما لديك عدة وكلاء LLM يعملون على مهام ذات صلة، يوفّر Synapse طبقة التنسيق — الذاكرة المشتركة، إسناد المهام، والدردشة غير المتزامنة.

الأنماط

النمط 1: العقل المشترك (مصدر واحد للحقيقة)

جميع الوكلاء يشاركون Mind Key واحد. يقرؤون/يكتبون نفس مخزن الذاكرة.

┌──────────┐  ┌──────────┐  ┌──────────┐
│ Agent A  │  │ Agent B  │  │ Agent C  │
└────┬─────┘  └────┬─────┘  └────┬─────┘
     │             │             │
     └─────────────┼─────────────┘
                   ▼
           ┌──────────────┐
           │ Shared Mind  │
           │  (one key)   │
           └──────────────┘

حالة الاستخدام: فريق صغير من الوكلاء يعملون على مشروع واحد.

الإعداد:

# جميع الوكلاء يستخدمون نفس Mind Key
export SYNAPSE_MIND_KEY=mk_shared_key...

التنسيق عبر المهام:

# الوكيل A ينشئ مهمة
create_task("Review PR #42", priority="high")

# الوكيل B يلتقطها
tasks = list_tasks(status="pending")
if tasks:
    task = tasks[0]
    update_task(task["id"], status="in_progress")
    # ... نفّذ العمل ...
    update_task(task["id"], status="done")

النمط 2: عقول متخصصة (سياقات معزولة)

كل وكيل له عقله الخاص. يتواصلون عبر عقل "تنسيق" مشترك.

┌──────────┐  ┌──────────┐  ┌──────────┐
│ Coder    │  │ Reviewer │  │ Deployer │
│ Agent    │  │ Agent    │  │ Agent    │
└────┬─────┘  └────┬─────┘  └────┬─────┘
     │             │             │
     ▼             ▼             ▼
┌─────────┐  ┌─────────┐  ┌─────────┐
│ Mind C  │  │ Mind R  │  │ Mind D  │
└─────────┘  └─────────┘  └─────────┘
     │             │             │
     └─────────────┼─────────────┘
                   ▼
           ┌──────────────────┐
           │ Coordination Mind│
           │ (shared)         │
           └──────────────────┘

حالة الاستخدام: وكلاء بتخصصات مختلفة (برمجة، مراجعة، نشر).

الإعداد:

# وكيل البرمجة
SYNAPSE_MIND_KEY=mk_coder... MCP_TRANSPORT=stdio npx synapse-mcp-api@latest

# وكيل المراجعة
SYNAPSE_MIND_KEY=mk_reviewer... MCP_TRANSPORT=stdio npx synapse-mcp-api@latest

# وكيل النشر
SYNAPSE_MIND_KEY=mk_deployer... MCP_TRANSPORT=stdio npx synapse-mcp-api@latest

التنسيق عبر العقل المشترك:

# المبرمج يخزّن "جاهز للمراجعة"
COORDINATION_KEY = "mk_coordination..."
requests.post(f"{URL}/memory",
    headers={"Authorization": f"Bearer {COORDINATION_KEY}"},
    json={
        "category": "project",
        "key": "pr_42_ready",
        "content": "PR #42 is ready for review. Branch: feature/docs-system",
        "tags": ["review", "pr-42"],
        "priority": "high"
    })

# المراجع يستطلع طلبات المراجعة
r = requests.get(f"{URL}/memory/search?q=ready+for+review",
    headers={"Authorization": f"Bearer {COORDINATION_KEY}"})

النمط 3: المحور والأقطاب (المنسّق)

وكيل منسّق مركزي يُسند المهام لوكلاء العمل.

        ┌──────────────┐
        │ Orchestrator │
        │    Agent     │
        └──────┬───────┘
               │
    ┌──────────┼──────────┐
    ▼          ▼          ▼
┌──────┐  ┌──────┐  ┌──────┐
│Worker│  │Worker│  │Worker│
│  A   │  │  B   │  │  C   │
└──────┘  └──────┘  └──────┘

حالة الاستخدام: سير عمل معقد بعمل متوازٍ.

التنفيذ:

# المنسّق
class Orchestrator:
    def assign_task(self, worker_id, task_description):
        # خزّن المهمة في عقل العامل (أو عقل التنسيق المشترك)
        create_task(task_description, priority="high")
        # أبلغ العامل عبر الدردشة
        reply(f"@{worker_id}: New task — {task_description}")
    
    def check_progress(self):
        tasks = list_tasks(status="in_progress")
        for t in tasks:
            print(f"{t['title']}: {t['status']}")

# العمال يستطلعون المهام المُسندة
class Worker:
    def run(self):
        while True:
            tasks = list_tasks(status="pending")
            for t in tasks:
                if assigned_to_me(t):
                    update_task(t["id"], status="in_progress")
                    result = do_work(t)
                    update_task(t["id"], status="done")
                    reply(f"Completed: {t['title']}")
            time.sleep(60)

التنسيق عبر الدردشة

يستطيع الوكلاء التواصل عبر نظام الدردشة:

# الوكيل A يرسل إلى الوكيل B
reply("@agent-b: Can you review my PR?")

# الوكيل B يستطلع ويرد
for msg in poll_messages():
    if "@agent-b" in msg["content"]:
        reply(f"@agent-a: Sure, looking at it now.")
رسائل الدردشة موسومة بالدور. عيّن role=agent لرسائل الوكيل-إلى-الوكيل، role=human للإنسان-إلى-الوكيل.

التنسيق عبر المتغيرات

استخدم المتغيرات للتنسيق الخفيف (أقفال، أعلام):

# الحصول على قفل
def acquire_lock(name):
    r = requests.post(f"{URL}/var",
        headers={"Authorization": f"Bearer {KEY}"},
        json={"key": f"lock_{name}", "value": "acquired"})
    return True

def release_lock(name):
    requests.delete(f"{URL}/var/lock_{name}",
        headers={"Authorization": f"Bearer {KEY}"})

# الاستخدام
if acquire_lock("deploy"):
    try:
        deploy_to_production()
    finally:
        release_lock("deploy")

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

الخطوات التالية