एआई-संचालित स्मार्ट अनुबंध वास्तविक समय के वेब डेटा तक पहुंचने और प्राकृतिक भाषा निर्देशों की व्याख्या करने के लिए एआई का उपयोग करते हैं, जिससे पारंपरिक स्मार्ट अनुबंधों को बढ़ावा मिलता है।
इस ट्यूटोरियल में हम निम्नलिखित विषयों पर चर्चा करेंगे:
नोट: इस ट्यूटोरियल में पायथन का कुछ ज्ञान अपेक्षित है।
स्मार्ट कॉन्ट्रैक्ट्स गेम-चेंजर रहे हैं, इसमें कोई संदेह नहीं है। वे स्वभाव से स्व-निष्पादित होते हैं, जिनमें समझौते की शर्तें सीधे कोड में लिखी होती हैं। जब पूर्वनिर्धारित शर्तें पूरी हो जाती हैं, तो वे ब्लॉकचेन पर तैनात हो जाते हैं और यह सुनिश्चित करते हैं कि लेनदेन सुरक्षित रूप से, पारदर्शी तरीके से किसी तीसरे पक्ष की आवश्यकता के बिना संसाधित किए जाएं।
हालाँकि, स्मार्ट कॉन्ट्रैक्ट केवल विशिष्ट निर्देशों का पालन करते हैं और अप्रत्याशित स्थितियों या जटिल आवश्यकताओं को संभाल नहीं सकते हैं जो उनके प्रोग्रामिंग में नहीं हैं। वे समय के साथ जो होता है उसके आधार पर सीखते या अनुकूलित नहीं होते हैं। इसके अलावा, वे स्वतंत्र रूप से बाहरी डेटा तक नहीं पहुँच सकते हैं। उन्हें स्मार्ट कॉन्ट्रैक्ट्स को बाहरी डेटा खिलाने के लिए Oracles जैसी थर्ड-पार्टी सेवाओं की आवश्यकता होती है, जिससे वे वास्तविक दुनिया की घटनाओं पर प्रतिक्रिया कर सकें।
स्मार्ट कॉन्ट्रैक्ट की इन्हीं सीमाओं को GenLayer एक बुद्धिमान कॉन्ट्रैक्ट बनाकर हल करने का प्रयास कर रहा है, जो पारंपरिक स्मार्ट कॉन्ट्रैक्ट की सभी क्षमताओं को बरकरार रखता है, लेकिन यह भी कर सकता है:
प्राकृतिक भाषा निर्देशों को समझने और संसाधित करने के लिए GPT-4 और LLaMA जैसे LLM मॉडल का उपयोग करें।
तीसरे पक्ष के उपकरणों की आवश्यकता के बिना इंटरनेट से वास्तविक समय के डेटा तक पहुंच और उसका उपयोग करें।
जेनलेयर इंटेलिजेंट कॉन्ट्रैक्ट्स के लेन-देन और संचालन को मान्य करने के लिए ऑप्टिमिस्टिक डेमोक्रेसी सर्वसम्मति विधि का उपयोग करता है। इस सर्वसम्मति विधि का एक महत्वपूर्ण हिस्सा समतुल्यता सिद्धांत है। समतुल्यता सिद्धांत एक विशिष्ट नियम या मानदंडों का समूह है जिसका उपयोग ऑप्टिमिस्टिक डेमोक्रेसी ढांचे के भीतर गैर-निर्धारक आउटपुट से निपटने के दौरान सटीकता और स्थिरता सुनिश्चित करने के लिए किया जाता है, जैसे कि एलएलएम या वास्तविक समय के वेब डेटा द्वारा उत्पन्न। जैसे-जैसे हम आगे बढ़ेंगे, मैं समतुल्यता सिद्धांत के बारे में और अधिक समझाऊंगा और जब हम अपना बुद्धिमान अनुबंध निष्पादित करते हैं तो यह कैसे काम करता है।
इस ब्लॉग के लिए, हम यह देखने जा रहे हैं कि फुटबॉल भविष्यवाणी करने वाला एक बुद्धिमान अनुबंध कैसे बनाया जाए जो वेब से वास्तविक समय का डेटा प्राप्त कर सके और मैच के परिणामों की भविष्यवाणी करने के लिए LLM का उपयोग करके इसे संसाधित कर सके। दिलचस्प लगता है, है ना?
चलिए सीधे इसकी शुरुआत करते हैं :).
इससे पहले कि हम अपना अनुबंध बनाना शुरू करें, हमें वह वातावरण तैयार करना होगा जहाँ हम इसे चलाएँगे। GenLayer का सिम्युलेटर एक इंटरैक्टिव सैंडबॉक्स है जिसका उपयोग हम अपने इंटेलिजेंट कॉन्ट्रैक्ट बनाने और उनका परीक्षण करने के लिए कर सकते हैं। आइए इसे सेट अप करें।
अपने टर्मिनल पर जाएं और अपने कंप्यूटर पर GenLayer स्थापित करने के लिए निम्नलिखित को कॉपी-पेस्ट करें:
npm install -g genlayer
एक बार इंस्टॉल हो जाने पर, अपने विकास परिवेश को स्थापित करने की प्रक्रिया शुरू करने के लिए init कमांड चलाएँ:
genlayer init
जब आप यह कमांड चलाते हैं, तो यह 5 सत्यापनकर्ताओं के साथ सेटअप को आरंभ करता है और आपको अपने पसंदीदा LLM प्रदाता(ओं) का चयन करने के लिए संकेत देता है।
आपके पास तीन विकल्प हैं:
ओपनएआई: सत्यापनकर्ताओं को चलाने के लिए सबसे तेज़ और सबसे विश्वसनीय विकल्प)
ओलामा: निःशुल्क और ओपन-सोर्स विकल्प, यह अन्य विकल्पों की तुलना में धीमा प्रदर्शन कर सकता है
ह्यूरिस्ट: ओपन सोर्स एआई मॉडल के लिए अनुमान प्रदाता
आपके द्वारा अपना चयन करने के बाद, यह स्वचालित रूप से GenLayer सिम्युलेटर वातावरण के लिए आवश्यक Docker कंटेनरों को डाउनलोड और कॉन्फ़िगर करता है। सेटअप पूरा होने के बाद, आप http://localhost:8080/ पर GenLayer सिम्युलेटर तक पहुँच सकते हैं।
अब, आइये अपना अनुबंध बनाना शुरू करें!
सिम्युलेटर में कोड लिखने के लिए एक कोड संपादक है।
इंटेलिजेंट कॉन्ट्रैक्ट्स पायथन में लिखे गए हैं, जो इसे वेब इंटरैक्शन और प्राकृतिक भाषा प्रसंस्करण के लिए आवश्यक डेटा और स्ट्रिंग ऑपरेशन को संभालने के लिए आदर्श बनाता है।
इस भविष्यवाणी अनुबंध के लिए, हम बीबीसी स्पोर्ट वेबसाइट से अपना वेब डेटा प्राप्त करेंगे और फिर हम प्राप्त डेटा को प्रोसेस करने के लिए एलएलएम का उपयोग करेंगे ताकि यह निर्धारित किया जा सके कि कौन सी टीम विजेता टीम है। आइए इसे करने की चरण-दर-चरण प्रक्रिया देखें
यदि आप वॉकथ्रू को छोड़ना चाहते हैं, तो GitHub पर कोड की जांच करें और नीचे "अनुबंध तैनात करें" अनुभाग पर जाएं।
सबसे पहले, हम उन लाइब्रेरीज़ और मॉड्यूल्स को आयात करेंगे जिनका उपयोग हम अपने इंटेलिजेंट कॉन्ट्रैक्ट के लिए करेंगे:
import json from genvm.base.equivalence_principle import EquivalencePrinciple from genvm.base.icontract import IContract
json
: इस मॉड्यूल का उपयोग JSON डेटा को पार्स करने और संभालने के लिए किया जाता है, जो डेटा इंटरचेंज के लिए एक सामान्य प्रारूप है।EquivalencePrinciple
: यह सुनिश्चित करता है कि विभिन्न सत्यापनकर्ताओं के बीच परिणाम सुसंगत और सटीक हों। यह कई सत्यापनकर्ताओं से परिणामों की तुलना करके गैर-निर्धारक आउटपुट की अखंडता को बनाए रखने में महत्वपूर्ण भूमिका निभाता है।IContract
: GenLayer पर इंटेलिजेंट कॉन्ट्रैक्ट बनाने के लिए बेस क्लास, जो आवश्यक गुण और व्यवहार प्रदान करता है। यह सुनिश्चित करता है कि कॉन्ट्रैक्ट GenLayer (GenVM) वातावरण में आसानी से एकीकृत हो। अब, हमें अपने इंटेलिजेंट कॉन्ट्रैक्ट क्लास को परिभाषित करने की आवश्यकता है, इस मामले में यह प्रिडिक्शन मार्केट है। हमारा इंटेलिजेंट कॉन्ट्रैक्ट कॉन्ट्रैक्ट क्लास IContract
से इनहेरिट करता है। IContract
से इनहेरिट करना यह सुनिश्चित करने के लिए आवश्यक है कि कॉन्ट्रैक्ट GenLayer फ्रेमवर्क के भीतर ठीक से निष्पादित हो:
class PredictionMarket(IContract):
इसके बाद, हम अनुबंध की स्थिति को आरंभीकृत करेंगे और कोई भी आवश्यक पैरामीटर सेट करेंगे। यह चरण महत्वपूर्ण है क्योंकि यह उन प्रारंभिक स्थितियों और गुणों को परिभाषित करता है जिनका उपयोग हमारा अनुबंध अपने निष्पादन के दौरान करेगा:
class PredictionMarket(IContract): def __init__(self, game_date: str, team1: str, team2: str): self.has_resolved = False self.game_date = game_date self.resolution_url = 'https://www.bbc.com/sport/football/scores-fixtures/' + game_date self.team1 = team1 self.team2 = team2
इस कंस्ट्रक्टर में, हम निम्नलिखित पैरामीटर परिभाषित करते हैं:
game_date
: खेल की तिथि 'YYYY-MM-DD' के रूप में स्वरूपित.team1
: मैच में भाग लेने वाली पहली टीम का नाम।team2
: मैच में भाग लेने वाली दूसरी टीम का नाम।has_resolved
: यह इंगित करता है कि क्या खेल का परिणाम पहले ही हल हो चुका है, जिससे अनावश्यक प्रसंस्करण को रोका जा सके।resolution_url
: बीबीसी स्पोर्ट वेबसाइट का यूआरएल जहां से खेल के परिणाम प्राप्त किए जा सकते हैं।
ये पैरामीटर हमारे अनुबंध की प्रारंभिक स्थिति को परिभाषित करते हैं, जिससे यह खेल के परिणामों को संसाधित करने के लिए तैयार हो जाता है।
अब, आइए खेल के परिणाम को निर्धारित करने के लिए एक विधि जोड़ें। यह विधि सुनिश्चित करती है कि हम खेल के परिणाम को तभी संसाधित करें जब उसका समाधान अभी तक न हुआ हो:
async def resolve(self) -> None: if self.has_resolved: return "Already resolved" final_result = {}
यह विधि पहले यह जाँचती है कि क्या परिणाम पहले से ही self.has_resolved
निरीक्षण करके निर्धारित किया गया है। यह अनावश्यक प्रसंस्करण को रोकता है और दक्षता सुनिश्चित करता है। यदि खेल अभी तक हल नहीं हुआ है, तो हम परिणामों को संग्रहीत करने के लिए final_result
आरंभ करते हैं। यह शब्दकोश खेल के अंतिम मान्य परिणामों को रखेगा।
इंटेलिजेंट कॉन्ट्रैक्ट लिखते समय समतुल्यता सिद्धांत बहुत महत्वपूर्ण है। जब आप वेब एक्सेस करते हैं या LLM को कॉल करते हैं, तो असंगतताएँ उत्पन्न हो सकती हैं। जैसा कि हमने पहले कहा था, समतुल्यता सिद्धांत एक विशिष्ट नियम या मानदंडों का समूह है जिसका उपयोग गैर-निर्धारक संचालन (वेब या LLM कॉल) के अंतिम आउटपुट को मान्य करने के लिए किया जाता है। यह सिद्धांत कई सत्यापनकर्ताओं का उपयोग करता है, जिसमें से एक परिणाम का प्रस्ताव करने के लिए नेता के रूप में कार्य करता है, और अन्य परिभाषित मानदंडों या नियम के आधार पर इस परिणाम को मान्य करते हैं।
इसलिए, हमारे अनुबंध में, हमें वेब से हमारे आउटपुट में या LLM के साथ प्रक्रियाओं में असंगतियों को रोकने के लिए हमारे तुल्यता सिद्धांत को परिभाषित करने की आवश्यकता है:
async with EquivalencePrinciple( result=final_result, principle="The score and the winner have to be exactly the same", comparative=True, ) as eq:
हमारे पूर्वानुमान अनुबंध के लिए, समतुल्यता सिद्धांत बताता है कि "स्कोर और विजेता बिल्कुल समान होने चाहिए।" सत्यापनकर्ता अपने परिणामों की तुलना लीडर के परिणाम से करने के लिए इस सिद्धांत का उपयोग करेंगे। यदि परिणाम समतुल्यता सिद्धांत के अनुसार मेल खाते हैं, तो अंतिम परिणाम स्वीकार किया जाता है। comparative=True
ध्वज इंगित करता है कि लीडर और सत्यापनकर्ता दोनों समान कार्य करते हैं और स्थिरता सुनिश्चित करने के लिए अपने परिणामों की तुलना करते हैं।
इस समतुल्यता सिद्धांत के अंतर्गत, हम खेल के बारे में वेब डेटा प्राप्त करेंगे और LLM का उपयोग करके उसे संसाधित करेंगे।
आगे बढ़ते हुए, समतुल्यता सिद्धांत ब्लॉक के अंतर्गत हम बीबीसी स्पोर्ट समाचार वेबसाइट यूआरएल से वेबपेज सामग्री प्राप्त करने जा रहे हैं:
web_data = await eq.get_webpage(self.resolution_url) print(web_data)
एक बार डेटा प्राप्त हो जाने के बाद, हम परिणाम की जांच करने और प्राप्त वेबपेज से विजेता टीम का निर्धारण करने के लिए एलएलएम के साथ इसका प्रसंस्करण करेंगे।
प्राप्त वेबपेज से जानकारी को संसाधित करने के लिए, हम LLM को भेजने के लिए संकेत तैयार करने जा रहे हैं, जो उसे बताएगा कि उसे क्या करना है। LLM के साथ बातचीत करते समय, ऐसे संकेत बनाना महत्वपूर्ण है जो सटीक और प्रासंगिक प्रतिक्रियाएँ प्रदान करने में मॉडल का मार्गदर्शन करने के लिए स्पष्ट और विशिष्ट हों। यह वह संकेत है जिसे हमने नीचे तैयार किया है:
task = f"""In the following web page, find the winning team in a matchup between the following teams: Team 1: {self.team1} Team 2: {self.team2} Web page content: {web_data} End of web page data. If it says "Kick off [time]" between the names of the two teams, it means the game hasn't started yet. If you fail to extract the score, assume the game is not resolved yet. Respond with the following JSON format: {{ "score": str, // The score with numbers only, eg, "1:2", or "-" if the game is not resolved yet "winner": int, // The number of the winning team, 0 for draw, or -1 if the game is not yet finished }} """ result = await eq.call_llm(task) print(result)
हमने जो प्रॉम्प्ट तैयार किया है वह LLM को निर्देश देता है:
विजेता टीम की पहचान करें और प्राप्त वेब पेज से स्कोर करें
हमने एलएलएम के लिए यह जाँच करने की शर्त भी शामिल की है कि क्या खेल अभी शुरू नहीं हुआ है। यदि वाक्यांश "किक ऑफ [समय]" दो टीमों के नामों के बीच दिखाई देता है, तो यह इंगित करता है कि खेल शुरू नहीं हुआ है। एलएलएम को इस परिदृश्य को पहचानने और यह समझने का निर्देश दिया जाता है कि अभी तक कोई परिणाम नहीं निकाला जा सकता है।
हमने LLM के लिए एक और शर्त भी शामिल की है, ताकि अगर वह स्कोर नहीं निकाल पाता है, तो यह मान लिया जाए कि खेल हल नहीं हुआ है। इससे यह सुनिश्चित होता है कि अधूरे या चल रहे खेलों को उचित तरीके से संभाला जाता है।
अंत में, हम LLM से JSON प्रारूप का उपयोग करके जवाब देने के लिए कहते हैं
यह विस्तृत प्रॉम्प्ट विभिन्न परिदृश्यों को संभालता है और यह सुनिश्चित करता है कि LLM आवश्यक जानकारी को सटीक और सुसंगत रूप से निकालता और संसाधित करता है। प्रॉम्प्ट तैयार हो जाने के बाद, हम इसे call_llm
विधि का उपयोग करके LLM को भेजते हैं।
एक बार जब हमारा परिणाम एलएलएम से प्राप्त हो जाता है, तो इसे ऊपर परिभाषित समतुल्यता सिद्धांत के अनुसार जांचा और मान्य किया जाएगा: "स्कोर और विजेता बिल्कुल समान होना चाहिए।" यदि परिणाम समतुल्यता सिद्धांत के अनुसार मेल खाते हैं, तो अंतिम परिणाम स्वीकार किया जाता है।
eq.set(result)
नोट: सत्यापनकर्ता समतुल्यता सिद्धांत ब्लॉक में प्रत्येक चरण को सत्यापित नहीं करते हैं और केवल अंतिम परिणाम पर ध्यान केंद्रित करते हैं ताकि जटिल सत्यापन की आवश्यकता कम हो, संसाधनों की बचत हो और अनुबंध के संचालन को सरल बनाया जा सके
एक बार जब परिणाम मान्य और अंतिम रूप से तैयार हो जाता है, तो हम अब json.loads()
का उपयोग करके परिणाम को पार्स कर सकते हैं। यह परिणाम को ऐसे प्रारूप में परिवर्तित करता है जिसे आसानी से हेरफेर और मूल्यांकन किया जा सकता है। हमारे पार्स किए गए परिणाम से, हम विजेता और स्कोर निकालेंगे:
result_json = json.loads(final_result['output']) if result_json['winner'] > -1: self.has_resolved = True self.winner = result_json['winner'] self.score = result_json['score'] return result_json
यदि खेल का परिणाम निर्धारित हो जाता है (विजेता > -1), तो अनुबंध की स्थिति तदनुसार अपडेट की जाती है। यह सुनिश्चित करता है कि अंतिम परिणाम सटीक रूप से दर्ज किया गया है।
अब हम अपना अनुबंध लागू करने के लिए तैयार हैं!
आइये देखें हमारा अनुबंध क्रियान्वित होता है!
GenLayer सिम्युलेटर में, अपना अनुबंध चलाने के लिए प्ले बटन पर क्लिक करें।
कंस्ट्रक्टर पैरामीटर सेक्शन में, गेम की तारीख और उन दो टीमों के नाम बताएं जिन्हें आप जांचना चाहते हैं। उदाहरण के लिए, आप game_date
को "2024-06-05", team1
को "ब्राजील" और team2
को "जमैका" पर सेट कर सकते हैं।
एक बार गेम विवरण सेट हो जाने पर, Deploy पर क्लिक करें
तैनात अनुबंध के साथ बातचीत करने के लिए, लेनदेन निष्पादित करें अनुभाग पर जाएँ। यहाँ, आप गेम के परिणाम को संसाधित करने के लिए रिज़ॉल्व विधि को कॉल कर सकते हैं।
जब समाधान विधि निष्पादित की जाती है:
यह प्रक्रिया पूरे नेटवर्क में एकरूपता और सटीकता सुनिश्चित करती है। यदि सत्यापनकर्ता जमैका (टीम 2) को विजेता के रूप में "1:3" लौटाते हैं और नेता जमैका (टीम 2) को "1:2" लौटाता है, तो सत्यापनकर्ता परिणाम को अस्वीकार कर देंगे।
अनुबंध अंतःक्रिया के बारे में विस्तृत जानकारी देखने के लिए लॉग देखें.
🙌 अगर आपने पूरा पढ़ लिया तो बधाई हो!!!
AI-संचालित स्मार्ट अनुबंधों का भविष्य उज्ज्वल दिखता है। फुटबॉल भविष्यवाणी अनुबंध के अलावा, ऐसे अन्य बुद्धिमान अनुबंध विचार हैं जिन्हें आप GenLayer सिम्युलेटर के साथ बना और परख सकते हैं:
GenLayer दस्तावेज़ों में उपरोक्त में से कुछ को प्राप्त करने के तरीके के बारे में और भी उदाहरण विचार हैं।