टर्मिनल AI के लिए एक स्वयं-अपडेट होने वाला नॉलेज बेस
मैं अपना अधिकांश समय टर्मिनल में एक AI कोडिंग असिस्टेंट के साथ बिताता हूँ।
मैं अक्सर एक सेशन के दौरान कठिन समस्याओं को हल करता हूँ। मुझे कोई पेचीदा समाधान या कोई विशिष्ट कॉन्फ़िगरेशन सेटिंग मिल जाती है। फिर मैं टैब बंद कर देता हूँ और वह जानकारी गायब हो जाती है। एक महीने बाद, मैं ठीक उसी समस्या को फिर से हल करता हूँ।
मैंने Claude Code hooks का उपयोग करके अपने असिस्टेंट को अपने स्वयं के नोट्स बनाए रखने के लिए एक सिस्टम बनाया है।
यह सिस्टम तीन भागों का उपयोग करता है:
- संदर्भ (context) प्रदान करने के लिए हर प्रॉम्प्ट पर एक छोटे Markdown नॉलेज बेस को सर्च करना।
- सेशन समाप्त होने पर उपयोगी नोट्स कैप्चर करना।
- सेशन शुरू होने पर इंडेक्स लोड करना।
यहाँ बताया गया है कि अपने वर्कफ़्लो को धीमा किए बिना इसे कैसे बनाया जाए।
- रिट्रीवल (retrieval) के लिए UserPromptSubmit का उपयोग करें
यह हुक हर बार तब चलता है जब आप कोई प्रॉम्प्ट भेजते हैं। यह आपके टेक्स्ट को प्राप्त करता है और मॉडल के जवाब देने से पहले संदर्भ (context) इंजेक्ट कर सकता है।
मॉडल को यह तय न करने दें कि उसे आपके नोट्स कब देखने हैं। प्रासंगिक फ़ाइलों को खोजने के लिए grep जैसे तेज़ सर्च का उपयोग करें। केवल शीर्ष पांच मैच ही इंजेक्ट करें। इससे प्रक्रिया 100ms से कम समय में पूरी हो जाती है।
सर्च हुक्स के लिए दो नियम:
- इसे सस्ता रखें। शुरुआती सर्च के लिए LLM के बजाय grep का उपयोग करें।
- इसे हल्का (lean) रखें। केवल शीर्षक और फ़ाइल पाथ ही इंजेक्ट करें। यदि मॉडल को अधिक विवरण की आवश्यकता हो, तो वह फ़ाइल खोल सकता है।
- भारी कार्यों के लिए Stop hook से बचें
Stop hook हर बार तब चलता है जब असिस्टेंट अपना जवाब पूरा कर लेता है। यदि आप यहाँ कोई लंबा कार्य चलाते हैं, तो आपका असिस्टेंट धीमा हो जाएगा। 30-टर्न वाला एक सेशन 30 भारी कार्यों को ट्रिगर कर देगा।
इसके बजाय, पूरे सेशन को एक बार में कैप्चर करने के लिए SessionEnd का उपयोग करें।
- SessionEnd की सीमा को हल करें
SessionEnd नॉन-ब्लॉकिंग (non-blocking) है। यदि आप यहाँ कोई लंबा बैकग्राउंड टास्क शुरू करते हैं, तो सेशन बंद होने पर सिस्टम उसे बंद कर सकता है।
इसका समाधान दो हुक्स का उपयोग करना है:
- SessionEnd: ट्रांसक्रिप्ट पाथ को तेज़ी से एक क्यू (queue) फ़ाइल में जोड़ें।
- SessionStart: उस क्यू को खाली करें और भारी कैप्चर टास्क को बैकग्राउंड में चलाएं।
चूंकि अगला सेशन सक्रिय (active) होता है, इसलिए बैकग्राउंड प्रोसेस चलता रहेगा।
- इन्फिनिट लूप (infinite loops) से बचें
जब आप नोट्स लिखने के लिए एक हेडलेस (headless) AI शुरू करते हैं, तो यह आपके एनवायरनमेंट को इनहेरिट करता है। इसका मतलब है कि नया AI अपने स्वयं के हुक्स को ट्रिगर करेगा। इससे अंतहीन AI कॉल्स का एक लूप बन जाता है।
अपने स्क्रिप्ट के शीर्ष पर हमेशा एक रिकर्सन गार्ड (recursion guard) जोड़ें:
[ -n "$KB_CAPTURE" ] && exit 0
जब आप अपना बैकग्राउंड कैप्चर टास्क लॉन्च करें, तो KB_CAPTURE=1 सेट करें।
सेटअप का सारांश:
- इंस्टेंट कॉन्टेक्स्ट इंजेक्शन के लिए UserPromptSubmit का उपयोग करें।
- कार्यों को एनक्यू (enqueue) करने के लिए SessionEnd का उपयोग करें।
- वास्तविक कार्य चलाने के लिए SessionStart का उपयोग करें।
- पैसे बचाने के लिए नोट्स को सारांशित (summarize) करने हेतु एक सस्ते मॉडल का उपयोग करें।
एक बार किसी समस्या को दोबारा हल करने से बचना, कई कैप्चर कार्यों की लागत वसूल कर देता है।
Optional learning community: https://t.me/GyaanSetuAi
