(ऊपर की छवि पर क्लिक करके इस पाठ का वीडियो देखें)
जिस एप्लिकेशन के लिए आप एक एआई एजेंट बना रहे हैं उसकी जटिलता को समझना एक विश्वसनीय एजेंट बनाने के लिए महत्वपूर्ण है। हमें ऐसे एआई एजेंट बनाने की आवश्यकता है जो प्रेरणा(prompt) इंजीनियरिंग से परे जटिल आवश्यकताओं को संबोधित करने के लिए जानकारी का प्रभावी प्रबंधन कर सकें।
इस पाठ में, हम यह देखेंगे कि कॉन्टेक्स्ट इंजीनियरिंग क्या है और एआई एजेंट बनाने में इसकी भूमिका क्या है।
इस पाठ में निम्न शामिल होंगे:
• कॉन्टेक्स्ट इंजीनियरिंग क्या है और यह प्रॉम्प्ट इंजीनियरिंग से किस तरह अलग है।
• प्रभावी कॉन्टेक्स्ट इंजीनियरिंग के रणनीतियाँ, जिनमें जानकारी लिखने, चुनने, संकुचित करने और अलग करने के तरीके शामिल हैं।
• सामान्य कॉन्टेक्स्ट विफलताएँ जो आपके एआई एजेंट को पटरी से उतार सकती हैं और उन्हें कैसे ठीक करें।
इस पाठ को पूरा करने के बाद, आप समझ पाएंगे कि कैसे:
• कॉन्टेक्स्ट इंजीनियरिंग को परिभाषित करें और इसे प्रॉम्प्ट इंजीनियरिंग से अलग पहचानें।
• बड़े भाषा मॉडल (LLM) अनुप्रयोगों में कॉन्टेक्स्ट के प्रमुख घटकों की पहचान करें।
• एजेंट प्रदर्शन सुधारने के लिए कॉन्टेक्स्ट लिखने, चुनने, संकुचित करने और अलग करने की रणनीतियाँ लागू करें।
• कॉन्टेक्स्ट की सामान्य विफलताओं जैसे पॉइज़निंग, ध्यान भटकना, उलझन और टकराव को पहचानें और शमन तकनीकें लागू करें।
एआई एजेंट्स के लिए, कॉन्टेक्स्ट वही है जो एआई एजेंट की योजना को किसी विशेष क्रिया करने के लिए प्रेरित करता है। कॉन्टेक्स्ट इंजीनियरिंग उस अभ्यास को कहा जाता है जिसमें सुनिश्चित किया जाता है कि एआई एजेंट के पास कार्य का अगला कदम पूरा करने के लिए सही जानकारी हो। कॉन्टेक्स्ट विंडो आकार में सीमित होती है, इसलिए एजेंट बिल्डरों के रूप में हमें उन प्रणालियों और प्रक्रियाओं का निर्माण करना होता है जो कॉन्टेक्स्ट विंडो में जानकारी जोड़ने, हटाने और संक्षेप करने का प्रबंधन करें।
प्रॉम्प्ट इंजीनियरिंग एक सेट स्थिर निर्देशों पर केंद्रित होती है जो नियमों के एक समूह के साथ एआई एजेंट्स का प्रभावी मार्गदर्शन करती है। कॉन्टेक्स्ट इंजीनियरिंग गतिशील जानकारी के सेट, प्रारंभिक प्रॉम्प्ट सहित, का प्रबंधन करने का तरीका है ताकि यह सुनिश्चित किया जा सके कि एआई एजेंट के पास समय के साथ जो कुछ चाहिए वह उपलब्ध रहे। कॉन्टेक्स्ट इंजीनियरिंग के मुख्य विचार यह हैं कि इस प्रक्रिया को पुनरावृत्त और विश्वसनीय बनाया जाए।
यह याद रखना महत्वपूर्ण है कि कॉन्टेक्स्ट केवल एक चीज नहीं है। एआई एजेंट को जिसकी आवश्यकता होती है वह जानकारी विभिन्न स्रोतों से आ सकती है और यह हमारे ऊपर है कि हम सुनिश्चित करें कि एजेंट को इन स्रोतों तक पहुंच मिले:
एआई एजेंट को प्रबंधित करने के लिए जिन प्रकार के कॉन्टेक्स्ट की आवश्यकता हो सकती है, उनमें शामिल हैं:
• निर्देश: ये एजेंट के “नियम” जैसे होते हैं – प्रॉम्प्ट, सिस्टम संदेश, few-shot उदाहरण (एआई को कुछ करने का तरीका दिखाना), और उन टूल्स का वर्णन जिनका यह उपयोग कर सकता है। यही वह स्थान है जहाँ प्रॉम्प्ट इंजीनियरिंग का फोकस कॉन्टेक्स्ट इंजीनियरिंग के साथ जुड़ता है।
• ज्ञान: इसमें तथ्य, डेटाबेस से प्राप्त जानकारी, या एजेंट द्वारा संग्रहित दीर्घकालिक यादें शामिल हैं। यदि एजेंट को विभिन्न नॉलेज स्टोर्स और डेटाबेस तक पहुंच की आवश्यकता है तो इसमें Retrieval Augmented Generation (RAG) प्रणाली को एकीकृत करना शामिल हो सकता है।
• टूल्स: ये बाहरी फ़ंक्शन, APIs और MCP Servers की परिभाषाएँ हैं जिन्हें एजेंट कॉल कर सकता है, साथ ही उन टूल्स के उपयोग से मिलने वाले फीडबैक (परिणाम) भी।
• संवाद इतिहास: उपयोगकर्ता के साथ चल रही बातचीत। समय के साथ, ये बातचीत लंबी और अधिक जटिल हो जाती हैं जो कॉन्टेक्स्ट विंडो में स्थान घेरती हैं।
• उपयोगकर्ता की प्राथमिकताएँ: समय के साथ उपयोगकर्ता की पसंद या नापसंद के बारे में सीखी गई जानकारी। इन्हें संग्रहीत किया जा सकता है और उपयोगकर्ता की प्रमुख निर्णयों में मदद करने के लिए बुलाया जा सकता है।
अच्छी कॉन्टेक्स्ट इंजीनियरिंग अच्छी योजना से शुरू होती है। यहाँ एक दृष्टिकोण है जो आपको कॉन्टेक्स्ट इंजीनियरिंग लागू करने के बारे में सोचने में मदद करेगा:
योजना बनाना महत्वपूर्ण है लेकिन जब जानकारी हमारे एजेंट की कॉन्टेक्स्ट विंडो में प्रवाहित होने लगती है, तो हमें इसे प्रबंधित करने के लिए व्यावहारिक रणनीतियाँ चाहिए:
जबकि कुछ जानकारी स्वचालित रूप से कॉन्टेक्स्ट विंडो में जोड़ दी जाएगी, कॉन्टेक्स्ट इंजीनियरिंग इस जानकारी के अधिक सक्रिय प्रबंधन के बारे में है जिसे कुछ रणनीतियों द्वारा किया जा सकता है:
एजेंट स्क्रैचपैड यह एक AI एजेंट को एक सत्र के दौरान वर्तमान कार्यों और उपयोगकर्ता इंटरैक्शनों के बारे में प्रासंगिक जानकारी नोट करने की अनुमति देता है। यह कॉन्टेक्स्ट विंडो के बाहर एक फ़ाइल या रनटाइम ऑब्जेक्ट में मौजूद होना चाहिए जिसे एजेंट बाद में इसी सत्र के दौरान आवश्यक होने पर पुनः प्राप्त कर सके।
स्मृतियाँ स्क्रैचपैड सत्र की एकल कॉन्टेक्स्ट विंडो के बाहर जानकारी प्रबंधित करने के लिए अच्छे हैं। स्मृतियाँ एजेंटों को कई सत्रों में प्रासंगिक जानकारी संग्रहीत और पुनः प्राप्त करने में सक्षम बनाती हैं। इसमें सारांश, उपयोगकर्ता की प्राथमिकताएँ और भविष्य में सुधार के लिए फीडबैक शामिल हो सकता है।
कॉन्टेक्स्ट का संकुचन जब कॉन्टेक्स्ट विंडो बढ़ती है और अपनी सीमा के पास पहुँच जाती है, तो संक्षेपण और ट्रिमिंग जैसी तकनीकों का उपयोग किया जा सकता है। इसमें केवल सबसे प्रासंगिक जानकारी रखना या पुराने संदेशों को हटाना शामिल है।
मल्टी-एजेंट सिस्टम मल्टी-एजेंट सिस्टम विकसित करना कॉन्टेक्स्ट इंजीनियरिंग का एक रूप है क्योंकि प्रत्येक एजेंट की अपनी कॉन्टेक्स्ट विंडो होती है। यह योजना बनाते समय यह तय करना कि वह कॉन्टेक्स्ट कैसे साझा और पास किया जाएगा, एक और बात है।
सैंडबॉक्स वातावरण यदि किसी एजेंट को कुछ कोड चलाने या किसी दस्तावेज़ में बड़ी मात्रा में जानकारी संसाधित करने की आवश्यकता है, तो इसके परिणामों को संसाधित करने के लिए बहुत सारे टोकन लग सकते हैं। इसे पूरी तरह से कॉन्टेक्स्ट विंडो में संग्रहीत करने के बजाय, एजेंट एक सैंडबॉक्स वातावरण का उपयोग कर सकता है जो यह कोड चला सके और केवल परिणामों और अन्य प्रासंगिक जानकारी को पढ़े।
रनटाइम स्टेट ऑब्जेक्ट्स यह उन स्थितियों का प्रबंधन करने के लिए जानकारी के कंटेनर बनाकर किया जाता है जब एजेंट को निश्चित जानकारी तक पहुंच की आवश्यकता होती है। एक जटिल कार्य के लिए, यह एजेंट को प्रत्येक उप-कार्य के परिणामों को चरण-दर-चरण संग्रहीत करने में सक्षम बनाएगा, जिससे कॉन्टेक्स्ट केवल उस विशिष्ट उप-कार्य से जुड़ा रहे।
मान लीजिए हम एक एआई एजेंट चाहते हैं जो “मेरे लिए पेरिस की यात्रा बुक करे।”
• एक साधारण एजेंट जो केवल प्रॉम्प्ट इंजीनियरिंग का उपयोग करता है बस जवाब दे सकता है: “ठीक है, आप पेरिस कब जाना चाहेंगे?”। उसने केवल उस समय आपके सीधे प्रश्न को संसाधित किया जब उपयोगकर्ता ने पूछा।
• उस एजेंट के मुकाबले जो ऊपर वर्णित कॉन्टेक्स्ट इंजीनियरिंग रणनीतियों का उपयोग करता है वह बहुत कुछ और करेगा। प्रत्युत्तर देने से पहले, उसकी प्रणाली शायद:
◦ आपके कैलेंडर की जाँच करे उपलब्ध तारीखों के लिए (रीअल-टाइम डेटा प्राप्त करना)।
◦ पिछली यात्रा प्राथमिकताओं को याद करे (दीर्घकालिक स्मृति से) जैसे आपकी पसंदीदा एयरलाइन, बजट, या क्या आप सीधे उड़ानें पसंद करते हैं।
◦ उपलब्ध टूल्स की पहचान करे जैसे फ़्लाइट और होटल बुकिंग वाले टूल्स।
यह क्या है: जब कोई हल्लूसिनेशन (LLM द्वारा उत्पन्न गलत जानकारी) या कोई त्रुटि कॉन्टेक्स्ट में प्रवेश कर जाती है और बार-बार संदर्भित की जाती है, जिससे एजेंट असंभव लक्ष्यों का पीछा करने या अर्थहीन रणनीतियाँ विकसित करने लगता है।
क्या करना है: कॉन्टेक्स्ट सत्यापन और क्वारंटीन लागू करें। दीर्घकालिक स्मृति में जोड़ने से पहले जानकारी का सत्यापन करें। यदि संभावित पॉइज़निंग का पता चलता है, तो खराब जानकारी के फैलाव को रोकने के लिए नए साफ़ कॉन्टेक्स्ट थ्रेड शुरू करें।
यात्रा बुकिंग उदाहरण: आपका एजेंट एक छोटे स्थानीय हवाई अड्डे से एक दूर के अंतरराष्ट्रीय शहर के लिए सीधी उड़ान का हल्लूसिनेशन करता है जो वास्तव में अंतरराष्ट्रीय उड़ानें प्रदान नहीं करता। यह मौजूद न होने वाला फ़्लाइट विवरण कॉन्टेक्स्ट में सहेज लिया जाता है। बाद में, जब आप एजेंट से बुक करने के लिए कहते हैं, तो यह इस असंभव रूट के लिए टिकट ढूँढने की कोशिश करता रहता है, जिससे बार-बार त्रुटियाँ होने लगती हैं।
समाधान: एक चरण लागू करें जो एजेंट के वर्किंग कॉन्टेक्स्ट में फ़्लाइट विवरण जोड़ने से पहले फ़्लाइट की उपस्थिति और रूट की वास्तविक-समय API के साथ पुष्टि करे। यदि सत्यापन विफल होता है, तो त्रुटिपूर्ण जानकारी को “क्वारंटीन” किया जाता है और आगे इस्तेमाल नहीं किया जाता।
यह क्या है: जब कॉन्टेक्स्ट इतना बड़ा हो जाता है कि मॉडल संचयी इतिहास पर बहुत अधिक ध्यान केंद्रित करने लगता है और प्रशिक्षण में सीखे गए ज्ञान का उपयोग कम कर देता है, जिससे पुनरावृत्त या अनुपयोगी क्रियाएँ होती हैं। मॉडल्स कभी-कभी तब भी गलती करने लगते हैं जब कॉन्टेक्स्ट विंडो पूरी नहीं हुई होती।
क्या करना है: कॉन्टेक्स्ट सारांशकरण का उपयोग करें। समय-समय पर संचयी जानकारी को छोटे सारांशों में संकुचित करें, महत्वपूर्ण विवरणों को रखते हुए अनावश्यक इतिहास हटा दें। यह फोकस को “रीसेट” करने में मदद करता है।
यात्रा बुकिंग उदाहरण: आप काफी लंबे समय से विभिन्न ड्रीम ट्रैवल गंतव्यों पर चर्चा कर रहे हैं, जिसमें आपकी दो साल पुरानी बैकपैकिंग यात्रा का विस्तृत विवरण भी शामिल है। जब आप अंततः पूछते हैं “अगले महीने के लिए सस्ती उड़ान ढूंढो,” तो एजेंट पुराने, अप्रासंगिक विवरणों में फंस जाता है और बार-बार आपके बैकपैकिंग गियर या पिछले यात्रा कार्यक्रम के बारे में पूछता रहता है, आपकी वर्तमान अनुरोध की उपेक्षा करता है।
समाधान: एक निश्चित संख्या में टर्न्स के बाद या जब कॉन्टेक्स्ट बहुत बड़ा हो जाए, एजेंट को संवाद के हाल के और प्रासंगिक हिस्सों का सारांश बनाना चाहिए – आपकी वर्तमान यात्रा की तारीखों और गंतव्य पर ध्यान केंद्रित करते हुए – और अगले LLM कॉल के लिए उस संकुचित सारांश का उपयोग करना चाहिए, कम प्रासंगिक इतिहास को छोड़ते हुए।
यह क्या है: जब अनावश्यक कॉन्टेक्स्ट, अक्सर बहुत सारे उपलब्ध टूल्स के रूप में, मॉडल को खराब उत्तर जनरेट करने या अप्रासंगिक टूल्स कॉल करने का कारण बनता है। छोटे मॉडल विशेष रूप से इसके प्रति संवेदनशील होते हैं।
क्या करना है: RAG तकनीकों का उपयोग करते हुए टूल लोडआउट प्रबंधन लागू करें। टूल विवरणों को एक वेक्टर डेटाबेस में स्टोर करें और प्रत्येक विशिष्ट कार्य के लिए केवल सबसे प्रासंगिक टूल चुनें। शोध दिखाता है कि टूल चयन को 30 से कम तक सीमित रखना लाभदायक है।
यात्रा बुकिंग उदाहरण: आपके एजेंट के पास दर्जनों टूल्स तक पहुंच है: book_flight, book_hotel, rent_car, find_tours, currency_converter, weather_forecast, restaurant_reservations, आदि। आप पूछते हैं, “पेरिस में घूमने का सबसे अच्छा तरीका क्या है?” टूल्स की संख्या के कारण, एजेंट भ्रमित हो जाता है और पेरिस के भीतर book_flight कॉल करने की कोशिश करता है, या rent_car को कॉल करता है जबकि आप सार्वजनिक परिवहन पसंद करते हैं, क्योंकि टूल विवरण ओवरलैप कर सकते हैं या यह तय नहीं कर पाता कि सबसे उपयुक्त कौन सा है।
समाधान: टूल विवरणों पर RAG का उपयोग करें। जब आप पेरिस में घूमने के बारे में पूछते हैं, तो सिस्टम गतिशील रूप से केवल सबसे प्रासंगिक टूल्स जैसे rent_car या public_transport_info को आपके प्रश्न के आधार पर पुनः प्राप्त करता है, और LLM को एक केन्द्रित “लोडआउट” प्रस्तुत करता है।
यह क्या है: जब कॉन्टेक्स्ट के अंदर विरोधाभासी जानकारी मौजूद होती है, तो इससे असंगत तर्क या खराब अंतिम उत्तर उत्पन्न होते हैं। यह अक्सर तब होता है जब जानकारी चरणों में आती है और प्रारंभिक, गलत धारणाएँ कॉन्टेक्स्ट में बनी रहती हैं।
क्या करना है: कॉन्टेक्स्ट प्रूनिंग और ऑफ़लोडिंग का उपयोग करें। प्रूनिंग का अर्थ है जैसे ही नई जानकारी आती है पुरानी या विरोधाभासी जानकारी को हटाना। ऑफलोडिंग मॉडल को एक अलग “स्क्रैचपैड” कार्यक्षेत्र देता है ताकि बिना मुख्य कॉन्टेक्स्ट को गंदा किए जानकारी प्रोसेस की जा सके।
यात्रा बुकिंग उदाहरण: आप प्रारंभ में अपने एजेंट से कहते हैं, “मैं इकोनॉमी क्लास में उड़ना चाहता हूँ।” बातचीत के बाद, आप अपना मन बदलकर कहते हैं, “दरअसल, इस यात्रा के लिए, बिज़नेस क्लास ही लेनी है।” यदि दोनों निर्देश कॉन्टेक्स्ट में बने रहते हैं, तो एजेंट विरोधाभासी खोज परिणाम प्राप्त कर सकता है या यह निर्धारित करने में उलझन में पड़ सकता है कि किस प्राथमिकता को प्राथमिकता देनी है।
समाधान: कॉन्टेक्स्ट प्रूनिंग लागू करें। जब कोई नया निर्देश पुराने निर्देश का विरोध करता है, तो पुराना निर्देश हटाया जाता है या स्पष्ट रूप से ओवरराइड किया जाता है। वैकल्पिक रूप से, एजेंट विरोधाभासी प्राथमिकताओं को सुलझाने के लिए एक स्क्रैचपैड का उपयोग कर सकता है, यह सुनिश्चित करते हुए कि केवल अंतिम, सुसंगत निर्देश ही उसके क्रियाओं का मार्गदर्शन करें।
हमारे साथ जुड़ें Microsoft Foundry Discord पर ताकि आप अन्य शिक्षार्थियों से मिल सकें, ऑफिस आवर्स में हिस्सा ले सकें और अपने एआई एजेंट्स से संबंधित प्रश्नों के उत्तर पा सकें।
अस्वीकरण: इस दस्तावेज़ का अनुवाद AI अनुवाद सेवा Co-op Translator (https://github.com/Azure/co-op-translator) का उपयोग करके किया गया है। हम सटीकता के लिए प्रयास करते हैं, पर कृपया ध्यान रखें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ अपनी मूल भाषा में ही प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए पेशेवर मानव अनुवाद की सलाह दी जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफ़हमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं होंगे।