Metlivi ब्लॉग

क्या AI गेम मेमोरी अध्यायों के पार बनी रहनी चाहिए? क्या रखें और क्या रीसेट करें, इसके लिए एक व्यावहारिक डिज़ाइन

एक अध्याय-आधारित गेम के लिए, AI मेमोरी को अध्याय की सीमा केवल तभी पार करनी चाहिए जब वह किसी ऐसे स्थायी तथ्य का प्रतिनिधित्व करती हो जिसे गेम बाद में प्रासंगिक बनाना चाहता है। खिलाड़ी की प्रतिबद्धताओं, स्थापित संबंधों और पुष्ट किए गए विश्व तथ्यों को एक संरचित, अधिकृत (authored) रिकॉर्ड में रखें। AI को उस रिकॉर्ड का एक छोटा प्रासंगिक दृश्य, जानबूझकर रखी गई यादों के साथ प्राप्त (retrieve) करने दें। दृश्य-विशिष्ट संदर्भ (scene-specific context), अस्थायी लक्ष्यों और पल-पल के विवरणों को रीसेट करें, जब तक कि अगले अध्याय को स्पष्ट रूप से उनकी आवश्यकता न हो। गेम की सेव की गई स्थिति (saved state) ही अंतिम अधिकार होनी चाहिए; जनरेट किया गया संवाद इसका वर्णन कर सकता है, लेकिन इसे चुपचाप फिर से लिख (rewrite) नहीं सकता।

30 सितंबर 20266 min readपढ़ना, कला और संस्कृतिलेखक: Metlivi Editorial Team
खंड 1

स्थायी कैनन को दृश्य मेमोरी से अलग रखें

“मेमोरी” कई अलग-अलग चीज़ों को संदर्भित कर सकती है: घटनाओं का रिकॉर्ड, उन घटनाओं का सारांश या व्याख्या, और वे तथ्य जिन्हें गेम सत्य मानता है। इन्हें आपस में मिलाने से अध्याय के बदलावों का विश्लेषण करना कठिन हो जाता है। उदाहरण के लिए, किसी पात्र ने कोई अफवाह सुनी हो सकती है, लेकिन वह अफवाह केवल इसलिए स्वचालित रूप से विश्व का पुष्ट तथ्य नहीं बननी चाहिए क्योंकि AI उसे आत्मविश्वास के साथ याद करता है।

एक उपयोगी डिज़ाइन दो संबंधित परतें रखना है। पहली गेम के स्वामित्व वाली एक प्रामाणिक (canonical) स्थिति है: संरचित तथ्य जैसे promised_to_return: true, gave_map_to: Mira, या bridge_status: repaired। इन्हें गेम के नियमों या स्पष्ट निर्माण (authoring) के माध्यम से सहेजा और बदला जाता है। दूसरी एक AI रिट्रीवल व्यू है: प्रतिक्रिया को आकार देने के लिए प्रदान किए गए चयनित तथ्य, यादें और वर्तमान दृश्य का संदर्भ। यह दृश्य स्वयं सेव फ़ाइल बने बिना संक्षिप्त और पात्र-विशिष्ट हो सकता है।

यह अनुशंसा एक आर्किटेक्चरल निष्कर्ष है, किसी एक इंजन द्वारा गारंटीकृत सुविधा नहीं। नैरेटिव स्क्रिप्टिंग सिस्टम पहले से ही ऐसे स्टोरी वेरिएबल्स में अंतर करते हैं जिन्हें पूरी कहानी में पढ़ा जा सकता है और संकीर्ण दायरे वाले अस्थायी मानों में; उदाहरण के लिए, Ink ग्लोबल वेरिएबल्स और अस्थायी वेरिएबल्स को अलग-अलग दस्तावेज़ित करता है। इसका रनटाइम स्टोरी की स्थिति को सीरियलाइज़ और रीस्टोर करने का एक तरीका भी प्रदान करता है। वे क्षमताएं एक उपयोगी मॉडल प्रदान करती हैं: स्थिति को सोच-समझकर प्रस्तुत करें, फिर तय करें कि प्रत्येक मान को किस दायरे (scope) और स्थायित्व (persistence) की आवश्यकता है। Ink’s variable and logic documentation और Ink’s runtime saving and loading documentation

