Skip to main content
QMD एक स्थानीय-प्रथम खोज सहायक प्रक्रिया है, जो OpenClaw के साथ चलती है। यह BM25, वेक्टर खोज और पुनःरैंकिंग को एक ही बाइनरी में संयोजित करती है और आपके कार्यक्षेत्र की मेमोरी फ़ाइलों से बाहर की सामग्री को भी इंडेक्स कर सकती है।

अंतर्निहित इंजन की तुलना में अतिरिक्त सुविधाएँ

  • बेहतर रिकॉल के लिए पुनःरैंकिंग और क्वेरी विस्तार
  • अतिरिक्त निर्देशिकाओं को इंडेक्स करें - प्रोजेक्ट दस्तावेज़, टीम नोट्स या डिस्क पर मौजूद कोई भी सामग्री।
  • सत्र ट्रांसक्रिप्ट को इंडेक्स करें - पिछली बातचीत याद करें।
  • पूरी तरह स्थानीय - आधिकारिक llama.cpp प्रदाता Plugin के साथ चलता है और GGUF मॉडल स्वतः डाउनलोड करता है।
  • स्वचालित फ़ॉलबैक - यदि QMD उपलब्ध नहीं है, तो OpenClaw निर्बाध रूप से अंतर्निहित इंजन पर लौट जाता है।

आरंभ करना

पूर्वापेक्षाएँ

  • QMD इंस्टॉल करें: npm install -g @tobilu/qmd या bun install -g @tobilu/qmd
  • ऐसा SQLite बिल्ड जो एक्सटेंशन की अनुमति देता हो (macOS पर brew install sqlite)।
  • QMD, Gateway के PATH पर होना चाहिए।
  • macOS और Linux बिना अतिरिक्त सेटअप के काम करते हैं। Windows के लिए WSL2 के माध्यम से सर्वोत्तम समर्थन मिलता है।

सक्षम करें

OpenClaw, ~/.openclaw/agents/<agentId>/qmd/ के अंतर्गत एक स्व-निहित QMD होम बनाता है और सहायक प्रक्रिया के जीवनचक्र को स्वचालित रूप से प्रबंधित करता है - संग्रह, अपडेट और एम्बेडिंग रन आपके लिए संभाले जाते हैं। यह वर्तमान QMD संग्रह और MCP क्वेरी स्वरूपों को प्राथमिकता देता है, लेकिन आवश्यकता पड़ने पर वैकल्पिक संग्रह-पैटर्न फ़्लैग और पुराने MCP टूल नामों पर लौटता है। स्टार्टअप सामंजस्य पुराने हो चुके प्रबंधित संग्रहों को उनके मानक पैटर्न के अनुसार फिर से बनाता है, यदि उसी नाम वाला कोई पुराना QMD संग्रह अब भी मौजूद हो।

