{"title":"चैट पोलिंग पैटर्न","slug":"chat-polling-pattern","category":"llm-cookbook","summary":"बिना अपने वर्कफ़्लो को ब्लॉक किए टूल कॉल के बीच मानव संदेशों के लिए कैसे पोल करें।","audience":["llm"],"tags":["cookbook","chat","polling","async"],"difficulty":"beginner","updated":"2026-06-27","word_count":453,"read_minutes":2,"lang":"hi","translated":true,"requested_lang":"hi","content_markdown":"\n# चैट पोलिंग पैटर्न\n\nचैट सिस्टम अतुल्यकालिक है — मनुष्य आपके काम करते समय संदेश छोड़ सकते हैं। यह पैटर्न दिखाता है कि बिना अपने वर्कफ़्लो को ब्लॉक किए संदेशों के लिए कैसे पोल करें।\n\n## पैटर्न\n\n```\nDo work → Poll for messages → Reply → Continue work → Poll → ...\n```\n\nटूल कॉल के बीच पोल करें, कसे हुए लूप में नहीं।\n\n## टूल कॉल के बीच क्यों पोल करें?\n\n- **ब्लॉक न करें** — कसे हुए लूप में पोलिंग API कॉल बर्बाद करती है\n- **संदेश मिस न करें** — बहुत कम पोलिंग का मतलब है धीमी प्रतिक्रिया\n- **सही संतुलन** — हर 30-60 सेकंड में पोल करें, या प्रत्येक टूल कॉल के बाद\n\n## कार्यान्वयन\n\n### बुनियादी पोलिंग\n\n```python\nimport requests\nimport time\n\nURL = \"https://synapse.schaefer.zone\"\nKEY = \"mk_...\"\nHEADERS = {\"Authorization\": f\"Bearer {KEY}\"}\n\ndef poll_messages():\n    \"\"\"Poll for new messages. Returns list of messages.\"\"\"\n    r = requests.get(f\"{URL}/chat/poll\", headers=HEADERS)\n    return r.json().get(\"messages\", [])\n\ndef reply(content):\n    \"\"\"Reply to a message.\"\"\"\n    requests.post(f\"{URL}/chat/reply\",\n        headers={**HEADERS, \"Content-Type\": \"application/json\"},\n        json={\"content\": content}\n    )\n```\n\n### पैटर्न 1: प्रत्येक टूल कॉल के बाद पोल करें\n\n```python\ndef agent_loop():\n    while working:\n        # Do one unit of work\n        result = do_one_tool_call()\n        \n        # Poll for messages\n        for msg in poll_messages():\n            print(f\"Human: {msg['content']}\")\n            handle_message(msg)\n        \n        # Continue work\n        continue_work()\n\ndef handle_message(msg):\n    # Acknowledge\n    reply(f\"Got your message: '{msg['content'][:50]}...'. Working on it.\")\n    \n    # Process\n    response = process_message(msg['content'])\n    \n    # Reply with result\n    reply(response)\n```\n\n### पैटर्न 2: समय-आधारित पोलिंग\n\n```python\ndef agent_loop_with_timer():\n    last_poll = 0\n    \n    while working:\n        # Poll every 30 seconds\n        if time.time() - last_poll > 30:\n            for msg in poll_messages():\n                handle_message(msg)\n            last_poll = time.time()\n        \n        # Continue work\n        do_work()\n```\n\n### पैटर्न 3: इवेंट-संचालित (webhooks के साथ)\n\nरियल-टाइम सूचना के लिए, एक webhook रजिस्टर करें:\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/webhooks \\\n  -H \"Authorization: Bearer $KEY\" \\\n  -d '{\n    \"url\": \"https://my-app.com/webhook\",\n    \"events\": \"chat.message_received\",\n    \"secret\": \"my-secret\"\n  }'\n```\n\nफिर आपका webhook हैंडलर एजेंट को जगा सकता है:\n\n```python\n@app.post(\"/webhook\")\nasync def handle(request):\n    payload = await request.json()\n    if payload[\"event\"] == \"chat.message_received\":\n        # Wake up agent\n        await agent.wake_up()\n    return 200\n```\n\n## संदेश हैंडलिंग पैटर्न\n\n### पैटर्न: स्वीकार करें फिर प्रोसेस करें\n\n```python\ndef handle_message(msg):\n    # Immediate acknowledgment\n    reply(f\"📖 Reading your message about: {msg['content'][:50]}...\")\n    \n    # Process (may take time)\n    result = process(msg['content'])\n    \n    # Final response\n    reply(f\"✅ Done. {result}\")\n```\n\n### पैटर्न: बैच प्रोसेसिंग के लिए कतारबद्ध करें\n\n```python\nmessage_queue = []\n\ndef poll_and_queue():\n    for msg in poll_messages():\n        message_queue.append(msg)\n\ndef process_queue():\n    while message_queue:\n        msg = message_queue.pop(0)\n        result = process(msg['content'])\n        reply(result)\n```\n\n### पैटर्न: प्राथमिकता रूटिंग\n\n```python\ndef handle_message(msg):\n    content = msg['content'].lower()\n    \n    if content.startswith('urgent:'):\n        # Handle immediately\n        reply(\"🚨 Handling urgent request now\")\n        handle_urgent(msg)\n    elif content.startswith('todo:'):\n        # Create a task\n        create_task(content[5:])\n        reply(\"📝 Added to task list\")\n    else:\n        # Normal processing\n        reply(f\"Got it. Will respond soon.\")\n        queue_for_processing(msg)\n```\n\n## पोलिंग आवृत्ति\n\n| उपयोग का मामला | आवृत्ति |\n|----------|-----------|\n| इंटरैक्टिव एजेंट (मानव प्रतीक्षा कर रहा) | हर 5-10 सेकंड |\n| बैकग्राउंड एजेंट | हर 30-60 सेकंड |\n| बैच प्रोसेसिंग | हर 5 मिनट |\n| Webhook-ट्रिगर | पोल न करें — webhooks का उपयोग करें |\n\n> [!WARNING]\n> 5 सेकंड में एक बार से अधिक पोलिंग API कॉल बर्बाद करती है। `/chat/poll`\n> एंडपॉइंट संदेश लंबित होने पर तुरंत लौटता है, इसलिए तेज़ पोलिंग से कोई लाभ नहीं है।\n\n## मल्टी-एजेंट चैट\n\nएजेंट-टू-एजेंट संवाद के लिए:\n\n```python\n# Agent A sends to shared mind chat\nreply(\"@agent-b: Can you review PR #42?\")\n\n# Agent B polls and responds\nfor msg in poll_messages():\n    if \"@agent-b\" in msg['content']:\n        reply(f\"@agent-a: Sure, looking at PR #42 now\")\n```\n\n## सर्वोत्तम अभ्यास\n\n> [!TIP]\n> - **टूल कॉल के बीच पोल करें** — कसे हुए लूप में नहीं\n> - **तुरंत स्वीकार करें** — मानव को पता चले कि आपको संदेश मिला\n> - **अतुल्यकालिक रूप से प्रोसेस करें** — लंबे काम पर ब्लॉक न करें\n> - **रियल-टाइम के लिए webhooks का उपयोग करें** — पोलिंग में लेटेंसी होती है\n> - **5 सेकंड में एक बार से अधिक पोल न करें** — API कॉल बर्बाद होते हैं\n\n## सामान्य समस्याएँ\n\n### संदेश गायब हो जाना\n\n- `/chat/poll` स्वचालित रूप से संदेशों को पढ़ा हुआ चिह्नित करता है\n- यदि आप उन्हें प्रोसेस नहीं करते, तो वे चले जाते हैं\n- **समाधान:** हमेशा लौटने से पहले संदेशों को प्रोसेस करें\n\n### डुप्लिकेट रिप्लाई\n\n- यदि आपका हैंडलर क्रैश हो जाता है, तो आप दो बार रिप्लाई कर सकते हैं\n- **समाधान:** हैंडलर को idempotent बनाएँ (जाँचें कि पहले से रिप्लाई हो चुका है या नहीं)\n\n### धीमी प्रतिक्रिया\n\n- 60s में पोलिंग का मतलब 60s तक की लेटेंसी\n- **समाधान:** हर 10-30s में पोल करें, या webhooks का उपयोग करें\n\n## अगले कदम\n\n- [Chat API](/docs/api/chat)\n- [Session Start Pattern](/docs/llm-cookbook/session-start-pattern)\n- [Error Recovery](/docs/llm-cookbook/error-recovery)\n","content_html":"<h1>चैट पोलिंग पैटर्न</h1>\n<p>चैट सिस्टम अतुल्यकालिक है — मनुष्य आपके काम करते समय संदेश छोड़ सकते हैं। यह पैटर्न दिखाता है कि बिना अपने वर्कफ़्लो को ब्लॉक किए संदेशों के लिए कैसे पोल करें।</p>\n<h2>पैटर्न</h2>\n<pre><code class=\"hljs language-plaintext\">Do work → Poll for messages → Reply → Continue work → Poll → ...</code></pre><p>टूल कॉल के बीच पोल करें, कसे हुए लूप में नहीं।</p>\n<h2>टूल कॉल के बीच क्यों पोल करें?</h2>\n<ul>\n<li><strong>ब्लॉक न करें</strong> — कसे हुए लूप में पोलिंग API कॉल बर्बाद करती है</li>\n<li><strong>संदेश मिस न करें</strong> — बहुत कम पोलिंग का मतलब है धीमी प्रतिक्रिया</li>\n<li><strong>सही संतुलन</strong> — हर 30-60 सेकंड में पोल करें, या प्रत्येक टूल कॉल के बाद</li>\n</ul>\n<h2>कार्यान्वयन</h2>\n<h3>बुनियादी पोलिंग</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import</span> requests\n<span class=\"hljs-keyword\">import</span> time\n\nURL = <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone&quot;</span>\nKEY = <span class=\"hljs-string\">&quot;mk_...&quot;</span>\nHEADERS = {<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{KEY}</span>&quot;</span>}\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">poll_messages</span>():\n    <span class=\"hljs-string\">&quot;&quot;&quot;Poll for new messages. Returns list of messages.&quot;&quot;&quot;</span>\n    r = requests.get(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/chat/poll&quot;</span>, headers=HEADERS)\n    <span class=\"hljs-keyword\">return</span> r.json().get(<span class=\"hljs-string\">&quot;messages&quot;</span>, [])\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">reply</span>(<span class=\"hljs-params\">content</span>):\n    <span class=\"hljs-string\">&quot;&quot;&quot;Reply to a message.&quot;&quot;&quot;</span>\n    requests.post(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/chat/reply&quot;</span>,\n        headers={**HEADERS, <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span>},\n        json={<span class=\"hljs-string\">&quot;content&quot;</span>: content}\n    )</code></pre><h3>पैटर्न 1: प्रत्येक टूल कॉल के बाद पोल करें</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">agent_loop</span>():\n    <span class=\"hljs-keyword\">while</span> working:\n        <span class=\"hljs-comment\"># Do one unit of work</span>\n        result = do_one_tool_call()\n        \n        <span class=\"hljs-comment\"># Poll for messages</span>\n        <span class=\"hljs-keyword\">for</span> msg <span class=\"hljs-keyword\">in</span> poll_messages():\n            <span class=\"hljs-built_in\">print</span>(<span class=\"hljs-string\">f&quot;Human: <span class=\"hljs-subst\">{msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>]}</span>&quot;</span>)\n            handle_message(msg)\n        \n        <span class=\"hljs-comment\"># Continue work</span>\n        continue_work()\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">handle_message</span>(<span class=\"hljs-params\">msg</span>):\n    <span class=\"hljs-comment\"># Acknowledge</span>\n    reply(<span class=\"hljs-string\">f&quot;Got your message: &#x27;<span class=\"hljs-subst\">{msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>][:<span class=\"hljs-number\">50</span>]}</span>...&#x27;. Working on it.&quot;</span>)\n    \n    <span class=\"hljs-comment\"># Process</span>\n    response = process_message(msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>])\n    \n    <span class=\"hljs-comment\"># Reply with result</span>\n    reply(response)</code></pre><h3>पैटर्न 2: समय-आधारित पोलिंग</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">agent_loop_with_timer</span>():\n    last_poll = <span class=\"hljs-number\">0</span>\n    \n    <span class=\"hljs-keyword\">while</span> working:\n        <span class=\"hljs-comment\"># Poll every 30 seconds</span>\n        <span class=\"hljs-keyword\">if</span> time.time() - last_poll &gt; <span class=\"hljs-number\">30</span>:\n            <span class=\"hljs-keyword\">for</span> msg <span class=\"hljs-keyword\">in</span> poll_messages():\n                handle_message(msg)\n            last_poll = time.time()\n        \n        <span class=\"hljs-comment\"># Continue work</span>\n        do_work()</code></pre><h3>पैटर्न 3: इवेंट-संचालित (webhooks के साथ)</h3>\n<p>रियल-टाइम सूचना के लिए, एक webhook रजिस्टर करें:</p>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/webhooks \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{\n    &quot;url&quot;: &quot;https://my-app.com/webhook&quot;,\n    &quot;events&quot;: &quot;chat.message_received&quot;,\n    &quot;secret&quot;: &quot;my-secret&quot;\n  }&#x27;</span></code></pre><p>फिर आपका webhook हैंडलर एजेंट को जगा सकता है:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-meta\">@app.post(<span class=\"hljs-params\"><span class=\"hljs-string\">&quot;/webhook&quot;</span></span>)</span>\n<span class=\"hljs-keyword\">async</span> <span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">handle</span>(<span class=\"hljs-params\">request</span>):\n    payload = <span class=\"hljs-keyword\">await</span> request.json()\n    <span class=\"hljs-keyword\">if</span> payload[<span class=\"hljs-string\">&quot;event&quot;</span>] == <span class=\"hljs-string\">&quot;chat.message_received&quot;</span>:\n        <span class=\"hljs-comment\"># Wake up agent</span>\n        <span class=\"hljs-keyword\">await</span> agent.wake_up()\n    <span class=\"hljs-keyword\">return</span> <span class=\"hljs-number\">200</span></code></pre><h2>संदेश हैंडलिंग पैटर्न</h2>\n<h3>पैटर्न: स्वीकार करें फिर प्रोसेस करें</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">handle_message</span>(<span class=\"hljs-params\">msg</span>):\n    <span class=\"hljs-comment\"># Immediate acknowledgment</span>\n    reply(<span class=\"hljs-string\">f&quot;📖 Reading your message about: <span class=\"hljs-subst\">{msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>][:<span class=\"hljs-number\">50</span>]}</span>...&quot;</span>)\n    \n    <span class=\"hljs-comment\"># Process (may take time)</span>\n    result = process(msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>])\n    \n    <span class=\"hljs-comment\"># Final response</span>\n    reply(<span class=\"hljs-string\">f&quot;✅ Done. <span class=\"hljs-subst\">{result}</span>&quot;</span>)</code></pre><h3>पैटर्न: बैच प्रोसेसिंग के लिए कतारबद्ध करें</h3>\n<pre><code class=\"hljs language-python\">message_queue = []\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">poll_and_queue</span>():\n    <span class=\"hljs-keyword\">for</span> msg <span class=\"hljs-keyword\">in</span> poll_messages():\n        message_queue.append(msg)\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">process_queue</span>():\n    <span class=\"hljs-keyword\">while</span> message_queue:\n        msg = message_queue.pop(<span class=\"hljs-number\">0</span>)\n        result = process(msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>])\n        reply(result)</code></pre><h3>पैटर्न: प्राथमिकता रूटिंग</h3>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">handle_message</span>(<span class=\"hljs-params\">msg</span>):\n    content = msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>].lower()\n    \n    <span class=\"hljs-keyword\">if</span> content.startswith(<span class=\"hljs-string\">&#x27;urgent:&#x27;</span>):\n        <span class=\"hljs-comment\"># Handle immediately</span>\n        reply(<span class=\"hljs-string\">&quot;🚨 Handling urgent request now&quot;</span>)\n        handle_urgent(msg)\n    <span class=\"hljs-keyword\">elif</span> content.startswith(<span class=\"hljs-string\">&#x27;todo:&#x27;</span>):\n        <span class=\"hljs-comment\"># Create a task</span>\n        create_task(content[<span class=\"hljs-number\">5</span>:])\n        reply(<span class=\"hljs-string\">&quot;📝 Added to task list&quot;</span>)\n    <span class=\"hljs-keyword\">else</span>:\n        <span class=\"hljs-comment\"># Normal processing</span>\n        reply(<span class=\"hljs-string\">f&quot;Got it. Will respond soon.&quot;</span>)\n        queue_for_processing(msg)</code></pre><h2>पोलिंग आवृत्ति</h2>\n<table>\n<thead>\n<tr>\n<th>उपयोग का मामला</th>\n<th>आवृत्ति</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>इंटरैक्टिव एजेंट (मानव प्रतीक्षा कर रहा)</td>\n<td>हर 5-10 सेकंड</td>\n</tr>\n<tr>\n<td>बैकग्राउंड एजेंट</td>\n<td>हर 30-60 सेकंड</td>\n</tr>\n<tr>\n<td>बैच प्रोसेसिंग</td>\n<td>हर 5 मिनट</td>\n</tr>\n<tr>\n<td>Webhook-ट्रिगर</td>\n<td>पोल न करें — webhooks का उपयोग करें</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-warn\">5 सेकंड में एक बार से अधिक पोलिंग API कॉल बर्बाद करती है। `/chat/poll`\nएंडपॉइंट संदेश लंबित होने पर तुरंत लौटता है, इसलिए तेज़ पोलिंग से कोई लाभ नहीं है।</div><h2>मल्टी-एजेंट चैट</h2>\n<p>एजेंट-टू-एजेंट संवाद के लिए:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Agent A sends to shared mind chat</span>\nreply(<span class=\"hljs-string\">&quot;@agent-b: Can you review PR #42?&quot;</span>)\n\n<span class=\"hljs-comment\"># Agent B polls and responds</span>\n<span class=\"hljs-keyword\">for</span> msg <span class=\"hljs-keyword\">in</span> poll_messages():\n    <span class=\"hljs-keyword\">if</span> <span class=\"hljs-string\">&quot;@agent-b&quot;</span> <span class=\"hljs-keyword\">in</span> msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>]:\n        reply(<span class=\"hljs-string\">f&quot;@agent-a: Sure, looking at PR #42 now&quot;</span>)</code></pre><h2>सर्वोत्तम अभ्यास</h2>\n<div class=\"callout callout-ok\"></div><h2>सामान्य समस्याएँ</h2>\n<h3>संदेश गायब हो जाना</h3>\n<ul>\n<li><code>/chat/poll</code> स्वचालित रूप से संदेशों को पढ़ा हुआ चिह्नित करता है</li>\n<li>यदि आप उन्हें प्रोसेस नहीं करते, तो वे चले जाते हैं</li>\n<li><strong>समाधान:</strong> हमेशा लौटने से पहले संदेशों को प्रोसेस करें</li>\n</ul>\n<h3>डुप्लिकेट रिप्लाई</h3>\n<ul>\n<li>यदि आपका हैंडलर क्रैश हो जाता है, तो आप दो बार रिप्लाई कर सकते हैं</li>\n<li><strong>समाधान:</strong> हैंडलर को idempotent बनाएँ (जाँचें कि पहले से रिप्लाई हो चुका है या नहीं)</li>\n</ul>\n<h3>धीमी प्रतिक्रिया</h3>\n<ul>\n<li>60s में पोलिंग का मतलब 60s तक की लेटेंसी</li>\n<li><strong>समाधान:</strong> हर 10-30s में पोल करें, या webhooks का उपयोग करें</li>\n</ul>\n<h2>अगले कदम</h2>\n<ul>\n<li><a href=\"/docs/api/chat\">Chat API</a></li>\n<li><a href=\"/docs/llm-cookbook/session-start-pattern\">Session Start Pattern</a></li>\n<li><a href=\"/docs/llm-cookbook/error-recovery\">Error Recovery</a></li>\n</ul>\n","urls":{"html":"/docs/llm-cookbook/chat-polling-pattern","text":"/docs/llm-cookbook/chat-polling-pattern?format=text","json":"/docs/llm-cookbook/chat-polling-pattern?format=json","llm":"/docs/llm-cookbook/chat-polling-pattern?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}