खंड 2

तय करें कि अध्यायों के पार रहने वाले रिकॉर्ड में किसे जगह मिले

प्रत्येक संभावित मेमोरी के लिए पूछें: क्या बाद का कोई दृश्य सही मायने में इस तथ्य पर निर्भर हो सकता है, और क्या कोई स्पष्ट गेम इवेंट या अधिकृत नियम है जो इसकी पुष्टि कर सकता है? यदि हाँ, तो इसे स्थायी स्थिति के रूप में संग्रहीत करने पर विचार करें। किसी साथी के लिए खिलाड़ी द्वारा चुना गया नाम, पूरा किया गया वादा, या कोई दरवाज़ा खोला गया था या नहीं—जब कहानी बाद में इसका उपयोग करती है, तो ये इसके योग्य हो सकते हैं। जब भी अंतर्निहित तथ्य को स्पष्ट रूप से व्यक्त किया जा सके, तो असीमित ट्रांसक्रिप्ट के बजाय केवल एक मान और उसका दायरा संग्रहीत करें।

एक व्यावहारिक रिकॉर्ड विषय, तथ्य, स्रोत घटना (source event) और स्थायित्व के दायरे की पहचान कर सकता है। उदाहरण के लिए: subject: Mira; fact: player shared the map; source: chapter_2_choice_14; scope: campaign। स्रोत घटना असहमति को सुलझाने में मदद करती है: यदि बाद में जनरेट की गई कोई पंक्ति यह दावा करती है कि खिलाड़ी ने नक्शा दे दिया था, लेकिन रिकॉर्ड किया गया विकल्प कुछ और कहता है, तो गेम इवेंट रिकॉर्ड को प्राथमिकता दे सकता है। यह स्कीमा एक डिज़ाइन सुझाव है, उद्धृत टूल्स द्वारा अनिवार्य किया गया प्रारूप नहीं।

अनिश्चित या अपुष्ट सामग्री को अलग रखें। “गार्ड को संदेह है कि खिलाड़ी ने चाबी ली है” और “खिलाड़ी ने चाबी ली है” अलग-अलग तथ्य हैं। अध्याय समाप्त होने के बाद भी कोई पात्र संदेह को याद रख सकता है, जबकि कैनोनिकल विश्व रिकॉर्ड अभी भी यह कहता है कि चाबी अपने मूल स्थान पर बनी हुई है। अफ़वाह, अवलोकन, निष्कर्ष, और पुष्ट घटना जैसे लेबलों का उपयोग करें यदि बाद के संवाद में उन अंतरों को बनाए रखने की आवश्यकता है।

खंड 3

जो वर्तमान दृश्य का हिस्सा है उसे रीसेट करें

दृश्य की स्थिति में अक्सर बातचीत का तात्कालिक विषय, एक अस्थायी उद्देश्य, पिछले कुछ आदान-प्रदान, स्थानीय मंचन (local staging), और अल्पकालिक विवरण शामिल होते हैं जैसे कि वर्तमान में कौन सा दरवाज़ा खुला है। ये विवरण AI को अगली पंक्ति का उत्तर देने में मदद कर सकते हैं, लेकिन उन्हें अभियान (campaign) की मेमोरी बनने की शायद ही कभी आवश्यकता होती है। दृश्य से बाहर निकलते समय उन्हें साफ़ कर दें या अगले दृश्य के अधिकृत सेटअप से उन्हें फिर से बनाएँ।