सहायक प्रक्रिया कैसे काम करती है

  • OpenClaw कार्यक्षेत्र की मेमोरी फ़ाइलों और कॉन्फ़िगर किए गए memory.qmd.paths से संग्रह बनाता है। QMD एडाप्टर अपडेट, एम्बेडिंग, डिबाउंस और टाइमआउट अनुमान का स्वामी है; ये उपयोगकर्ता कॉन्फ़िगरेशन नहीं हैं।
  • QMD प्रति-एजेंट QMD होम के अंतर्गत अपने index.sqlite, YAML संग्रह कॉन्फ़िगरेशन और मॉडल डाउनलोड का स्वामी बना रहता है; ये बाहरी टूल की कलाकृतियाँ हैं, OpenClaw स्थिति तालिकाएँ नहीं। OpenClaw के स्वामित्व वाला समन्वय केवल SQLite में रहता है: एक साझा लीज़ सभी एजेंटों में एम्बेडिंग कार्य को सीमित करती है, जबकि प्रत्येक एजेंट डेटाबेस में एक लीज़ उस एजेंट के संग्रह, अपडेट और एम्बेड लेखनों को क्रमबद्ध करती है। रनटाइम अब QMD फ़ाइल-लॉक सहायक फ़ाइलें नहीं बनाता। openclaw doctor --fix पुरानी सहायक फ़ाइलों को तभी हटाता है, जब यह सिद्ध हो जाए कि उनका पुराना प्रक्रिया स्वामी निष्क्रिय है। अपग्रेड एक स्पष्ट कटओवर है: नया संस्करण उपयोग करने से पहले स्थिति निर्देशिका साझा करने वाली प्रत्येक OpenClaw प्रक्रिया को रोकें और पुनः आरंभ करें। पुराने और नए QMD लेखकों का मिश्रण समर्थित नहीं है; रनटाइम जानबूझकर पुरानी सहायक फ़ाइलों पर दोहरा लॉक नहीं लगाता।
  • डिफ़ॉल्ट कार्यक्षेत्र संग्रह MEMORY.md और memory/ ट्री को ट्रैक करता है। छोटे अक्षरों वाला memory.md रूट मेमोरी फ़ाइल के रूप में इंडेक्स नहीं किया जाता।
  • QMD का अपना स्कैनर छिपे हुए पथों और सामान्य निर्भरता/बिल्ड निर्देशिकाओं, जैसे .git, .cache, node_modules, vendor, dist और build, को अनदेखा करता है। Gateway स्टार्टअप QMD को आलसी रखता है; मेमोरी का पहली बार उपयोग होने पर प्रबंधक प्रारंभ होता है।
  • खोजें कॉन्फ़िगर किए गए searchMode का उपयोग करती हैं (डिफ़ॉल्ट: search; साथ ही vsearch और query का समर्थन करती हैं)। search केवल BM25 है, इसलिए OpenClaw उस मोड में सिमेंटिक वेक्टर तत्परता जाँच और एम्बेडिंग रखरखाव छोड़ देता है। यदि कोई मोड विफल होता है, तो OpenClaw qmd query के साथ पुनः प्रयास करता है।
  • जब searchMode, query हो, तो पुनःरैंकर के बिना QMD के हाइब्रिड क्वेरी पथ का उपयोग करने के लिए memory.qmd.rerank को false पर सेट करें (QMD 2.1 या नया संस्करण आवश्यक है)। OpenClaw सीधे QMD CLI पथ को --no-rerank और QMD के MCP क्वेरी टूल को rerank: false देता है।
  • बहु-संग्रह फ़िल्टर का समर्थन घोषित करने वाले QMD रिलीज़ के साथ, OpenClaw समान-स्रोत संग्रहों को एक QMD खोज आह्वान में समूहित करता है। पुराने QMD रिलीज़ संगत प्रति-संग्रह फ़ॉलबैक बनाए रखते हैं।
  • यदि QMD पूरी तरह विफल हो जाता है, तो OpenClaw अंतर्निहित SQLite इंजन पर लौट जाता है। ओपन विफलता के बाद बार-बार होने वाले चैट-टर्न प्रयास थोड़ी देर के लिए पीछे हटते हैं, ताकि अनुपस्थित बाइनरी या खराब सहायक प्रक्रिया निर्भरता पुनः प्रयासों का तूफ़ान न पैदा करे; openclaw memory status और एकबारगी CLI जाँच फिर भी सीधे QMD की पुनः जाँच करती हैं।
पहली खोज धीमी हो सकती है - QMD पहले qmd query रन पर पुनःरैंकिंग और क्वेरी विस्तार के लिए GGUF मॉडल (~2 GB) स्वतः डाउनलोड करता है।

खोज प्रदर्शन और संगतता

OpenClaw QMD खोज पथ को वर्तमान और पुराने, दोनों QMD इंस्टॉलेशन के साथ संगत रखता है। स्टार्टअप पर OpenClaw प्रत्येक प्रबंधक के लिए इंस्टॉल किए गए QMD सहायता टेक्स्ट की एक बार जाँच करता है। यदि बाइनरी कई संग्रह फ़िल्टर के समर्थन की घोषणा करती है, तो OpenClaw सभी समान-स्रोत संग्रहों को एक कमांड से खोजता है:
इससे प्रत्येक स्थायी-मेमोरी संग्रह के लिए अलग QMD उपप्रक्रिया शुरू करने से बचा जाता है। सत्र ट्रांसक्रिप्ट संग्रह अपने अलग स्रोत समूह में रहते हैं, इसलिए मिश्रित memory + sessions खोजें अब भी दोनों स्रोतों से परिणाम विविधीकरणकर्ता को इनपुट देती हैं। पुराने QMD बिल्ड केवल एक संग्रह फ़िल्टर स्वीकार करते हैं। जब OpenClaw ऐसे किसी बिल्ड का पता लगाता है, तो यह संगतता पथ बनाए रखता है और परिणामों को मर्ज तथा डुप्लिकेट-मुक्त करने से पहले प्रत्येक संग्रह को अलग-अलग खोजता है। इंस्टॉल किए गए अनुबंध की मैन्युअल जाँच के लिए चलाएँ:
वर्तमान QMD सहायता में एक या अधिक संग्रहों को लक्षित करने का उल्लेख होता है। पुरानी सहायता आमतौर पर एकल संग्रह का वर्णन करती है।

