AI-চালিত স্মার্ট চুক্তিগুলি AI ব্যবহার করে রিয়েল-টাইম ওয়েব ডেটা অ্যাক্সেস করতে এবং প্রাকৃতিক ভাষার নির্দেশাবলী ব্যাখ্যা করতে, ঐতিহ্যগত স্মার্ট চুক্তিগুলিকে উন্নত করে।
এই টিউটোরিয়ালে, আমরা কভার করব:
দ্রষ্টব্য: পাইথনের কিছু জ্ঞান এই টিউটোরিয়ালে অনুমান করা হয়েছে এবং প্রয়োজন।
স্মার্ট চুক্তিগুলি গেম-চেঞ্জার হয়েছে, সন্দেহ নেই। চুক্তির শর্তাবলী সরাসরি কোডে লিখিত সহ তারা প্রকৃতির দ্বারা স্ব-নির্বাহী। যখন পূর্বনির্ধারিত শর্ত পূরণ করা হয়, তারা একটি ব্লকচেইনে স্থাপন করে এবং নিশ্চিত করে যে লেনদেনগুলি নিরাপদে প্রক্রিয়া করা হয়েছে, তৃতীয় পক্ষের প্রয়োজন ছাড়াই স্বচ্ছভাবে।
যাইহোক, স্মার্ট চুক্তি শুধুমাত্র নির্দিষ্ট নির্দেশাবলী অনুসরণ করে এবং অপ্রত্যাশিত পরিস্থিতি বা জটিল প্রয়োজনীয়তাগুলিকে তাদের প্রোগ্রামিংয়ে পরিচালনা করতে পারে না। সময়ের সাথে সাথে যা ঘটে তার উপর ভিত্তি করে তারা শিখে না বা মানিয়ে নেয় না। এছাড়াও, তারা স্বাধীনভাবে বাহ্যিক ডেটা অ্যাক্সেস করতে পারে না। স্মার্ট চুক্তিতে বাহ্যিক ডেটা খাওয়ানোর জন্য তাদের ওরাকলের মতো তৃতীয় পক্ষের পরিষেবার প্রয়োজন, যা তাদেরকে বাস্তব-বিশ্বের ঘটনাগুলিতে প্রতিক্রিয়া জানাতে সক্ষম করে।
স্মার্ট কন্ট্রাক্টের এই সীমাবদ্ধতা হল GenLayer ইন্টেলিজেন্ট কন্ট্রাক্ট তৈরি করে সমাধান করার চেষ্টা করছে যা ঐতিহ্যগত স্মার্ট কন্ট্রাক্টের সমস্ত ক্ষমতা বজায় রাখে কিন্তু এছাড়াও:
প্রাকৃতিক ভাষা নির্দেশাবলী বুঝতে এবং প্রক্রিয়া করতে GPT-4 এবং LLaMA এর মত LLM মডেল ব্যবহার করুন।
তৃতীয় পক্ষের সরঞ্জামগুলির প্রয়োজন ছাড়াই ইন্টারনেট থেকে রিয়েল-টাইম ডেটা অ্যাক্সেস এবং ব্যবহার করুন৷
GenLayer বুদ্ধিমান চুক্তির লেনদেন এবং ক্রিয়াকলাপ যাচাই করার জন্য আশাবাদী গণতন্ত্রের ঐক্যমত্য পদ্ধতি ব্যবহার করে। এই ঐক্যমত্য পদ্ধতির একটি মূল অংশ হল সমতা নীতি । সমতা নীতি হল একটি নির্দিষ্ট নিয়ম বা মানদণ্ডের সেট যা আশাবাদী গণতন্ত্রের কাঠামোর মধ্যে নির্ভুলতা এবং সামঞ্জস্যতা নিশ্চিত করার জন্য ব্যবহার করা হয় যখন অ-নিয়ন্ত্রক আউটপুটগুলি, যেমন এলএলএম বা রিয়েল-টাইম ওয়েব ডেটা দ্বারা তৈরি করা হয়। আমরা যখন এগিয়ে যাচ্ছি, আমি সমতা নীতি সম্পর্কে আরও ব্যাখ্যা করব এবং আমরা যখন আমাদের বুদ্ধিমান চুক্তি সম্পাদন করি তখন এটি কীভাবে কাজ করে।
এই ব্লগের জন্য, আমরা কীভাবে একটি ফুটবল ভবিষ্যদ্বাণী বুদ্ধিমান চুক্তি তৈরি করতে যাচ্ছি যা ওয়েব থেকে রিয়েল-টাইম ডেটা আনতে পারে এবং ম্যাচের ফলাফলের পূর্বাভাস দিতে LLM ব্যবহার করে এটি প্রক্রিয়া করতে পারে। আকর্ষণীয় শোনাচ্ছে, তাই না?
আসুন এটির মধ্যে প্রবেশ করি :)।
আমরা আমাদের চুক্তি নির্মাণ শুরু করার আগে, আমাদের পরিবেশ স্থাপন করতে হবে যেখানে আমরা এটি চালাব। GenLayer's Simulator হল একটি ইন্টারেক্টিভ স্যান্ডবক্স যা আমরা আমাদের বুদ্ধিমান চুক্তিগুলি তৈরি এবং পরীক্ষা করতে ব্যবহার করতে পারি। এটা সেট আপ করা যাক.
আপনার টার্মিনালে যান এবং আপনার কম্পিউটারে GenLayer ইনস্টল করতে নিম্নলিখিতটি কপি-পেস্ট করুন:
npm install -g genlayer
একবার ইনস্টল হয়ে গেলে, আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার প্রক্রিয়া শুরু করতে init কমান্ডটি চালান:
genlayer init
আপনি যখন এই কমান্ডটি চালান, তখন এটি 5টি যাচাইকারীর সাথে সেটআপ শুরু করে এবং আপনাকে আপনার পছন্দের LLM প্রদানকারী(গুলি) নির্বাচন করতে অনুরোধ করে।
আপনি তিনটি বিকল্প থেকে চয়ন করতে পারেন:
ওপেনএআই: যাচাইকারী চালানোর জন্য দ্রুততম এবং সবচেয়ে নির্ভরযোগ্য বিকল্প)
ওল্লামা: ফ্রি এবং ওপেন-সোর্স বিকল্প, এটি অন্যান্য বিকল্পের তুলনায় ধীরগতির কাজ করতে পারে
হিউরিস্ট: ওপেন সোর্স এআই মডেলের জন্য ইনফারেন্স প্রদানকারী
আপনি আপনার নির্বাচন করার পরে, এটি GenLayer সিমুলেটর পরিবেশের জন্য প্রয়োজনীয় ডকার কন্টেইনারগুলি স্বয়ংক্রিয়ভাবে ডাউনলোড এবং কনফিগার করে। সেটআপ সম্পূর্ণ হলে, আপনি http://localhost:8080/- এ GenLayer সিমুলেটর অ্যাক্সেস করতে পারেন।
এখন, আমাদের চুক্তি নির্মাণ করা যাক!
সিমুলেটরটিতে কোড লেখার জন্য একটি কোড এডিটর রয়েছে।
ইন্টেলিজেন্ট কন্ট্রাক্টগুলি পাইথনে লেখা হয়, এটি ওয়েব ইন্টারঅ্যাকশন এবং প্রাকৃতিক ভাষা প্রক্রিয়াকরণের জন্য প্রয়োজনীয় ডেটা এবং স্ট্রিং অপারেশন পরিচালনার জন্য আদর্শ করে তোলে।
এই ভবিষ্যদ্বাণী চুক্তির জন্য, আমরা বিবিসি স্পোর্ট ওয়েবসাইট থেকে আমাদের ওয়েব ডেটা পুনরুদ্ধার করব এবং তারপর কোন দল বিজয়ী দল তা নির্ধারণ করতে পুনরুদ্ধার করা ডেটা প্রক্রিয়া করার জন্য আমরা একটি LLM ব্যবহার করব। আসুন এটি করার জন্য ধাপে ধাপে প্রক্রিয়াটি দেখুন
আপনি যদি ওয়াকথ্রুটি এড়িয়ে যেতে চান, GitHub- এ কোডটি পরীক্ষা করুন এবং নীচের "কন্ট্রাক্ট স্থাপন করুন" বিভাগে যান৷
প্রথমত, আমরা লাইব্রেরি এবং মডিউলগুলি আমদানি করব যা আমরা আমাদের বুদ্ধিমান চুক্তির জন্য ব্যবহার করব:
import json from genvm.base.equivalence_principle import EquivalencePrinciple from genvm.base.icontract import IContract
json
: এই মডিউলটি JSON ডেটা পার্সিং এবং পরিচালনার জন্য ব্যবহৃত হয়, যা ডেটা বিনিময়ের জন্য একটি সাধারণ বিন্যাস।EquivalencePrinciple
: এটি নিশ্চিত করে যে ফলাফলগুলি বিভিন্ন যাচাইকারীর মধ্যে সামঞ্জস্যপূর্ণ এবং সঠিক। এটি একাধিক যাচাইকারীদের থেকে ফলাফলের তুলনা করে অ-নির্ধারক আউটপুটগুলির অখণ্ডতা বজায় রাখতে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।IContract
: GenLayer-এ বুদ্ধিমান চুক্তি তৈরি করার জন্য বেস ক্লাস, প্রয়োজনীয় বৈশিষ্ট্য এবং আচরণ প্রদান করে। এটি নিশ্চিত করে যে চুক্তিটি GenLayer (GenVM) পরিবেশের মধ্যে মসৃণভাবে সংহত হয়। এখন, আমাদের এই ক্ষেত্রে আমাদের বুদ্ধিমান চুক্তির শ্রেণীটি সংজ্ঞায়িত করতে হবে এটি পূর্বাভাস বাজার। আমাদের ইন্টেলিজেন্ট কন্ট্রাক্ট কন্ট্রাক্ট ক্লাস IContract
থেকে উত্তরাধিকারসূত্রে প্রাপ্ত। GenLayer ফ্রেমওয়ার্কের মধ্যে চুক্তিটি সঠিকভাবে কার্যকর হয় তা নিশ্চিত করার জন্য IContract
থেকে উত্তরাধিকারী হওয়া প্রয়োজন:
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
: বিবিসি স্পোর্ট ওয়েবসাইটের URL যেখান থেকে খেলার ফলাফল পুনরুদ্ধার করা যেতে পারে।
এই প্যারামিটারগুলি আমাদের চুক্তির প্রাথমিক অবস্থাকে সংজ্ঞায়িত করে, এটিকে গেমের ফলাফলগুলি প্রক্রিয়া করার জন্য প্রস্তুত করে।
এখন, খেলার ফলাফল নির্ধারণের জন্য একটি পদ্ধতি যোগ করা যাক। এই পদ্ধতিটি নিশ্চিত করে যে আমরা শুধুমাত্র গেমের ফলাফল প্রক্রিয়া করি যদি এটি এখনও সমাধান না করা হয়:
async def resolve(self) -> None: if self.has_resolved: return "Already resolved" final_result = {}
এই পদ্ধতিটি প্রথমে পরীক্ষা করে যে ফলাফলটি ইতিমধ্যে self.has_resolved
পরিদর্শন করে নির্ধারণ করা হয়েছে কিনা। এটি অপ্রয়োজনীয় প্রক্রিয়াকরণ প্রতিরোধ করে এবং দক্ষতা নিশ্চিত করে। যদি গেমটি এখনও সমাধান না করা হয়, আমরা ফলাফল সংরক্ষণ করার জন্য final_result
শুরু করি। এই অভিধানটি গেমের চূড়ান্ত যাচাইকৃত ফলাফল ধারণ করবে।
একটি বুদ্ধিমান চুক্তি লেখার সময় সমতা নীতি খুবই গুরুত্বপূর্ণ। আপনি যখন ওয়েব অ্যাক্সেস করেন বা 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 ব্যবহার করে এটি প্রক্রিয়া করতে যাচ্ছি।
এগিয়ে চলুন, সমতা নীতি ব্লকের মধ্যে আমরা বিবিসি স্পোর্ট নিউজ ওয়েবসাইট URL থেকে ওয়েবপৃষ্ঠার বিষয়বস্তু পুনরুদ্ধার করতে যাচ্ছি:
web_data = await eq.get_webpage(self.resolution_url) print(web_data)
একবার ডেটা পুনরুদ্ধার করা হলে, আমরা ফলাফল পরীক্ষা করতে এবং পুনরুদ্ধার করা ওয়েবপৃষ্ঠা থেকে বিজয়ী দল নির্ধারণ করতে LLM-এর সাথে এটি প্রক্রিয়া করতে যাচ্ছি।
পুনরুদ্ধার করা ওয়েবপৃষ্ঠা থেকে তথ্য প্রক্রিয়া করার জন্য, আমরা 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 কে একটি JSON ফর্ম্যাট ব্যবহার করে প্রতিক্রিয়া জানাতে বলি
এই বিস্তারিত প্রম্পট বিভিন্ন পরিস্থিতিতে পরিচালনা করে এবং নিশ্চিত করে যে LLM প্রয়োজনীয় তথ্য নির্ভুলভাবে এবং ধারাবাহিকভাবে বের করে এবং প্রক্রিয়া করে। একবার প্রম্পট তৈরি হয়ে গেলে, আমরা call_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 সিমুলেটরে, আপনার চুক্তি চালাতে প্লে বোতামে ক্লিক করুন।
কনস্ট্রাক্টর প্যারামিটার বিভাগে, গেমের তারিখ এবং আপনি যে দুটি দলের নাম পরীক্ষা করতে চান তা প্রদান করুন। উদাহরণস্বরূপ, আপনি "2024-06-05" তে game_date
সেট করতে পারেন, team1
তে "ব্রাজিল" এবং team2
তে "জ্যামাইকা" সেট করতে পারেন।
গেমের বিবরণ সেট হয়ে গেলে Deploy-এ ক্লিক করুন
নিয়োজিত চুক্তির সাথে ইন্টারঅ্যাক্ট করতে, এক্সিকিউট লেনদেন বিভাগে যান। এখানে, আপনি গেমের ফলাফল প্রক্রিয়া করার জন্য সমাধান পদ্ধতি কল করতে পারেন।
যখন সমাধান পদ্ধতি কার্যকর করা হয়:
এই প্রক্রিয়াটি নেটওয়ার্ক জুড়ে ধারাবাহিকতা এবং নির্ভুলতা নিশ্চিত করে। যদি যাচাইকারীরা জয়ী হিসাবে জ্যামাইকা (টিম 2) এর সাথে "1:3" ফেরত দেয় এবং নেতা জ্যামাইকা (টিম 2) এর সাথে "1:2" ফেরত দেয়, তাহলে যাচাইকারীরা ফলাফল প্রত্যাখ্যান করবে।
চুক্তি মিথস্ক্রিয়া সম্পর্কে বিস্তারিত তথ্য দেখতে লগগুলি দেখুন।
🙌 অভিনন্দন যদি আপনি পুরোটা পড়ে থাকেন!!!
AI-চালিত স্মার্ট চুক্তিগুলির জন্য ভবিষ্যত উজ্জ্বল দেখায়। ফুটবল ভবিষ্যদ্বাণী চুক্তি ছাড়াও, অন্যান্য বুদ্ধিমান চুক্তির ধারণা রয়েছে যা আপনি তৈরি করতে এবং GenLayer সিমুলেটর দিয়ে পরীক্ষা করতে পারেন:
GenLayer ডক্সে আরও উদাহরণ ধারনা আছে কিভাবে উপরের কিছু অর্জন করা যায়।