यह सीमा इसलिए महत्वपूर्ण है क्योंकि स्थायित्व के अलग-अलग अर्थ होते हैं। Unity का डेटा-पर्सिस्टेंस ट्यूटोरियल उस डेटा में अंतर करता है जो एक सत्र के दौरान दृश्यों के बीच खिलाड़ी का अनुसरण करता है और उस प्रगति में जिसे सत्रों के पार सहेजा और पुनर्स्थापित किया जाता है; यह यह भी नोट करता है कि एक दृश्य से दूसरे दृश्य में जाने पर आमतौर पर दृश्य द्वारा बनाया गया डेटा खो जाता है, जब तक कि गेम उसे आगे न ले जाए। इसलिए अध्याय का परिवर्तन एक सोचा-समझा स्थानांतरण निर्णय है, हर सक्रिय मान को बनाए रखने का कोई स्वचालित कारण नहीं। Unity Learn: Implement data persistence between scenes

चार-चरणीय ट्रांज़िशन रूटीन आज़माएँ: पुष्ट अध्याय घटनाओं को अंतिम रूप दें; प्रामाणिक अभियान रिकॉर्ड को अपडेट करें; अस्थायी दृश्य संदर्भ को त्यागें; फिर अगले अध्याय के AI संदर्भ को उसके अधिकृत सेटअप और प्रासंगिक स्थायी तथ्यों से तैयार करें। यह पुराने विवरणों को एक नए दृश्य में लीक होने से रोकता है और साथ ही उस निरंतरता को बनाए रखता है जिसका कहानी स्पष्ट रूप से समर्थन करती है।

खंड 4

अधिकृत सेव स्थिति को अंतिम अधिकार बनाए रखें

अध्याय की शुरुआत में, AI को वर्णन और संवाद के लिए केवल-पठन (read-only) संदर्भ के रूप में वर्तमान स्थिति दें। यदि खिलाड़ी के कार्य स्थायी तथ्यों को बदल सकते हैं, तो गेम से उस क्रिया को अपने स्वयं के नियमों के विरुद्ध मान्य करवाएं और सामान्य स्थिति-परिवर्तन पथ के माध्यम से सेव रिकॉर्ड को अपडेट करें। मॉडल आउटपुट को एक प्रस्तावित पंक्ति या क्रिया के रूप में मानें, न कि इस बात के प्रमाण के रूप में कि कोई घटना घटित हुई है। यह अलगाव एक डिज़ाइन अनुशंसा है जो सेव की गई स्थिति को जनरेट किए गए टेक्स्ट से अलग करने की आवश्यकता से उत्पन्न हुई है; इसे गेम के अपने आर्किटेक्चर में लागू और परीक्षण किया जाना चाहिए।

नैरेटिव शोध में एक उपयोगी मिसाल मिलती है: जनरेटिव एजेंट्स पेपर अनुभवों को संग्रहीत करने, विचारों का संश्लेषण करने और व्यवहार को निर्देशित करने के लिए चयनित यादों को गतिशील रूप से प्राप्त करने का वर्णन करता है। यह एक एजेंट जो विचार करता है उसे आकार देने के लिए रिट्रीवल और संश्लेषण का उपयोग करने का समर्थन करता है। यह यह स्थापित नहीं करता है कि जनरेट की गई स्मृति को कैनोनिकल गेम स्थिति होना चाहिए। यह अंतर महत्वपूर्ण है: एक सारांश उपयोगी संदर्भ हो सकता है और फिर भी वह परिवर्तनीय या अपूर्ण हो सकता है। Park et al., “Generative Agents: Interactive Simulacra of Human Behavior”

पुनरुत्पादक (reproducible) सेव के लिए, गेम के संरचित तथ्यों और उस स्टोरी रनटाइम स्थिति को बनाए रखें जिसकी गेम को फिर से शुरू करने के लिए आवश्यकता है। Ink का रनटाइम दस्तावेज़ स्टोरी स्थिति को JSON में सीरियलाइज़ करने और उसे फिर से लोड करने का प्रदर्शन करता है। सुविधा के लिए एक जनरेट किया गया सारांश भी संग्रहीत किया जा सकता है, लेकिन लोड करते समय इसे संरचित रिकॉर्ड के विरुद्ध दोबारा बनाएँ या जांचें; किसी पुराने सारांश को नए सहेजे गए विकल्प को ओवररूल न करने दें। Ink runtime: Saving and loading

खंड 5

सीमा को खिलाड़ियों के लिए दृश्यमान बनाएँ