मॉडल ओवरराइड

QMD मॉडल पर्यावरण चर Gateway प्रक्रिया से बिना बदलाव के आगे भेजे जाते हैं, इसलिए आप नया OpenClaw कॉन्फ़िगरेशन जोड़े बिना QMD को वैश्विक रूप से समायोजित कर सकते हैं:
एम्बेडिंग मॉडल बदलने के बाद एम्बेडिंग फिर से चलाएँ, ताकि इंडेक्स नए वेक्टर स्पेस से मेल खाए।

अतिरिक्त पथों को इंडेक्स करना

अतिरिक्त निर्देशिकाओं को खोजने योग्य बनाने के लिए QMD को उनकी ओर इंगित करें:
अतिरिक्त पथों के स्निपेट खोज परिणामों में qmd/<collection>/<relative-path> के रूप में दिखाई देते हैं। memory_get इस उपसर्ग को समझता है और सही संग्रह रूट से पढ़ता है।

सत्र ट्रांसक्रिप्ट को इंडेक्स करना

पिछली बातचीत याद करने के लिए सत्र इंडेक्सिंग सक्षम करें। QMD को सामान्य memory.search सत्र स्रोत और QMD ट्रांसक्रिप्ट निर्यातक, दोनों की आवश्यकता होती है:
ट्रांसक्रिप्ट स्वच्छ किए गए उपयोगकर्ता/सहायक टर्न के रूप में ~/.openclaw/agents/<id>/qmd/sessions/ के अंतर्गत एक समर्पित QMD संग्रह में निर्यात होते हैं। केवल sources: ["sessions"] सेट करने से ट्रांसक्रिप्ट QMD में निर्यात नहीं होते; साथ ही rememberAcrossConversations या स्पष्ट QMD सत्र निर्यात सक्षम करें। सत्र हिट अब भी tools.sessions.visibility द्वारा फ़िल्टर किए जाते हैं। डिफ़ॉल्ट tree दृश्यता में वर्तमान सत्र, उससे बनाए गए सत्र और परिवेशी समूह जागरूकता के माध्यम से देखे जा रहे समान-एजेंट समूह सत्र शामिल होते हैं। session.dmScope: "main" के साथ, बहु-उपयोगकर्ता DM सेटअप के उपयोगकर्ता मुख्य सत्र साझा करते हैं और उसके देखे जा रहे समूहों की सामग्री याद कर सकते हैं। DM पृथक्करण के लिए प्रति-पीयर dmScope का उपयोग करें, या परिवेशी रूप से देखे जा रहे सत्रों से पढ़ना बंद करने के लिए दृश्यता को "self" पर सेट करें। अन्य असंबंधित समान-एजेंट सत्रों के लिए अब भी "agent" दृश्यता आवश्यक है।

खोज का दायरा

डिफ़ॉल्ट रूप से QMD खोज परिणाम केवल प्रत्यक्ष सत्रों में दिखाए जाते हैं (समूह या चैनल चैट में नहीं)। इसे बदलने के लिए memory.qmd.scope कॉन्फ़िगर करें:
ऊपर दिया गया स्निपेट वास्तविक डिफ़ॉल्ट नियम है। जब दायरा किसी खोज को अस्वीकार करता है, तो OpenClaw व्युत्पन्न चैनल और चैट प्रकार के साथ एक चेतावनी लॉग करता है, जिससे खाली परिणामों को डीबग करना आसान होता है।

उद्धरण

जब memory.citations, auto या on हो, तो खोज स्निपेट में Source: <path>#L<line> (या #L<start>-L<end>) फ़ुटर जोड़ा जाता है। auto मोड में फ़ुटर केवल प्रत्यक्ष-चैट सत्रों के लिए जोड़ा जाता है। पथ को आंतरिक रूप से एजेंट को देते हुए भी फ़ुटर हटाने के लिए memory.citations = "off" सेट करें।

कब उपयोग करें

QMD तब चुनें, जब आपको चाहिए:
  • उच्च-गुणवत्ता वाले परिणामों के लिए पुनःरैंकिंग।
  • कार्यस्थल के बाहर प्रोजेक्ट दस्तावेज़ या नोट्स खोजना।
  • पिछले सत्रों की बातचीत याद करना।
  • बिना API कुंजियों के पूरी तरह स्थानीय खोज।
