इकाई 9 / 11

एआई एजेंट और उपकरण का उपयोग

लाभ:

  • एक एजेंट को 'मॉडल + टूल्स + लूप' के रूप में परिभाषित करना और यह तय करना कि इसकी आवश्यकता कब है
  • नाम, विवरण और इनपुट_स्कीमा के साथ टूल परिभाषा लिखना
  • टूल_यूज और टूल_रिजल्ट लूप के प्रवाह और त्रुटि प्रबंधन की निगरानी करना

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

एजेंट क्या है? मॉडल + उपकरण + लूप

एआई एजेंट में तीन भाग होते हैं: मॉडल (मस्तिष्क जो निर्णय लेता है), उपकरण (वे कार्य जिन्हें मॉडल कॉल कर सकता है: मौसम, डेटाबेस क्वेरी, ईमेल भेजें), और लूप (लूप; मॉडल टूल को कॉल करता है, परिणाम प्राप्त करता है, फिर से निर्णय लेता है कि क्या करना है, और इसी तरह)।

महत्वपूर्ण अंतर: एकल पैटर्न कॉल एक एजेंट नहीं है। एजेंट एक ऐसी प्रक्रिया है जिसमें मॉडल चरण दर चरण आगे बढ़ता है, प्रत्येक चरण पर उपकरण के परिणाम के आधार पर अगला कदम चुनता है। "एक इंसान की तरह सोचो, अपने हाथों का उपयोग करो, परिणाम देखो, फिर से सोचो।"

एक महत्वपूर्ण तथ्य: मॉडल स्वयं वाहन को संचालित नहीं करता है। मॉडल सिर्फ इतना कहता है "मैं इस टूल को इन इनपुट के साथ कॉल करना चाहता हूं"। आपका एप्लिकेशन (जिसे हार्नेस कहा जाता है) टूल चलाता है और परिणाम को मॉडल पर लौटाता है। यह सुरक्षा के लिए महत्वपूर्ण है: मॉडल सीधे आपके सिस्टम को नहीं छूता है; प्रत्येक क्रिया आपके नियंत्रण में है.

युक्ति: हर समस्या को एजेंट के साथ हल करने का प्रयास न करें। प्रतिनिधि; देरी, लागत और त्रुटियों का जोखिम बढ़ जाता है। पहले पूछें: "क्या इसे एक कॉल या एक निश्चित वर्कफ़्लो से हल किया जाएगा?" यदि उत्तर हाँ है, तो एजेंट की कोई आवश्यकता नहीं है। एजेंट ओपन-एंडेड कार्यों के लिए है जहां चरणों को पहले से नहीं जाना जा सकता है।

टूल परिभाषा: नाम, विवरण, इनपुट_स्कीमा

मॉडल में एक टूल पेश करने के लिए, आप तीन चीजें देते हैं:

  • नाम: वाहन की पहचान, उदा. मौसम प्राप्त करें.
  • विवरण: टूल क्या करता है और इसे कब कॉल करना है। यह सबसे महत्वपूर्ण क्षेत्र है जो मॉडल को सही समय पर सही उपकरण चुनने की अनुमति देता है। न केवल "क्या करता है" बल्कि "कब कॉल करें" भी लिखें।
  • इनपुट_स्कीमा (इनपुट स्कीमा): JSON स्कीमा जो परिभाषित करती है कि उपकरण किस पैरामीटर की अपेक्षा करता है, किस प्रकार में।

# वाहन परिभाषा (वैचारिक - JSON स्कीमा) { "नाम": "get_order_status", "विवरण": "ऑर्डर की वर्तमान शिपिंग स्थिति प्राप्त करता है। जब उपयोगकर्ता पूछता है कि ऑर्डर नंबर कहां है या यह कब आएगा तो कॉल करें।", "input_schema": { "प्रकार": "ऑब्जेक्ट", "गुण": { "ऑर्डर_नो": {"प्रकार": "स्ट्रिंग", "विवरण": "ऑर्डर नंबर, उदाहरण के लिए SP-1024" } }, "आवश्यक": ["order_no"] }}

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

क्षेत्र

यह क्या करता है?

अच्छा उदाहरण

ख़राब उदाहरण

नाम

वाहन आईडी

order_status_getir

लाओ

विवरण

यह क्या करता है + कब कॉल करना है

"कार्गो स्थिति लौटाता है; जब उपयोगकर्ता पूछता है कि ऑर्डर कहां है तो कॉल करें"

"डेटा लाता है"

इनपुट_स्कीमा

पैरामीटर प्रकार और आवश्यकता

{order_no: स्ट्रिंग, एनोटेटेड}

कोई आरेख/कोई विवरण नहीं

टूल_यूज़ → टूल_रिजल्ट लूप