खिलाड़ियों को आंतरिक मेमोरी संरचनाओं को देखने की आवश्यकता नहीं है, लेकिन वे यह समझने में सक्षम होने चाहिए कि कौन से विकल्प आगे बढ़े हैं। परिणामों को कहानी में वहीं दिखाएं जहाँ वे स्वाभाविक रूप से संबंधित हैं: एक साथी नक्शे को याद करता है, या बाद का कोई दृश्य पहले के वादे को दर्शाता है। जब सेव या अध्याय का संक्षिप्त विवरण (recap) एक उपयुक्त स्थान प्रदान करता है, तो कुछ परिणामी पुष्ट तथ्यों को सरल भाषा में संक्षेप में प्रस्तुत करें। यह संकेत देने से बचें कि हर तात्कालिक (improvised) पंक्ति स्थायी कैनन बन गई है।

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

खंड 6

ठोस मामलों के साथ अध्याय परिवर्तनों का परीक्षण करें

उन तथ्यों के इर्द-गिर्द एक छोटी ट्रांज़िशन चेकलिस्ट बनाएं जिन्हें आपका गेम वास्तव में ट्रैक करता है। प्रत्येक मामले के लिए, सहेजे गए रिकॉर्ड और अध्याय बदलने के बाद प्रदान किए गए AI संदर्भ दोनों का निरीक्षण करें।

खिलाड़ी की एक पुष्ट पसंद बनी रहती है और अगले अध्याय को प्रभावित कर सकती है जहाँ अधिकृत सामग्री इसका उपयोग करती है।

एक अफवाह या पात्र का निष्कर्ष पुष्ट घटना बनने के बजाय अनिश्चित के रूप में लेबल रहता है।

एक अस्थायी दृश्य लक्ष्य और हालिया संवादात्मक विवरण तब तक गायब हो जाते हैं जब तक कि अगले दृश्य को स्पष्ट रूप से उनकी आवश्यकता न हो।

एक नया लोड किया गया सेव उन्हीं कैनोनिकल विकल्पों को पुनर्स्थापित करता है, भले ही AI ने पहले विरोधाभासी गद्य जनरेट किया हो।

बिना किसी प्रासंगिक संबंध वाला एक नया अध्याय केवल इसलिए असंबंधित यादें प्राप्त नहीं करता क्योंकि वे मौजूद हैं।

ये जांच एक प्रस्तावित नैदानिक पद्धति हैं, कोई रिपोर्ट किया गया प्रयोग नहीं। वे दो सामान्य दोषों को खोजना आसान बनाते हैं: निरंतरता की हानि (continuity loss), जहाँ स्थायी तथ्य गायब हो जाते हैं, और मेमोरी का रिसाव (memory leakage), जहाँ पुराने दृश्य के विवरण ऐसे संदर्भ में दिखाई देते हैं जिसे रीसेट होना चाहिए था। जब दोनों में से कोई भी होता है, तो लंबे प्रॉम्प्ट के साथ इसे ठीक करने का प्रयास करने से पहले स्थायित्व के दायरे और संदर्भ-निर्माण के चरण की जांच करें।

खंड 7

अध्याय-आधारित मेमोरी के लिए एक संक्षिप्त नियम

किसी तथ्य को तब बनाए रखें जब अधिकृत गेम उसका नाम बता सके, उसके स्रोत की पुष्टि कर सके और उसके लिए बाद के उपयोग को परिभाषित कर सके। व्यक्तिगत संस्मरणों को पुनर्प्राप्त संदर्भ के रूप में रखें जब वे चरित्र या निरंतरता जोड़ते हैं, जबकि अनिश्चितता और स्रोत को बनाए रखते हैं। सीमा पर दृश्य-स्थानीय स्थिति को रीसेट करें। हर स्तर पर, सहेजी गई, अधिकृत गेम स्थिति को यह निर्धारित करने दें कि क्या सच है; AI मेमोरी को उस सच्चाई पर प्रतिक्रिया देने में पात्र की मदद करने दें।

संबंधित लेख

इस विषय को आगे पढ़ें