{"title":"सिमेंटिक खोज (Embeddings)","slug":"semantic-search","category":"concepts","summary":"वेक्टर embeddings का उपयोग करके वैचारिक मेमोरी खोज — कीवर्ड्स नहीं, अर्थ द्वारा खोजें।","audience":["human","llm"],"tags":["concept","semantic","embeddings","vector-search"],"difficulty":"advanced","updated":"2026-06-27","word_count":645,"read_minutes":3,"lang":"hi","translated":true,"requested_lang":"hi","content_markdown":"\n# सिमेंटिक खोज (Embeddings)\n\nSynapse वेक्टर embeddings का उपयोग करके सिमेंटिक खोज का समर्थन करता है। FTS5 (कीवर्ड मिलान) के विपरीत, सिमेंटिक खोज **अर्थ** द्वारा मेमोरीज़ खोजती है — भले ही कोई कीवर्ड मेल न खाए।\n\n## यह कैसे काम करता है\n\n```\n1. Memory stored → embedding generated → vector stored\n2. Search query → embedding generated → vector compared\n3. Cosine similarity → top N results returned\n```\n\n### Embeddings क्या हैं?\n\nEmbeddings टेक्स्ट के संख्यात्मक वेक्टर प्रतिनिधित्व हैं। समान अर्थ वाले टेक्स्ट के समान वेक्टर होते हैं। Synapse प्रत्येक मेमोरी की सामग्री के लिए एक वेक्टर (जैसे 1536 आयाम) जनरेट करता है।\n\n### कोसाइन समानता\n\nसिमेंटिक रूप से समान मेमोरीज़ खोजने के लिए, Synapse क्वेरी वेक्टर और प्रत्येक मेमोरी वेक्टर के बीच कोसाइन समानता की गणना करता है। उच्च समानता = अधिक प्रासंगिक।\n\n## सिमेंटिक खोज कब उपयोग करें\n\n### सिमेंटिक खोज का उपयोग करें जब:\n\n- आप \"X के बारे में मेमोरीज़\" चाहते हैं जहाँ X स्टोर किए गए से अलग ढंग से वर्णित है\n- FTS5 कोई परिणाम नहीं लौटाता (कोई कीवर्ड मिलान नहीं)\n- आप वैचारिक समूहीकरण चाहते हैं (जैसे सभी \"deployment\" मेमोरीज़, भले ही कुछ \"release\" कहें)\n- क्वेरी एक प्रश्न है: \"how do we handle authentication?\"\n\n### FTS5 का उपयोग करें जब:\n\n- आप सटीक कीवर्ड्स जानते हैं\n- आपको बूलियन लॉजिक (AND, OR, NOT) चाहिए\n- आपको सब-मिलीसेकंड प्रतिक्रिया चाहिए\n- आप वाक्यांश मिलान चाहते हैं\n\n## एंडपॉइंट\n\n### GET /memory/semantic-search\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/semantic-search?q=container+orchestration\"\n```\n\nप्रतिक्रिया:\n\n```json\n{\n  \"results\": [\n    {\n      \"id\": \"mem_001\",\n      \"category\": \"project\",\n      \"key\": \"project_synapse_deployment\",\n      \"content\": \"Synapse deployed using Docker Swarm on vps1...\",\n      \"tags\": [\"docker\", \"swarm\", \"deployment\"],\n      \"similarity\": 0.89\n    },\n    {\n      \"id\": \"mem_042\",\n      \"category\": \"fact\",\n      \"key\": \"kubernetes_cluster\",\n      \"content\": \"We use Kubernetes for production orchestration...\",\n      \"tags\": [\"kubernetes\", \"orchestration\"],\n      \"similarity\": 0.84\n    }\n  ]\n}\n```\n\n## उदाहरण\n\n### परिनियोजन मेमोरीज़ खोजें\n\n```bash\n# FTS5 might miss some — semantic catches all\ncurl .../memory/semantic-search?q=deployment+process\n```\n\n\"deployment\", \"release\", \"publishing\", \"rolling out\", आदि के बारे में मेमोरीज़ लौटाता है।\n\n### प्रमाणीकरण पैटर्न खोजें\n\n```bash\ncurl .../memory/semantic-search?q=how+do+users+log+in\n```\n\nlogin, auth, JWT, session management, OAuth, आदि के बारे में मेमोरीज़ लौटाता है।\n\n### समान मेमोरीज़ खोजें\n\n```bash\n# Find memories similar to a specific one\ncurl .../memory/related/mem_001\n```\n\nसिमेंटिक समानता का उपयोग करता है (साझा टैग्स और embedding वेक्टर्स के माध्यम से)।\n\n## Embedding जनरेशन\n\n### Embeddings कब जनरेट होते हैं?\n\n- **मेमोरी स्टोर पर** — यदि embeddings सेवा कॉन्फ़िगर की गई है, तो embedding तुल्यकालिक रूप से जनरेट होता है\n- **बैच जनरेशन** — `POST /memory/embed-batch` उन मेमोरीज़ के लिए embeddings जनरेट करता है जिनके पास नहीं हैं\n- **अतुल्यकालिक अपडेट** — जब सामग्री अपडेट होती है, embedding पुनः जनरेट होता है\n\n### Embedding प्रदाता\n\nSynapse कॉन्फ़िगर करने योग्य embedding प्रदाताओं का समर्थन करता है:\n\n- **OpenAI** (`text-embedding-3-small`, `text-embedding-3-large`)\n- **लोकल मॉडल** (Ollama या समान के माध्यम से)\n- **कस्टम** (embeddings इंटरफ़ेस लागू करें)\n\nपर्यावरण वेरिएबल्स के माध्यम से कॉन्फ़िगर करें:\n\n```bash\nEMBEDDINGS_PROVIDER=openai\nEMBEDDINGS_API_KEY=sk-...\nEMBEDDINGS_MODEL=text-embedding-3-small\n```\n\n### बैच जनरेशन\n\nकई मेमोरीज़ वाले minds के लिए जिनमें embeddings गायब हैं:\n\n```bash\n# Generate embeddings for up to 100 memories\ncurl -X POST https://synapse.schaefer.zone/memory/embed-batch \\\n  -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"limit\": 100}'\n\n# Check progress\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     https://synapse.schaefer.zone/memory/embed-batch-status\n```\n\n## प्रदर्शन\n\n| ऑपरेशन | विलंबता |\n|-----------|---------|\n| Embedding जनरेट करें (OpenAI) | 100-200ms |\n| सिमेंटिक खोज (1k मेमोरीज़) | 50-100ms |\n| सिमेंटिक खोज (10k मेमोरीज़) | 200-500ms |\n| बैच जनरेशन (100 मेमोरीज़) | 10-20s |\n\n> [!NOTE]\n> वेक्टर गणना के कारण सिमेंटिक खोज FTS5 से धीमी है। ज्ञात कीवर्ड्स के लिए FTS5, वैचारिक क्वेरीज़ के लिए सिमेंटिक का उपयोग करें।\n\n## सीमाएँ\n\n### Embeddings लागत\n\nयदि OpenAI का उपयोग कर रहे हैं, तो embeddings जनरेट करने का खर्च आता है (text-embedding-3-small के लिए ~$0.02 प्रति 1M टोकन)। 10,000 मेमोरीज़ औसतन 100 टोकन प्रत्येक के लिए, यह ~$0.02 है — नगण्य।\n\n### कोल्ड स्टार्ट\n\nEmbeddings कॉन्फ़िगर किए जाने से पहले स्टोर की गई मेमोरीज़ में embeddings नहीं होंगे। बैकफ़िल के लिए `POST /memory/embed-batch` चलाएँ।\n\n### प्रदाता निर्भरता\n\nयदि embeddings प्रदाता डाउन है, तो सिमेंटिक खोज विनम्रतापूर्वक विफल होती है (खाली परिणाम या त्रुटि लौटाती है)। FTS5 अभी भी काम करता है।\n\n## जब Embeddings उपलब्ध नहीं हैं\n\nयदि embeddings सेवा कॉन्फ़िगर नहीं है:\n\n- `GET /memory/semantic-search` 503 Service Unavailable लौटाता है\n- `POST /memory` अभी भी काम करता है (बस कोई embedding जनरेट नहीं होता)\n- FTS5 खोज अभी भी काम करती है\n\n## सर्वोत्तम प्रथाएँ\n\n> [!TIP]\n> - **वैचारिक क्वेरीज़ के लिए सिमेंटिक का उपयोग करें** — \"how do we handle X?\"\n> - **विशिष्ट शब्दों के लिए FTS5 का उपयोग करें** — \"docker swarm\"\n> - **नियमित रूप से embeddings बैकफ़िल करें** — `POST /memory/embed-batch`\n> - **प्रदाता स्वास्थ्य की निगरानी करें** — सिमेंटिक खोज इस पर निर्भर करती है\n> - **टैग्स के साथ संयोजित करें** — सिमेंटिक + टैग फ़िल्टर परिणाम संकरा करता है\n\n## अगले कदम\n\n- [FTS5 Search](/docs/concepts/fts5-search)\n- [Memory API](/docs/api/memory)\n- [आर्किटेक्चर](/docs/concepts/architecture)\n","content_html":"<h1>सिमेंटिक खोज (Embeddings)</h1>\n<p>Synapse वेक्टर embeddings का उपयोग करके सिमेंटिक खोज का समर्थन करता है। FTS5 (कीवर्ड मिलान) के विपरीत, सिमेंटिक खोज <strong>अर्थ</strong> द्वारा मेमोरीज़ खोजती है — भले ही कोई कीवर्ड मेल न खाए।</p>\n<h2>यह कैसे काम करता है</h2>\n<pre><code class=\"hljs language-plaintext\">1. Memory stored → embedding generated → vector stored\n2. Search query → embedding generated → vector compared\n3. Cosine similarity → top N results returned</code></pre><h3>Embeddings क्या हैं?</h3>\n<p>Embeddings टेक्स्ट के संख्यात्मक वेक्टर प्रतिनिधित्व हैं। समान अर्थ वाले टेक्स्ट के समान वेक्टर होते हैं। Synapse प्रत्येक मेमोरी की सामग्री के लिए एक वेक्टर (जैसे 1536 आयाम) जनरेट करता है।</p>\n<h3>कोसाइन समानता</h3>\n<p>सिमेंटिक रूप से समान मेमोरीज़ खोजने के लिए, Synapse क्वेरी वेक्टर और प्रत्येक मेमोरी वेक्टर के बीच कोसाइन समानता की गणना करता है। उच्च समानता = अधिक प्रासंगिक।</p>\n<h2>सिमेंटिक खोज कब उपयोग करें</h2>\n<h3>सिमेंटिक खोज का उपयोग करें जब:</h3>\n<ul>\n<li>आप &quot;X के बारे में मेमोरीज़&quot; चाहते हैं जहाँ X स्टोर किए गए से अलग ढंग से वर्णित है</li>\n<li>FTS5 कोई परिणाम नहीं लौटाता (कोई कीवर्ड मिलान नहीं)</li>\n<li>आप वैचारिक समूहीकरण चाहते हैं (जैसे सभी &quot;deployment&quot; मेमोरीज़, भले ही कुछ &quot;release&quot; कहें)</li>\n<li>क्वेरी एक प्रश्न है: &quot;how do we handle authentication?&quot;</li>\n</ul>\n<h3>FTS5 का उपयोग करें जब:</h3>\n<ul>\n<li>आप सटीक कीवर्ड्स जानते हैं</li>\n<li>आपको बूलियन लॉजिक (AND, OR, NOT) चाहिए</li>\n<li>आपको सब-मिलीसेकंड प्रतिक्रिया चाहिए</li>\n<li>आप वाक्यांश मिलान चाहते हैं</li>\n</ul>\n<h2>एंडपॉइंट</h2>\n<h3>GET /memory/semantic-search</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/semantic-search?q=container+orchestration&quot;</span></code></pre><p>प्रतिक्रिया:</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;results&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">[</span>\n    <span class=\"hljs-punctuation\">{</span>\n      <span class=\"hljs-attr\">&quot;id&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;mem_001&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;category&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;project&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;key&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;project_synapse_deployment&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;content&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;Synapse deployed using Docker Swarm on vps1...&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;tags&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">[</span><span class=\"hljs-string\">&quot;docker&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;swarm&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;deployment&quot;</span><span class=\"hljs-punctuation\">]</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;similarity&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-number\">0.89</span>\n    <span class=\"hljs-punctuation\">}</span><span class=\"hljs-punctuation\">,</span>\n    <span class=\"hljs-punctuation\">{</span>\n      <span class=\"hljs-attr\">&quot;id&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;mem_042&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;category&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;fact&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;key&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;kubernetes_cluster&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;content&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;We use Kubernetes for production orchestration...&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;tags&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">[</span><span class=\"hljs-string\">&quot;kubernetes&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;orchestration&quot;</span><span class=\"hljs-punctuation\">]</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;similarity&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-number\">0.84</span>\n    <span class=\"hljs-punctuation\">}</span>\n  <span class=\"hljs-punctuation\">]</span>\n<span class=\"hljs-punctuation\">}</span></code></pre><h2>उदाहरण</h2>\n<h3>परिनियोजन मेमोरीज़ खोजें</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># FTS5 might miss some — semantic catches all</span>\ncurl .../memory/semantic-search?q=deployment+process</code></pre><p>&quot;deployment&quot;, &quot;release&quot;, &quot;publishing&quot;, &quot;rolling out&quot;, आदि के बारे में मेमोरीज़ लौटाता है।</p>\n<h3>प्रमाणीकरण पैटर्न खोजें</h3>\n<pre><code class=\"hljs language-bash\">curl .../memory/semantic-search?q=how+<span class=\"hljs-keyword\">do</span>+<span class=\"hljs-built_in\">users</span>+<span class=\"hljs-built_in\">log</span>+<span class=\"hljs-keyword\">in</span></code></pre><p>login, auth, JWT, session management, OAuth, आदि के बारे में मेमोरीज़ लौटाता है।</p>\n<h3>समान मेमोरीज़ खोजें</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Find memories similar to a specific one</span>\ncurl .../memory/related/mem_001</code></pre><p>सिमेंटिक समानता का उपयोग करता है (साझा टैग्स और embedding वेक्टर्स के माध्यम से)।</p>\n<h2>Embedding जनरेशन</h2>\n<h3>Embeddings कब जनरेट होते हैं?</h3>\n<ul>\n<li><strong>मेमोरी स्टोर पर</strong> — यदि embeddings सेवा कॉन्फ़िगर की गई है, तो embedding तुल्यकालिक रूप से जनरेट होता है</li>\n<li><strong>बैच जनरेशन</strong> — <code>POST /memory/embed-batch</code> उन मेमोरीज़ के लिए embeddings जनरेट करता है जिनके पास नहीं हैं</li>\n<li><strong>अतुल्यकालिक अपडेट</strong> — जब सामग्री अपडेट होती है, embedding पुनः जनरेट होता है</li>\n</ul>\n<h3>Embedding प्रदाता</h3>\n<p>Synapse कॉन्फ़िगर करने योग्य embedding प्रदाताओं का समर्थन करता है:</p>\n<ul>\n<li><strong>OpenAI</strong> (<code>text-embedding-3-small</code>, <code>text-embedding-3-large</code>)</li>\n<li><strong>लोकल मॉडल</strong> (Ollama या समान के माध्यम से)</li>\n<li><strong>कस्टम</strong> (embeddings इंटरफ़ेस लागू करें)</li>\n</ul>\n<p>पर्यावरण वेरिएबल्स के माध्यम से कॉन्फ़िगर करें:</p>\n<pre><code class=\"hljs language-bash\">EMBEDDINGS_PROVIDER=openai\nEMBEDDINGS_API_KEY=sk-...\nEMBEDDINGS_MODEL=text-embedding-3-small</code></pre><h3>बैच जनरेशन</h3>\n<p>कई मेमोरीज़ वाले minds के लिए जिनमें embeddings गायब हैं:</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Generate embeddings for up to 100 memories</span>\ncurl -X POST https://synapse.schaefer.zone/memory/embed-batch \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;limit&quot;: 100}&#x27;</span>\n\n<span class=\"hljs-comment\"># Check progress</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     https://synapse.schaefer.zone/memory/embed-batch-status</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>Embedding जनरेट करें (OpenAI)</td>\n<td>100-200ms</td>\n</tr>\n<tr>\n<td>सिमेंटिक खोज (1k मेमोरीज़)</td>\n<td>50-100ms</td>\n</tr>\n<tr>\n<td>सिमेंटिक खोज (10k मेमोरीज़)</td>\n<td>200-500ms</td>\n</tr>\n<tr>\n<td>बैच जनरेशन (100 मेमोरीज़)</td>\n<td>10-20s</td>\n</tr>\n</tbody></table>\n<div class=\"callout callout-note\">वेक्टर गणना के कारण सिमेंटिक खोज FTS5 से धीमी है। ज्ञात कीवर्ड्स के लिए FTS5, वैचारिक क्वेरीज़ के लिए सिमेंटिक का उपयोग करें।</div><h2>सीमाएँ</h2>\n<h3>Embeddings लागत</h3>\n<p>यदि OpenAI का उपयोग कर रहे हैं, तो embeddings जनरेट करने का खर्च आता है (text-embedding-3-small के लिए ~$0.02 प्रति 1M टोकन)। 10,000 मेमोरीज़ औसतन 100 टोकन प्रत्येक के लिए, यह ~$0.02 है — नगण्य।</p>\n<h3>कोल्ड स्टार्ट</h3>\n<p>Embeddings कॉन्फ़िगर किए जाने से पहले स्टोर की गई मेमोरीज़ में embeddings नहीं होंगे। बैकफ़िल के लिए <code>POST /memory/embed-batch</code> चलाएँ।</p>\n<h3>प्रदाता निर्भरता</h3>\n<p>यदि embeddings प्रदाता डाउन है, तो सिमेंटिक खोज विनम्रतापूर्वक विफल होती है (खाली परिणाम या त्रुटि लौटाती है)। FTS5 अभी भी काम करता है।</p>\n<h2>जब Embeddings उपलब्ध नहीं हैं</h2>\n<p>यदि embeddings सेवा कॉन्फ़िगर नहीं है:</p>\n<ul>\n<li><code>GET /memory/semantic-search</code> 503 Service Unavailable लौटाता है</li>\n<li><code>POST /memory</code> अभी भी काम करता है (बस कोई embedding जनरेट नहीं होता)</li>\n<li>FTS5 खोज अभी भी काम करती है</li>\n</ul>\n<h2>सर्वोत्तम प्रथाएँ</h2>\n<div class=\"callout callout-ok\"></div><h2>अगले कदम</h2>\n<ul>\n<li><a href=\"/docs/concepts/fts5-search\">FTS5 Search</a></li>\n<li><a href=\"/docs/api/memory\">Memory API</a></li>\n<li><a href=\"/docs/concepts/architecture\">आर्किटेक्चर</a></li>\n</ul>\n","urls":{"html":"/docs/concepts/semantic-search","text":"/docs/concepts/semantic-search?format=text","json":"/docs/concepts/semantic-search?format=json","llm":"/docs/concepts/semantic-search?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}