# मल्टी-एजेंट समन्वय जब आपके पास संबंधित कार्यों पर काम करने वाले कई LLM एजेंट्स हों, तो Synapse समन्वय परत प्रदान करता है — साझा मेमोरी, कार्य असाइनमेंट और एसिंक्रोनस चैट। ## पैटर्न ### पैटर्न 1: साझा Mind (एकमात्र सत्य का स्रोत) सभी एजेंट्स एक Mind Key साझा करते हैं। वे एक ही मेमोरी स्टोर को पढ़ते/लिखते हैं। ``` ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Agent A │ │ Agent B │ │ Agent C │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └─────────────┼─────────────┘ ▼ ┌──────────────┐ │ Shared Mind │ │ (one key) │ └──────────────┘ ``` **उपयोग का मामला:** एक प्रोजेक्ट पर काम करने वाले एजेंट्स की छोटी टीम। **सेटअप:** ```bash # All agents use the same Mind Key export SYNAPSE_MIND_KEY=mk_shared_key... ``` **कार्यों के माध्यम से समन्वय:** ```python # Agent A creates a task create_task("Review PR #42", priority="high") # Agent B picks it up tasks = list_tasks(status="pending") if tasks: task = tasks[0] update_task(task["id"], status="in_progress") # ... do work ... update_task(task["id"], status="done") ``` ### पैटर्न 2: विशेषीकृत Minds (पृथक संदर्भ) प्रत्येक एजेंट का अपना mind होता है। वे एक साझा "coordination" mind के माध्यम से संवाद करते हैं। ``` ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Coder │ │ Reviewer │ │ Deployer │ │ Agent │ │ Agent │ │ Agent │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ Mind C │ │ Mind R │ │ Mind D │ └─────────┘ └─────────┘ └─────────┘ │ │ │ └─────────────┼─────────────┘ ▼ ┌──────────────────┐ │ Coordination Mind│ │ (shared) │ └──────────────────┘ ``` **उपयोग का मामला:** अलग-अलग विशेषताओं वाले एजेंट्स (कोडिंग, समीक्षा, डिप्लॉयमेंट)। **सेटअप:** ```bash # Coder agent SYNAPSE_MIND_KEY=mk_coder... MCP_TRANSPORT=stdio npx synapse-mcp-api@latest # Reviewer agent SYNAPSE_MIND_KEY=mk_reviewer... MCP_TRANSPORT=stdio npx synapse-mcp-api@latest # Deployer agent SYNAPSE_MIND_KEY=mk_deployer... MCP_TRANSPORT=stdio npx synapse-mcp-api@latest ``` **साझा mind के माध्यम से समन्वय:** ```python # Coder stores "ready for review" 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" }) # Reviewer polls for review requests r = requests.get(f"{URL}/memory/search?q=ready+for+review", headers={"Authorization": f"Bearer {COORDINATION_KEY}"}) ``` ### पैटर्न 3: Hub-and-Spoke (ऑर्केस्ट्रेटर) एक केंद्रीय ऑर्केस्ट्रेटर एजेंट कार्यों को वर्कर एजेंट्स को असाइन करता है। ``` ┌──────────────┐ │ Orchestrator │ │ Agent │ └──────┬───────┘ │ ┌──────────┼──────────┐ ▼ ▼ ▼ ┌──────┐ ┌──────┐ ┌──────┐ │Worker│ │Worker│ │Worker│ │ A │ │ B │ │ C │ └──────┘ └──────┘ └──────┘ ``` **उपयोग का मामला:** समानांतर कार्य वाले जटिल वर्कफ़्लो। **कार्यान्वयन:** ```python # Orchestrator class Orchestrator: def assign_task(self, worker_id, task_description): # Store task in worker's mind (or shared coordination mind) create_task(task_description, priority="high") # Notify worker via chat 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']}") # Workers poll for assigned tasks 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) ``` ## चैट के माध्यम से समन्वय एजेंट्स चैट सिस्टम के माध्यम से संवाद कर सकते हैं: ```python # Agent A sends to Agent B reply("@agent-b: Can you review my PR?") # Agent B polls and responds for msg in poll_messages(): if "@agent-b" in msg["content"]: reply(f"@agent-a: Sure, looking at it now.") ``` > [!NOTE] > चैट संदेश रोल-टैग किए जाते हैं। एजेंट-टू-एजेंट संदेशों के लिए role=agent सेट करें, > मानव-टू-एजेंट के लिए role=human। ## वेरिएबल के माध्यम से समन्वय हल्के समन्वय (लॉक, फ़्लैग) के लिए वेरिएबल का उपयोग करें: ```python # Acquire a lock 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}"}) # Use if acquire_lock("deploy"): try: deploy_to_production() finally: release_lock("deploy") ``` ## सर्वोत्तम अभ्यास > [!TIP] > - **अलग-अलग चिंताओं के लिए अलग-अलग minds का उपयोग करें** — coder और reviewer मेमोरी को न मिलाएँ > - **चैट में एजेंट्स को टैग करें** — स्पष्ट संबोधन के लिए `@agent-name` > - **कार्य असाइनमेंट के लिए tasks का उपयोग करें** — चैट नहीं (चैट चर्चा के लिए है) > - **Idempotency लागू करें** — एजेंट्स विफल ऑपरेशन पुनः प्रयास कर सकते हैं > - **सब कुछ लॉग करें** — ऑडिटेबिलिटी के लिए निर्णय मेमोरी में स्टोर करें ## अगले कदम - [Persistent LLM Agent](/docs/guides/persistent-llm-agent) - [LLM Cookbook](/docs/llm-cookbook/session-start-pattern) - [Webhook Automation](/docs/guides/webhook-automation)