पाठ 3 / 28
Data Model: Collections, Records, Payloads और Namespaces
हर vector के साथ क्या रखना है, डिज़ाइन करें।
Database से पहले record तय करें
अधिकांश engines records को collections (या tables/indexes) में समूहित करते हैं जहाँ हर vector का आयाम और दूरी metric समान है, एक embedding model से जुड़ा। Record डिज़ाइन करें: स्थिर ID (दस्तावेज़ ID और chunk संख्या से बनी, ताकि दोबारा ingest करने पर duplicate नहीं, overwrite हो); vector; पाठ (या उसका संकेतक); और वे payload fields जिन पर आप filter या प्रदर्शन करेंगे (tenant, भाषा, वर्ष, स्रोत, पृष्ठ, अनुमतियाँ, content hash, embedding model नाम)। जिन payload fields पर filter करते हैं उन्हें index करें। ग्राहकों को अलग करने का तरीक़ा तय करें: प्रति tenant collection (मज़बूत अलगाव, कई छोटे indexes), tenant field और filter वाली एक collection (कुशल, filters लागू होने पर निर्भर), या जहाँ उपलब्ध हो namespaces/partitions। जब संभव हो बड़े दस्तावेज़ vector store से बाहर रखें: पाठ कहीं और रखें और ID रखें।
निश्चित IDs duplicates रोकती हैं, चलाकर
मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। वही दस्तावेज़ और chunk संख्या हमेशा वही ID बनाते हैं, इसलिए संपादन के बाद दोबारा ingest करने पर duplicate जुड़ने की जगह पुराना record overwrite होता है। बदला पाठ अलग content hash देता है, जो बताता है कि vector दोबारा निकालना है।
import hashlib
def record_id(doc_id, chunk_no): return f"{doc_id}#chunk-{chunk_no}"
def content_hash(text): return hashlib.sha256(text.encode()).hexdigest()[:12]
v1 = "Unused leave up to 5 days can be carried over."
v2 = "Unused leave up to 10 days can be carried over."
print(record_id("hr-policy-2025", 3), record_id("hr-policy-2025", 3))
print("hash v1:", content_hash(v1), "| hash v2:", content_hash(v2), "| changed:", content_hash(v1) != content_hash(v2))
Output:
hr-policy-2025#chunk-3 hr-policy-2025#chunk-3 hash v1: 1c41c4893eab | hash v2: 20718f62c63d | changed: True
हर record के साथ मॉडल नाम रखें
model field मिश्रित-मॉडल ग़लतियाँ पकड़ने योग्य और re-embedding को audit-योग्य बनाता है।
त्वरित जाँच: Record IDs दस्तावेज़ ID और chunk संख्या से क्यों बनाएँ?
- Databases अन्य IDs मना करते हैं
- IDs random होनी चाहिए
- यह vectors छोटे करता है
- दोबारा ingest करने पर duplicate नहीं, overwrite होता है
Answer
दोबारा ingest करने पर duplicate नहीं, overwrite होता है — स्थिर IDs अद्यतन को idempotent बनाती हैं।