सरल सेटअप के लिए अंतर्निहित इंजन बिना अतिरिक्त निर्भरताओं के अच्छी तरह काम करता है।

समस्या निवारण

QMD नहीं मिला? सुनिश्चित करें कि बाइनरी Gateway के PATH पर है। यदि OpenClaw एक सेवा के रूप में चलता है, तो एक सिमलिंक बनाएँ: sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd यदि qmd --version आपके शेल में काम करता है, लेकिन OpenClaw फिर भी spawn qmd ENOENT रिपोर्ट करता है, तो संभवतः Gateway प्रक्रिया का PATH आपके इंटरैक्टिव शेल से अलग है। बाइनरी को स्पष्ट रूप से निर्दिष्ट करें:
उस पर्यावरण में command -v qmd का उपयोग करें जहाँ QMD इंस्टॉल है, फिर openclaw memory status --deep से पुनः जाँच करें। पहली खोज बहुत धीमी है? QMD पहली बार उपयोग होने पर GGUF मॉडल डाउनलोड करता है। OpenClaw द्वारा उपयोग की जाने वाली उन्हीं XDG निर्देशिकाओं के साथ qmd query "test" चलाकर पहले से तैयार करें। खोज के दौरान कई QMD उपप्रक्रियाएँ दिख रही हैं? संभव हो तो QMD अपडेट करें। OpenClaw समान-स्रोत बहु-संग्रह खोजों के लिए एक प्रक्रिया का उपयोग केवल तभी करता है, जब इंस्टॉल किया गया QMD कई -c फ़िल्टर के समर्थन की घोषणा करता है; अन्यथा यह शुद्धता के लिए पुराना प्रति-संग्रह फ़ॉलबैक बनाए रखता है। केवल-BM25 QMD अब भी llama.cpp बनाने का प्रयास कर रहा है? memory.qmd.searchMode = "search" सेट करें। OpenClaw उस मोड को केवल-शाब्दिक मानता है, QMD वेक्टर स्थिति जाँच और एम्बेडिंग रखरखाव छोड़ देता है और सिमेंटिक तत्परता जाँच को vsearch या query सेटअप पर छोड़ता है। खोज का समय समाप्त हो रहा है? memory.qmd.limits.timeoutMs बढ़ाएँ (डिफ़ॉल्ट: 4000ms)। धीमे हार्डवेयर के लिए इसे अधिक मान पर सेट करें, उदाहरण के लिए 120000। यह सीमा एजेंट के memory_search कॉल के दौरान QMD के अपने खोज कमांड पर लागू होती है; सेटअप, सिंक, अंतर्निहित फ़ॉलबैक और पूरक कॉर्पस कार्य अपनी अलग छोटी समय-सीमाएँ बनाए रखते हैं। समूह या चैनल चैट में खाली परिणाम मिल रहे हैं? डिफ़ॉल्ट memory.qmd.scope के साथ यह अपेक्षित है, क्योंकि वह केवल प्रत्यक्ष सत्रों की अनुमति देता है। यदि आप वहाँ QMD परिणाम चाहते हैं, तो group या channel चैट प्रकारों के लिए एक allow नियम जोड़ें। रूट मेमोरी खोज अचानक बहुत व्यापक हो गई? Gateway को पुनः आरंभ करें या अगले स्टार्टअप सामंजस्य की प्रतीक्षा करें। समान नाम का टकराव मिलने पर OpenClaw पुराने प्रबंधित संग्रहों को फिर से मानक MEMORY.md और memory/ पैटर्न के अनुसार बनाता है। कार्यस्थल में दिखाई देने वाले अस्थायी रिपॉज़िटरी ENAMETOOLONG या खराब इंडेक्सिंग का कारण बन रहे हैं? QMD ट्रैवर्सल, OpenClaw के अंतर्निहित सिमलिंक नियमों के बजाय मूल QMD स्कैनर का अनुसरण करता है। जब तक QMD चक्र-सुरक्षित ट्रैवर्सल या स्पष्ट बहिष्करण नियंत्रण उपलब्ध नहीं कराता, अस्थायी मोनोरिपो चेकआउट को .tmp/ जैसी छिपी निर्देशिकाओं के अंतर्गत या इंडेक्स किए गए QMD रूट से बाहर रखें।

कॉन्फ़िगरेशन

पूर्ण कॉन्फ़िगरेशन सतह (memory.qmd.*), खोज मोड, अपडेट अंतराल, दायरा नियम और अन्य सभी विकल्पों के लिए मेमोरी कॉन्फ़िगरेशन संदर्भ देखें।

संबंधित