चक्र इस प्रकार चरण दर चरण कार्य करता है:

  1. आप उपयोगकर्ता प्रश्न + टूल विवरण मॉडल को भेजें।
  2. मॉडल या तो सीधे प्रतिक्रिया देता है या टूल_यूज़ ब्लॉक उत्पन्न करता है: "ऑर्डर_नो=एसपी-1024 के साथ ऑर्डर_डुरुमु_गेटिर को कॉल करें।"
  3. आपका एप्लिकेशन वास्तव में टूल चलाता है (डेटाबेस से पूछताछ करता है)।
  4. आप परिणाम को वापस टूल_रिजल्ट के रूप में मॉडल पर भेजते हैं।
  5. इस परिणाम के साथ, मॉडल या तो अंतिम उत्तर तैयार करता है या किसी अन्य टूल को कॉल करता है। यह चक्र तब तक जारी रहता है जब तक मॉडल यह नहीं कह देता कि "मेरा काम हो गया।"

# एजेंट लूप (वैचारिक) संदेश = [उपयोगकर्ता_प्रश्न] जबकि सत्य: प्रतिक्रिया = मॉडल.यूरेट (संदेश, उपकरण = उपकरण_परिभाषाएं) यदि प्रतिक्रिया.तुर == "टूल_उपयोग": परिणाम = हार्नेस.रन (प्रतिक्रिया.टूल_नाम, प्रतिक्रिया.प्रविष्टियां) # एप्लिकेशन संदेश चलाता है + = [प्रतिक्रिया, टूल_परिणाम (परिणाम)] # परिणाम लौटाएं अन्यथा: ब्रेक # अंतिम प्रतिक्रिया; लूप समाप्त होता है

आधुनिक एसडीके टूल रनर प्रदान करते हैं जो आपके लिए इस लूप को चलाते हैं; आप बस टूल फ़ंक्शंस लिखें। लेकिन पर्दे के पीछे बिल्कुल यही हो रहा है।

त्रुटि प्रबंधन

उपकरण विफल हो सकते हैं: ऑर्डर नहीं मिला, एपीआई समय समाप्त, इनपुट अमान्य है। यदि आप उपकरण नहीं चला सकते हैं, तो मॉडल में त्रुटि को एक वर्णनात्मक टूल_परिणाम ("त्रुटि: ऑर्डर संख्या एसपी-9999 नहीं मिला") और त्रुटि ध्वज के रूप में लौटाएं। मॉडल इसे देख सकता है और उपयोगकर्ता को धीरे से समझा सकता है, या अलग तरीके से प्रयास कर सकता है। त्रुटि को स्वीकार न करें और खाली परिणाम न लौटाएँ; मॉडल को पता होना चाहिए कि क्या गलत हुआ।

कमजोर/मजबूत वाहन विवरण

कमजोर (अनिश्चित संज्ञा, नहीं "कब"):

नाम: "डेटा", विवरण: "डेटा लाता है"# मॉडल को नहीं पता कि कब और कैसे कॉल करना है; यह या तो कॉल ही नहीं करता या गलत तरीके से कॉल करता है।

सशक्त (शुद्ध नाम + कब + पैरामीटर विवरण):

नाम: "musteri_bakiyesi_getir"विवरण: "ग्राहक के चालू खाते की शेष राशि लौटाता है। जब उपयोगकर्ता डेबिट, क्रेडिट या शेष राशि मांगता है तो कॉल करें। भुगतान नहीं करता है।"input_schema: {custeri_id: string ("ग्राहक आईडी")}# मॉडल अपनी सीमा को जानते हुए, सही मापदंडों के साथ सही समय पर कॉल करता है।

तीन मिनी मामले

केस 1 - अनावश्यक एजेंट। एक टीम ने मल्टी-टूल एजेंट के साथ "सारांश पाठ" व्यवसाय बनाया; प्रत्येक पुनर्कथन में 4 मॉडल कॉल और 9 सेकंड लगते हैं। यह काम वास्तव में एक-कॉल वाला काम था। जब हमने एजेंट को हटा दिया और इसे एक कॉल तक सीमित कर दिया, तो समय घटकर 1.5 सेकंड रह गया और लागत घटकर एक चौथाई रह गई। पाठ: जब वास्तव में आवश्यक हो तो एजेंट का उपयोग करें।

केस 2 - कमजोर स्पष्टीकरण, गलत कॉल। एक समर्थन एजेंट में, संतुलन प्रश्न और शिपिंग प्रश्न दोनों में मॉडल द्वारा फ़ेच नामक एक अस्पष्ट उपकरण को यादृच्छिक रूप से बुलाया गया था। जब वाहनों को बैलेंस_गेटिर और कार्गो_डुरुमु_गेटिर में विभाजित किया गया और "जब कॉल करें" स्पष्टीकरण जोड़ा गया, तो 50 उदाहरणों में गलत वाहन चयन 18 से घटकर 1 हो गया।

