चैटबॉट से एजेंट तक
चैटबॉट बात करता है। एजेंट काम करता है। बस इसी एक फर्क से इस गाइड का पूरा सुरक्षा क्षेत्र (security field) बनता है।
60 सेकंड में
चैटबॉट से एजेंट तक
चैटबॉट बात करता है। एजेंट काम करता है। बस इसी एक फर्क से इस गाइड का पूरा सुरक्षा क्षेत्र (security field) बनता है।
- 1
एक लक्ष्य (Goal)
हासिल करने के लिए कुछ काम, सिर्फ जवाब देने के लिए कोई सवाल नहीं। "इस बग को ठीक करो।" "सबसे सस्ती फ़्लाइट बुक करो।" - 2
टूल्स (Tools)
असली दुनिया में असली काम। ईमेल भेजना, कोड रन करना, डेटाबेस में क्वेरी करना, इनवॉइस का भुगतान करना, कोई बटन क्लिक करना। - 3
मेमोरी (Memory)
वह नोट्स जो यह अलग-अलग स्टेप्स और कभी-कभी कई दिनों तक संभाल कर रखता है, ताकि यह लंबे कामों पर काम कर सके। - 4
एक लूप (Loop)
यह दोहराता रहता है: सोचो, काम करो, देखो क्या हुआ, फिर से सोचो — जब तक कि लक्ष्य पूरा न हो जाए या यह हार न मान ले।
फर्क देखिए
- आप पूछते हैं, वह जवाब देता है, बात खत्म।
- सबसे बुरा यथार्थवादी नतीजा: वह आपको कुछ गलत बताता है और आप उस पर यकीन कर लेते हैं।
- हर कदम आपकी आँखों के सामने से गुजरता है।
- यह चैट बॉक्स के बाहर किसी भी चीज़ को छू नहीं सकता।
- आप एक लक्ष्य देते हैं, वह अपने आप कई कदम उठाता है।
- सबसे बुरा यथार्थवादी नतीजा: वह डेटाबेस डिलीट कर देता है, पैसे भेज देता है, या किसी अजनबी को आपकी फ़ाइलें ईमेल कर देता है।
- ज्यादातर कदम तब होते हैं जब आप देख नहीं रहे होते।
- यह असली सिस्टम्स को छूता है: फ़ाइलें, पैसा, ईमेल, कोड, अन्य लोग।
एजेंट लूप, एक-एक कदम करके
- 1
अवलोकन (Observe)
लक्ष्य को पढ़ें और इस समय जो भी जानकारी उपलब्ध है उसे देखें। - 2
सोचें (Think)
अगला एक कदम तय करें। "मुझे कस्टमर डेटाबेस में खोजना चाहिए।" - 3
काम करें (Act)
कुछ आर्ग्यूमेंट्स के साथ किसी टूल को कॉल करें।search_customers(name="Mehta") - 4
फिर से अवलोकन करें (Observe again)
टूल का नतीजा पढ़ें। यह नतीजा नया टेक्स्ट है, और यह सीधे मॉडल के कॉन्टेक्स्ट में जाता है। - 5
दोहराएं (Repeat)
वापस 'सोचें' पर लूप करें, अब आपके पास अधिक जानकारी है। तब रुकें जब लक्ष्य पूरा हो जाए, बजट खत्म हो जाए, या कोई इंसान रुकने के लिए कहे।
और देखें और पढ़ें
लैब
40 से कम लाइनों में एक काम करने वाला एजेंट लूप, और वह स्टेप जहाँ यह खतरनाक बन जाता है।
समस्या
calculator(expr) और get_time()। फिर एक तीसरा टूल जोड़ें जो फ़ाइल लिखता है और इसे चलाने से पहले, वह सब कुछ लिख लें जो अब गलत हो सकता है।TOOLS = {
"calculator": lambda expr: str(eval(expr, {"__builtins__": {}}, {})),
"get_time": lambda: __import__("datetime").datetime.now().isoformat(),
}
def agent(goal, max_steps=5):
history = [f"Goal: {goal}"]
for step in range(max_steps):
reply = call_model("\n".join(history)) # you implement this
if reply.startswith("TOOL:"):
name, _, arg = reply[5:].partition(" ")
result = TOOLS[name](arg) if arg else TOOLS[name]()
history.append(f"Tool {name} -> {result}")
else:
return reply
return "gave up"आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आपके एजेंट के पास केवल calculator और get_time है — फ़ाइल का कोई एक्सेस नहीं, कोई नेटवर्क नहीं। तर्क दें कि यह अभी भी सुरक्षित क्यों नहीं है।दिखाएं
eval एक पूरा Python expression evaluator है। भले ही __builtins__ हटा दिए जाएं, किसी ऑब्जेक्ट लिटरल से एट्रिब्यूट ट्रैवर्सल करके इम्पोर्ट मशीनरी तक पहुँचा जा सकता है। एक मॉडल जिसमें इंजेक्शन किया गया है, वह किसी जोड़ के बजाय एक एक्सप्रेशन निकाल सकता है। सबक सामान्य है: किसी टूल का नाम आपको उसका इरादा बताता है, और उसका इम्प्लीमेंटेशन आपको उसकी क्षमता बताता है। केवल दूसरा ही मायने रखता है। ast.literal_eval या एक असली एक्सप्रेशन पार्सर का उपयोग करें।Q2आपके लूप में ठीक किस जगह पर अविश्वसनीय (untrusted) सामग्री एक निर्देश बन जाती है?दिखाएं
history.append(f"Tool {name} -> {result}") पर। वह नतीजा बाहर से आया टेक्स्ट है, जिसे उसी स्ट्रिंग में जोड़ दिया जाता है जिसे मॉडल अपने निर्देशों के रूप में पढ़ता है। इसे अलग करने वाला कोई मार्कर नहीं है। ट्रैक B की हर चीज़ इसी एक लाइन से निकलती है, और प्रॉम्प्ट में शब्दों का कोई भी फेरबदल इसे हटा नहीं सकता — केवल उस क्षमता को हटाना ही काम करता है।अक्सर पूछे जाने वाले सवाल
क्या Siri एक एजेंट है?
एक छोटा, कड़े घेरे में बंधा हुआ एजेंट। इसके पास कुछ ही टूल्स हैं (टाइमर, मैसेज, म्यूज़िक) और एक बहुत छोटा लूप है। आधुनिक कोडिंग और ब्राउज़िंग एजेंट्स के पास सैकड़ों टूल्स और ऐसे लूप होते हैं जो घंटों चलते हैं। ढांचा वही है, पर नुकसान पहुँचाने का दायरा (blast radius) बहुत अलग है।
एजेंट्स को टूल्स दिए ही क्यों जाएं? क्या यह खुद मुसीबत मोल लेना नहीं है?
क्योंकि टूल्स ही तो इसका असली मक़सद हैं। एक मॉडल जो सिर्फ बात कर सकता है, वह केवल एक सुझाव दे सकता है जिसे आपको खुद पूरा करना होगा। टूल्स ही, अनिवार्य रूप से, हमले का जरिया (attack surface) भी हैं। सुरक्षा का काम इसकी उपयोगिता को बनाए रखते हुए नुकसान को कम करना है।
एजेंट यह कैसे तय करता है कि किस टूल का उपयोग करना है?
प्रत्येक टूल का एक नाम और एक लिखित विवरण (description) होता है। वे विवरण मॉडल के सामने रखे जाते हैं, और मॉडल अनुमान लगाता है कि कौन सा सही बैठता है। इसका मतलब है कि एक टूल का विवरण एक प्रॉम्प्ट ही है — और एक दुर्भावनापूर्ण टूल विवरण उसके व्यवहार को हाईजैक कर सकता है। मॉड्यूल 15 देखें।
किसी एजेंट को हमेशा लूप में चलते रहने से क्या रोकता है?
आपके द्वारा तय की गई सीमाएं: स्टेप्स की अधिकतम संख्या, समय की सीमा, खर्च की सीमा, या यह नियम कि उसे N एक्शन के बाद किसी इंसान से पूछना होगा। यदि आपने कोई सीमा तय नहीं की है, तो ऐसी कोई सीमा नहीं है।
क्या एजेंट्स का इस्तेमाल वास्तव में असली कामों के लिए किया जाने लगा है?
हाँ। कोडिंग असिस्टेंट जो कोड को एडिट और रन करते हैं, कस्टमर सपोर्ट बॉट्स जो रिफंड जारी करते हैं, रिसर्च एजेंट्स जो ब्राउज़ और खरीदारी करते हैं, ऑप्स एजेंट्स जो सर्वर रीस्टार्ट करते हैं। इनमें से हर एक क्रिया का असली दुनिया में असर होता है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।