सिमेंटिक खोज (Embeddings)
वेक्टर embeddings का उपयोग करके वैचारिक मेमोरी खोज — कीवर्ड्स नहीं, अर्थ द्वारा खोजें।
सिमेंटिक खोज (Embeddings)
Synapse वेक्टर embeddings का उपयोग करके सिमेंटिक खोज का समर्थन करता है। FTS5 (कीवर्ड मिलान) के विपरीत, सिमेंटिक खोज अर्थ द्वारा मेमोरीज़ खोजती है — भले ही कोई कीवर्ड मेल न खाए।
यह कैसे काम करता है
1. Memory stored → embedding generated → vector stored
2. Search query → embedding generated → vector compared
3. Cosine similarity → top N results returnedEmbeddings क्या हैं?
Embeddings टेक्स्ट के संख्यात्मक वेक्टर प्रतिनिधित्व हैं। समान अर्थ वाले टेक्स्ट के समान वेक्टर होते हैं। Synapse प्रत्येक मेमोरी की सामग्री के लिए एक वेक्टर (जैसे 1536 आयाम) जनरेट करता है।
कोसाइन समानता
सिमेंटिक रूप से समान मेमोरीज़ खोजने के लिए, Synapse क्वेरी वेक्टर और प्रत्येक मेमोरी वेक्टर के बीच कोसाइन समानता की गणना करता है। उच्च समानता = अधिक प्रासंगिक।
सिमेंटिक खोज कब उपयोग करें
सिमेंटिक खोज का उपयोग करें जब:
- आप "X के बारे में मेमोरीज़" चाहते हैं जहाँ X स्टोर किए गए से अलग ढंग से वर्णित है
- FTS5 कोई परिणाम नहीं लौटाता (कोई कीवर्ड मिलान नहीं)
- आप वैचारिक समूहीकरण चाहते हैं (जैसे सभी "deployment" मेमोरीज़, भले ही कुछ "release" कहें)
- क्वेरी एक प्रश्न है: "how do we handle authentication?"
FTS5 का उपयोग करें जब:
- आप सटीक कीवर्ड्स जानते हैं
- आपको बूलियन लॉजिक (AND, OR, NOT) चाहिए
- आपको सब-मिलीसेकंड प्रतिक्रिया चाहिए
- आप वाक्यांश मिलान चाहते हैं
एंडपॉइंट
GET /memory/semantic-search
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/semantic-search?q=container+orchestration"प्रतिक्रिया:
{
"results": [
{
"id": "mem_001",
"category": "project",
"key": "project_synapse_deployment",
"content": "Synapse deployed using Docker Swarm on vps1...",
"tags": ["docker", "swarm", "deployment"],
"similarity": 0.89
},
{
"id": "mem_042",
"category": "fact",
"key": "kubernetes_cluster",
"content": "We use Kubernetes for production orchestration...",
"tags": ["kubernetes", "orchestration"],
"similarity": 0.84
}
]
}उदाहरण
परिनियोजन मेमोरीज़ खोजें
# FTS5 might miss some — semantic catches all
curl .../memory/semantic-search?q=deployment+process"deployment", "release", "publishing", "rolling out", आदि के बारे में मेमोरीज़ लौटाता है।
प्रमाणीकरण पैटर्न खोजें
curl .../memory/semantic-search?q=how+do+users+log+inlogin, auth, JWT, session management, OAuth, आदि के बारे में मेमोरीज़ लौटाता है।
समान मेमोरीज़ खोजें
# Find memories similar to a specific one
curl .../memory/related/mem_001सिमेंटिक समानता का उपयोग करता है (साझा टैग्स और embedding वेक्टर्स के माध्यम से)।
Embedding जनरेशन
Embeddings कब जनरेट होते हैं?
- मेमोरी स्टोर पर — यदि embeddings सेवा कॉन्फ़िगर की गई है, तो embedding तुल्यकालिक रूप से जनरेट होता है
- बैच जनरेशन —
POST /memory/embed-batchउन मेमोरीज़ के लिए embeddings जनरेट करता है जिनके पास नहीं हैं - अतुल्यकालिक अपडेट — जब सामग्री अपडेट होती है, embedding पुनः जनरेट होता है
Embedding प्रदाता
Synapse कॉन्फ़िगर करने योग्य embedding प्रदाताओं का समर्थन करता है:
- OpenAI (
text-embedding-3-small,text-embedding-3-large) - लोकल मॉडल (Ollama या समान के माध्यम से)
- कस्टम (embeddings इंटरफ़ेस लागू करें)
पर्यावरण वेरिएबल्स के माध्यम से कॉन्फ़िगर करें:
EMBEDDINGS_PROVIDER=openai
EMBEDDINGS_API_KEY=sk-...
EMBEDDINGS_MODEL=text-embedding-3-smallबैच जनरेशन
कई मेमोरीज़ वाले minds के लिए जिनमें embeddings गायब हैं:
# Generate embeddings for up to 100 memories
curl -X POST https://synapse.schaefer.zone/memory/embed-batch \
-H "Authorization: Bearer YOUR_MIND_KEY" \
-H "Content-Type: application/json" \
-d '{"limit": 100}'
# Check progress
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
https://synapse.schaefer.zone/memory/embed-batch-statusप्रदर्शन
| ऑपरेशन | विलंबता |
|---|---|
| Embedding जनरेट करें (OpenAI) | 100-200ms |
| सिमेंटिक खोज (1k मेमोरीज़) | 50-100ms |
| सिमेंटिक खोज (10k मेमोरीज़) | 200-500ms |
| बैच जनरेशन (100 मेमोरीज़) | 10-20s |
सीमाएँ
Embeddings लागत
यदि OpenAI का उपयोग कर रहे हैं, तो embeddings जनरेट करने का खर्च आता है (text-embedding-3-small के लिए ~$0.02 प्रति 1M टोकन)। 10,000 मेमोरीज़ औसतन 100 टोकन प्रत्येक के लिए, यह ~$0.02 है — नगण्य।
कोल्ड स्टार्ट
Embeddings कॉन्फ़िगर किए जाने से पहले स्टोर की गई मेमोरीज़ में embeddings नहीं होंगे। बैकफ़िल के लिए POST /memory/embed-batch चलाएँ।
प्रदाता निर्भरता
यदि embeddings प्रदाता डाउन है, तो सिमेंटिक खोज विनम्रतापूर्वक विफल होती है (खाली परिणाम या त्रुटि लौटाती है)। FTS5 अभी भी काम करता है।
जब Embeddings उपलब्ध नहीं हैं
यदि embeddings सेवा कॉन्फ़िगर नहीं है:
GET /memory/semantic-search503 Service Unavailable लौटाता हैPOST /memoryअभी भी काम करता है (बस कोई embedding जनरेट नहीं होता)- FTS5 खोज अभी भी काम करती है