केस 3 - त्रुटि निगल गई। ऑर्डर नहीं मिलने पर एक एजेंट खाली परिणाम लौटा रहा था; मॉडल ने इसकी व्याख्या "ऑर्डर डिलीवर हो गया" के रूप में की और ग्राहक को गुमराह किया। जब त्रुटि संदेश स्पष्ट रूप से टूल_रिजल्ट ("ऑर्डर नहीं मिला") पर लिखा जाता है, तो मॉडल सही ढंग से कहता है "मुझे यह नंबर नहीं मिला, क्या आप इसे जांच सकते हैं?" वह कहने लगा.

सामान्य गलतियाँ

  • सब कुछ एक एजेंट के हवाले करना: जबकि एक कॉल पर्याप्त है, एजेंट लागत और देरी जोड़ता है।
  • वाहन का अस्पष्ट विवरण: मॉडल को नहीं पता कि कब कॉल करना है; ग़लत चुनता है.
  • यह सोचकर कि मॉडल वाहन चलाता है: हार्नेस वाहन चलाता है; मॉडल बस चाहता है.
  • त्रुटि को निगलना: मॉडल को पता होना चाहिए कि क्या गलत हुआ; त्रुटि को ओपन टूल_रिजल्ट के रूप में दें।
  • बहुत सारे समान वाहन: मॉडल भ्रमित हो जाता है; टूलसेट को केंद्रित और न्यूनतम रखें।
ध्यान दें: सिर्फ इसलिए कि मॉडल कहता है "उस वाहन को बुलाओ" का मतलब यह नहीं है कि कार्रवाई की जानी चाहिए। विनाशकारी टूल (डिलीट, चेकआउट, ईमेल) पर आपके एप्लिकेशन को कॉल को आँख बंद करके निष्पादित नहीं करना चाहिए - यह अगली इकाई में सुरक्षा विषय का मूल है।

संक्षेप में

  • एजेंट = मॉडल (निर्णय) + उपकरण (कार्य) + लूप (कॉल टूल, परिणाम प्राप्त करें, फिर से निर्णय लें)।
  • एकल पैटर्न कॉल कोई एजेंट नहीं है; एजेंट एक चरण-दर-चरण प्रक्रिया है।
  • मॉडल वाहन नहीं चलाता; आपका एप्लिकेशन चलता है (हार्नेस) और परिणाम को टूल_रिजल्ट के रूप में लौटाता है।
  • टूल की पहचान नाम, विवरण (विशेष रूप से "जब कॉल करें"), और इनपुट_स्कीमा द्वारा की जाती है।
  • लूप टूल_यूज के रूप में जारी रहता है → हार्नेस चलता है → टूल_रिजल्ट → मॉडल तब तक जारी रहता है जब तक मॉडल "पूरा" नहीं कहता; त्रुटियाँ स्पष्ट रूप से मॉडल को सूचित की जाती हैं।

आवेदन कार्य

अपने स्वयं के व्यवसाय से 3 उपकरण डिज़ाइन करें जिन्हें एजेंट को दिया जा सके। (1) "कब कॉल करें" के साथ नाम, विवरण लिखें और प्रत्येक के लिए इनपुट_स्कीमा लिखें; कम से कम एक को गैर-विनाशकारी पठन उपकरण और एक को गणना करने दें। (2) एक यथार्थवादी उपयोगकर्ता प्रश्न चुनें और मैन्युअल रूप से चरण दर चरण (एक लूप में) लिखें कि मॉडल इनमें से किस टूल को किस इनपुट के साथ कॉल करेगा और टूल_रिजल्ट आने के बाद क्या करेगा। (3) एक परिदृश्य स्थापित करें जिसमें एक उपकरण विफल हो जाए और दिखाएं कि त्रुटि संदेश मॉडल पर कैसे वापस आएगा।

चेकलिस्ट

  • [ ] मैं एजेंट को "मॉडल + टूल्स + लूप" के रूप में परिभाषित कर सकता हूं और तय कर सकता हूं कि इसकी आवश्यकता कब होगी।
  • [ ] मुझे पता है कि हार्नेस से वाहन चलता है, मॉडल बस यही चाहता है।
  • मैं [ ] नाम, विवरण ("कब कॉल करें") और इनपुट_स्कीमा के साथ एक ठोस वाहन विवरण लिख सकता हूं।
  • मैं [ ] टूल_यूज → टूल_रिजल्ट चक्र का चरण दर चरण अनुसरण कर सकता हूं।
  • [ ] मैं मॉडल में टूल त्रुटियों की रिपोर्ट ओपन टूल_रिजल्ट के रूप में करता हूं।