प्रैक्टिस में एजेंट मेमोरी
कॉन्टेक्स्ट विंडो भर जाती हैं। एजेंट मेमोरी के चार आम प्रकार बनाएं — एक रीसेंट विंडो, समरीज़, एक नोट्स फ़ाइल और रिट्रीवल — और तय करें कि क्या भूलना है।
60 सेकंड में
प्रैक्टिस में एजेंट मेमोरी
कॉन्टेक्स्ट विंडो भर जाती हैं। एजेंट मेमोरी के चार आम प्रकार बनाएं — एक रीसेंट विंडो, समरीज़, एक नोट्स फ़ाइल और रिट्रीवल — और तय करें कि क्या भूलना है।
मेमोरी के चार प्रकार
| प्रकार | यह क्या है | किसके लिए अच्छा है | किस बात का ध्यान रखें |
|---|---|---|---|
| रीसेंट विंडो | केवल पिछले N मैसेज या टोकन रखें। | छोटी चैट और छोटे टास्क। | शुरुआती विवरण, जैसे यूज़र का नाम या लक्ष्य, छूट जाते हैं। |
| रनिंग समरी | मॉडल पुराने मैसेज की एक छोटी समरी बना देता है जो उनकी जगह ले लेती है। | लंबी बातचीत। | समरी में बारीक विवरण खो जाते हैं और वे भटक सकती हैं या गलतियां जोड़ सकती हैं। |
| नोट्स फ़ाइल (स्क्रैचपैड) | एजेंट मुख्य तथ्यों, फैसलों और प्रोग्रेस को एक फ़ाइल या रिकॉर्ड में लिखता है जिसे आपका कोड संभाल कर रखता है। | लंबे टास्क, रीस्टार्ट, काम को दूसरे एजेंट को सौंपना। | क्या लिखना है इसके स्पष्ट नियमों की ज़रूरत होती है, वरना यह एक अस्त-व्यस्त डायरी बन जाती है। |
| रिट्रीवल मेमोरी | कई नोट्स या दस्तावेज़ स्टोर करें; हर कदम पर प्रासंगिक कुछ को खोजें (उदाहरण के लिए एम्बेडिंग्स के साथ)। | कई पिछले सेशन या एक बड़ा नॉलेज बेस। | गलत या पुराने आइटम वापस ला सकती है; एक्सेस कंट्रोल की ज़रूरत होती है। |
एक आसान मेमोरी मैनेजर
def summarise(old_summary: str, messages: list) -> str:
# Placeholder: in real code, ask the model to update the summary.
# Keep facts, decisions and open questions; drop chit-chat.
lines = [m["role"] + ": " + m["content"][:60] for m in messages]
return (old_summary + " | " if old_summary else "") + "; ".join(lines)
class Memory:
def __init__(self, goal: str, keep_last: int = 6):
self.goal = goal
self.summary = ""
self.recent = []
self.keep_last = keep_last
def add(self, role: str, content: str):
self.recent.append({"role": role, "content": content})
if len(self.recent) > self.keep_last:
old = self.recent[:-self.keep_last]
self.recent = self.recent[-self.keep_last:]
self.summary = summarise(self.summary, old)
def context(self) -> list:
head = [{"role": "system", "content": "Goal: " + self.goal}]
if self.summary:
head.append({"role": "system", "content": "Earlier (summary): " + self.summary})
return head + self.recent
mem = Memory("Plan a 3-day Kerala trip under Rs 20,000", keep_last=2)
for text in ["Budget is firm", "Prefer trains", "Vegetarian food", "Start from Kochi"]:
mem.add("user", text)
for m in mem.context():
print(m["role"], "->", m["content"])नोट्स: एजेंट क्या लिखता है
क्या भूलना है
- टूल के बड़े नतीजे: पूरा पेज नहीं, केवल उपयोगी बातों का एक छोटा अंश और एक संदर्भ (फ़ाइल का नाम, URL, id) रखें।
- पूरा हो चुका काम: जब एक कदम पूरा हो जाए, तो उसका नतीजा रखें, हर कोशिश का विवरण नहीं।
- पर्सनल डेटा जिसकी आपको ज़रूरत नहीं है: "बस ऐसे ही" फ़ोन नंबर, आधार नंबर या स्वास्थ्य संबंधी विवरण स्टोर न करें। केवल वही रखें जो टास्क के लिए ज़रूरी हो, और अपने प्राइवेसी नियमों का पालन करें।
- पुरानी हो चुकी बातें: कीमतें, शेड्यूल और स्टॉक बदलते रहते हैं। तथ्य के साथ तारीख भी स्टोर करें, और पुरानी बातों की दोबारा जांच करें।
- टूल के नतीजों से मिले निर्देश: उन्हें कभी भी नियमों के रूप में सेव न करें। सोर्स के साथ तथ्य सेव करें, निर्देश या कमांड नहीं।
keep_last=2 के साथ मेमोरी का उदाहरण चलाएं। अब कौन से तथ्य केवल समरी में हैं? क्या आप "बजट फिक्स है" जैसी बात को बनाए रखने के लिए मॉडल द्वारा लिखी गई समरी पर भरोसा करेंगे?और देखें और पढ़ें
लैब
एक पिन किए गए लक्ष्य, साइज-लिमिटेड नोट्स फ़ाइल और भूलने के नियम के साथ एक मेमोरी मैनेजर, जिसका एक लंबी नकली चैट पर परीक्षण किया गया हो।
समस्या
पाठ से Memory क्लास को आगे बढ़ाएं।
- फिक्स्ड कीज़ के साथ एक
notesडिक्शनरी जोड़ें:facts,decisions,open_questions,next_step। प्रत्येक तथ्य में उसकाsourceऔर एक तारीख स्टोर होनी चाहिए। - एक सीमा जोड़ें: अधिक से अधिक 10 तथ्य। भर जाने पर, सबसे पुराना तथ्य हटा दें और प्रिंट करें कि क्या भुला दिया गया।
- एक नियम जोड़ें जो टूल के नतीजे से आने पर "always", "ignore" या "instead" जैसे शब्दों वाले किसी भी तथ्य को स्टोर करने से मना कर दे, और समीक्षा के लिए इसे लॉग करे।
- 20-मैसेज की चैट का अनुकरण करें और अंतिम कॉन्टेक्स्ट प्रिंट करें। जांचें कि लक्ष्य अभी भी वहां है।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1स्टेप 3 में वर्ड फ़िल्टर से बचना आसान है। फिर भी इसे रखना क्यों उचित है, और अधिक मजबूत सुरक्षा क्या है?दिखाएं
यह कुछ लापरवाह या स्पष्ट मामलों को पकड़ लेता है और एक लॉग बनाता है जिसकी आप समीक्षा कर सकते हैं, जो कि आसान और सस्ता है। लेकिन हमलावर बातों को अलग तरह से लिख सकते हैं। अधिक मजबूत सुरक्षा स्ट्रक्चरल है: टूल से मिले कंटेंट को केवल उसके सोर्स के साथ डेटा के रूप में स्टोर करें, कभी भी नियमों के रूप में नहीं; यूज़र की प्राथमिकताओं को अलग रखें और केवल तभी लिखें जब यूज़र ऐसा कहे; और सीमित करें कि एक पॉइज़न की गई मेमोरी किन टूल्स को ट्रिगर कर सकती है।
Q2एक समरी कहती है "यूज़र का बजट: 2,000 रुपये" लेकिन यूज़र ने 20,000 रुपये कहा था। आपका डिज़ाइन इस तरह की गलती को कैसे पकड़ सकता है या सीमित कर सकता है?दिखाएं
मुख्य तथ्यों को स्ट्रक्चर्ड नोट्स में रखें, जिन्हें केवल फ़्री-टेक्स्ट समरी में रखने के बजाय सीधे यूज़र के मैसेज से कॉपी किया गया हो। बजट जैसे महत्वपूर्ण तथ्यों को कॉन्टेक्स्ट में पिन करें। यदि चाहें, तो उन पर कार्रवाई करने से पहले यूज़र से मुख्य तथ्यों की पुष्टि करने के लिए कहें। और संख्याओं वाले उदाहरणों पर समरी का परीक्षण करें, क्योंकि समरी बनाते समय अंक छूट सकते हैं या बदल सकते हैं।
अक्सर पूछे जाने वाले सवाल
यदि कॉन्टेक्स्ट विंडो अब बहुत बड़ी हैं, तो क्या मुझे अभी भी मेमोरी ट्रिक्स की ज़रूरत है?
आमतौर पर हाँ। बड़े कॉन्टेक्स्ट की प्रति कॉल लागत अधिक होती है, वे धीमे हो सकते हैं, और मॉडल हमेशा लंबे कॉन्टेक्स्ट के बीच की जानकारी का अच्छी तरह से उपयोग नहीं करते हैं। सब कुछ भेजने से अभी भी सही जानकारी चुनना बेहतर है।
क्या मॉडल को तय करना चाहिए कि क्या याद रखना है?
यह नोट्स का सुझाव दे सकता है, लेकिन आपके कोड को नियम तय करने चाहिए: कौन से फ़ील्ड मौजूद हैं, साइज की सीमाएं, क्या कभी स्टोर नहीं किया जाना चाहिए, और प्रत्येक नोट कहां से आया है। महत्वपूर्ण तथ्यों के लिए, जैसे यूज़र सेटिंग्स, उन्हें केवल तभी सेव करें जब यूज़र स्पष्ट रूप से उन्हें बताए।
रिट्रीवल मेमोरी और RAG में क्या अंतर है?
वे एक ही तकनीक का उपयोग करते हैं: टेक्स्ट स्टोर करना, प्रासंगिक हिस्सों को खोजना और उन्हें कॉन्टेक्स्ट में जोड़ना। RAG का मतलब आमतौर पर दस्तावेज़ों के संग्रह में खोजना होता है। रिट्रीवल मेमोरी का मतलब एजेंट के अपने पिछले नोट्स और बातचीत में खोजना है।
मैं यूज़र्स को मेमोरी पर नियंत्रण कैसे दूं?
उन्हें सरल शब्दों में दिखाएं कि क्या स्टोर किया गया है, उन्हें आइटम एडिट करने या हटाने दें, और उन्हें लॉन्ग-टर्म मेमोरी को बंद करने की सुविधा दें। उन्हें स्पष्ट रूप से बताएं कि सेशन के बीच क्या याद रखा जाता है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।