paint-brush
আমি কি আমাকে ভেগাসে বড় জয় করতে সাহায্য করার জন্য একটি জেনারেটিভ এআই ডেমো তৈরি করতে পারি?দ্বারা@raymondcamden
603 পড়া
603 পড়া

আমি কি আমাকে ভেগাসে বড় জয় করতে সাহায্য করার জন্য একটি জেনারেটিভ এআই ডেমো তৈরি করতে পারি?

দ্বারা Raymond Camden6m2023/11/21
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

একটি ব্যর্থ এআই-সহায়তা ডেমো যা জেনারেটিভ এআই-এর সমন্বয়ে তাস গেমে কৌশলগত পরামর্শের জন্য প্রম্পট করে।
featured image - আমি কি আমাকে ভেগাসে বড় জয় করতে সাহায্য করার জন্য একটি জেনারেটিভ এআই ডেমো তৈরি করতে পারি?
Raymond Camden HackerNoon profile picture
0-item


না. আপনাকে ধন্যবাদ এবং বিদায়.


ঠিক আছে, প্রথমে, আমি ক্লিক-বেট স্টাইল শিরোনামের জন্য ক্ষমাপ্রার্থী। প্রতিবার এবং তারপরে, যখন আমি একটি ডেমোর জন্য একটি ধারণা পাই, এটি কাজ করে না। কিন্তু কখনও কখনও , এটি একটি মজার এবং আকর্ষণীয় উপায়ে কাজ করে না, এবং আমি মনে করি যে যাইহোক এটি ভাগ করা একটি ভাল ধারণা৷ (এছাড়াও, আমি কিছু ভুল করেছি কারণ এটি কার্যকর না হওয়ার প্রবল সম্ভাবনা রয়েছে!) আজকের ডেমো তার একটি নিখুঁত উদাহরণ, আমি মনে করি।


এই বছরের শুরুর দিকে, আমি Alpine.js ব্যবহার করে একটি Blackjack গেম তৈরি করেছি এবং বেশ চমৎকার Deck of Cards API । গতকাল, আমি গেমটি সম্পর্কে চিন্তা করছিলাম, এবং আমি ভাবছিলাম - যদি আমি জেনারেটিভ এআই ব্যবহার করে এটি খেলার সময় সাহায্য চাইতে পারি তাহলে কী হবে? সুতরাং, উদাহরণস্বরূপ, আমি আমার খেলায় গিয়েছিলাম এবং এটি দেখেছি:


ডিলারের সাথে ব্ল্যাকজ্যাক গেমটি 6টি দেখাচ্ছে এবং আমার কাছে 2টি জ্যাক রয়েছে


Google এর PaLM Makersuite অ্যাপে, আমি লিখেছি:


আমি ব্ল্যাকজ্যাক খেলছি এবং ডিলারের কাছে একটি ছয়টি হীরা দেখাচ্ছে। আমি ক্লাবের জ্যাক এবং হৃদয়ের জ্যাক পেয়েছি। আমার আঘাত করা উচিত নাকি আমি থাকতে হবে?


এবং এই প্রতিক্রিয়া পেয়েছি:


আপনি 20 আছে, যা একটি ভাল হাত. ডিলার আছে 16, যা গড়ের নিচে। যদি আপনি আঘাত করেন, তাহলে আপনি একটি কার্ড পাওয়ার ঝুঁকি নেবেন যা আপনাকে ধ্বংস করবে। তাই এটা থাকা ভাল এবং আশা করি যে ডিলার busts.


যা, ঠিক আছে, বেশ সুস্পষ্ট. আপনি কখনই দুটি জ্যাক দিয়ে আঘাত করবেন না। কিন্তু আমি বর্ণনামূলক প্রতিক্রিয়া পছন্দ করেছি যা গেমের নীতিগুলিকে শক্তিশালী করে। আমি ভেবেছিলাম - যদি আমি গেমটিতে একটি বোতাম যোগ করি যা আপনাকে সাহায্যের জন্য GenAI জিজ্ঞাসা করতে দেয়? আমি এটি কিভাবে করেছি তা এখানে:


সামনে শেষ

সামনের প্রান্তে, আমি UI পরিবর্তনগুলি খুব কম রেখেছি। আমি একটি সাধারণ বোতাম যোগ করে শুরু করেছি:


'সাহায্যের জন্য জিজ্ঞাসা করুন!' সহ গেম UI বোতাম যোগ করা হয়েছে।


এটিতে ক্লিক করলে দুটি গুরুত্বপূর্ণ কাজ করতে হবে। প্রথমত, এটিকে একটি প্রম্পটে গেম স্টেটকে 'অনুবাদ' করতে হবে; তারপর, এটিকে এমন একটি পরিষেবাতে পাঠাতে হবে যা জেন এআই কল পরিচালনা করবে। আমি একটি নতুন ফাংশন তৈরি করেছি, askForHelp , যা এটি পরিচালনা করে:


 async askForHelp() { this.aiHelp = '<i>Asking our AI friend...</i>'; // first, "translate" the cards to English let q = `I'm playing blackjack and the dealer currently has ${this.pcCards[1].value} of ${this.pcCards[1].suit.toLowerCase()}. I've got a ${this.playerCards[0].value} of ${this.playerCards[0].suit.toLowerCase()} and a ${this.playerCards[1].value} of ${this.playerCards[1].suit.toLowerCase()}. Should I hit or should I stay?`; console.log(q); let resp = await fetch(`https://eo8dkukowewth66.m.pipedream.net?text=${encodeURIComponent(q)}`); let help = await resp.json(); /* note that help has line breaks and stuff in and in theory we should map to br or something, but im fine ignoring. */ this.aiHelp = ''; alert(help); },


আমি প্লেয়ার এবং পিসি কার্ড দুটি ভেরিয়েবলে সঞ্চয় করি যাতে তাদের হাতের প্রতিনিধিত্বকারী কার্ডের অ্যারে থাকে। প্রতিটি কার্ডের একটি 'মান' থাকে যা হয় একটি সংখ্যা বা একটি নাম, যেমন জ্যাক। প্রতিটি কার্ডে একটি স্যুটও রয়েছে। তাত্ত্বিকভাবে, এটি সম্ভবত সমালোচনামূলক তথ্য নয়, তবে আমি ভেবেছিলাম এটি আঘাত করতে পারে না। এখানে একটি গেম দ্বারা উত্পন্ন একটি উদাহরণ প্রম্পট:


 I'm playing blackjack and the dealer currently has 8 of clubs. I've got a 7 of spades and a QUEEN of hearts. Should I hit or should I stay?


এটি আমার ব্যাকএন্ড পরিষেবাতে দেওয়া হয় (এক সেকেন্ডে এটির উপর আরও), এবং ফলাফলটি জাভাস্ক্রিপ্ট সতর্কতায় প্রদর্শিত হয়, যা 100% ভয়ঙ্কর ইউএক্স, কিন্তু এটি একটি পরীক্ষা ছিল, আমি মনে করেছি এটি যথেষ্ট ভাল ছিল।


আপনি যদি কৌতূহলী হন তবে এই প্রতিক্রিয়াটি ছিল:


থাকা. আপনার মোট 17টি আছে, যা একটি ভাল হাত। ডিলারের 8 একটি উচ্চ কার্ড নয়, তাই আপনি থাকলে আপনার হারানোর সম্ভাবনা নেই।

ব্যাক এন্ড

আমার পিছনের প্রান্তের জন্য, আমি একটি দ্রুত Pipedream ওয়ার্কফ্লো আপ চাবুক আপ. আমার ওয়ার্কফ্লো আক্ষরিকভাবে মাত্র তিনটি ধাপ নিয়ে গঠিত।


প্রথমটি হল আমার ট্রিগার, একটি HTTP এন্ডপয়েন্ট। আপনি উপরের ফ্রন্ট-এন্ড কোডে URL দেখতে পারেন।


দ্বিতীয় ধাপ হল অন্তর্নির্মিত Google PaLM API অ্যাকশন। প্রম্পটের জন্য কী ব্যবহার করতে হবে তা আমাকে বলতে হয়েছিল: {{steps.trigger.event.query.text}}


আমার চূড়ান্ত পদক্ষেপটি কেবল ফলাফল ফিরিয়ে দিয়েছে:


 export default defineComponent({ async run({ steps, $ }) { await $.respond({ status: 200, headers: { "Content-Type":"application/json" }, body: JSON.stringify(steps.generate_text.$return_value[0].candidates[0].output), }) }, })

জয়ের সময়, তাই না?

তাই হ্যা. আমার প্রথম কয়েকটি পরীক্ষা দুর্দান্ত কাজ করেছে, এবং তারপর... জিনিসগুলি রেলের বাইরে চলে গেছে। এখানে একটি উদাহরণ. ডিলার একটি সাত হৃদয় ছিল. আমার কাছে কোদালের রানী এবং আটটি হীরা ছিল। যখন আমি সাহায্য চেয়েছিলাম, আমি পেয়েছি:


ডিলারের আপকার্ড হল 7, যা একটি "কঠিন" 17৷ এর মানে হল যে আপনি যাই করেন না কেন ডিলারকে অবশ্যই দাঁড়াতে হবে৷ আপনার একটি "নরম" 19 আছে, যার অর্থ হল আপনার কাছে একটি টেক্কা আছে যা 1 বা 11 হিসাবে গণনা করতে পারে৷ আপনার থাকা উচিত৷


ঠিক আছে, অবশ্যই, আমি থাকতে হবে , কিন্তু প্রকৃত ফ্র্যাক কি? আমি 19 আছে? ডিলার 17 আছে? এবং এটা ভাল পায়. একবার যখন আমার 18টি দেখানো হয়েছিল, আমি নিম্নলিখিতগুলি পেয়েছি:


আমি আঘাত করার সুপারিশ করব। মোট 18 এর সাথে, আপনি 21 থেকে মাত্র এক পয়েন্ট দূরে আছেন, যা ব্ল্যাকজ্যাকে বিজয়ী হাত। ডিলারের সাতটি হৃদয় তাদের মোট 17 দেয়, যা 21 থ্রেশহোল্ডের নীচে। অতএব, একটি ভাল সুযোগ আছে যে ডিলার যদি আঘাত করে, তাহলে তারা বাস্ট করবে, যা আপনাকে জয় দেবে। যাইহোক, আপনি থাকলে, আপনি আপনার হাতের উন্নতি করতে পারবেন না এবং আশা করতে হবে যে ডিলার বক্ষ.


18-এ আঘাত করা। আমি কোন পেশাদার জুয়াড়ি নই, কিন্তু আমি নিশ্চিত যে এটি খারাপ পরামর্শ।


এটি আমাকে আমার প্রম্পট সম্পর্কে একটু বেশি ভাবতে বাধ্য করেছে। আমি কিছু টুইক করেছি, যেমন স্যুট ছোট করা, কারণ আমি চিন্তিত ছিলাম যে এটি এআইকে বিভ্রান্ত করেছে। আমি মেকারসুইটের কিছু বিকল্পের মাধ্যমে পুনরাবৃত্তি করেছি এবং ধারাবাহিকভাবে, এটি মাঝে মাঝে মৌলিক গণিতের সাথে লড়াই করে বলে মনে হচ্ছে। এমনকি যখন আমি স্পষ্ট ছিলাম:


আমি একটি জ্যাক অফ ক্লাব (দশটি মূল্যের) এবং একটি আটটি হৃদয় (8 মূল্যের) পেয়েছি।


এটা এখনও ভেবেছিল যে আমার 19 বছর আছে। এতে আমার ভাগ্য ভালো ছিল:


আমি একটি জ্যাক অফ ক্লাব (দশটি মূল্যের) এবং একটি আটটি হৃদয় (8 মূল্যের) পেয়েছি। আমার হাত মোট 18.


এবং আমি এটিও চেষ্টা করেছি:


আমি ক্লাবের টেক্কা এবং আটটি হৃদয় পেয়েছি। আমার হাত মোট 9 বা 19।


এবং যে ধারাবাহিকভাবে সঠিকভাবে কাজ বলে মনে হচ্ছে. তাই, সেই কথা মাথায় রেখে, আমি আমার প্রম্পট জেনারেশনে ফিরে গিয়েছিলাম এবং সেখানে আমার যুক্তি আপডেট করেছি। এখানে আপডেট সংস্করণ:


 async askForHelp() { this.aiHelp = '<i>Asking our AI friend...</i>'; let totalOb = this.getCount(this.playerCards); let totalStr = 'My hand has a total of '; if(totalOb.lowCount === totalOb.highCount) { totalStr += totalOb.lowCount; } else { totalStr += `${totalOb.lowCount} or ${totalOb.highCount}`; } // first, "translate" the cards to English let q = `I'm playing blackjack and the dealer currently has ${this.pcCards[1].value} of ${this.pcCards[1].suit.toLowerCase()}. I've got a ${this.playerCards[0].value} of ${this.playerCards[0].suit.toLowerCase()} and a ${this.playerCards[1].value} of ${this.playerCards[1].suit.toLowerCase()}. ${totalStr}. Should I hit or should I stay?`; console.log(q); let resp = await fetch(`https://eo8dkukowewth66.m.pipedream.net?text=${encodeURIComponent(q)}`); let help = await resp.json(); console.log('RESP', help); /* note that help has line breaks and stuff in and in theory we should map to br or something, but im fine ignoring. */ this.aiHelp = ''; alert(help); },


আমার ব্ল্যাকজ্যাক গেমের একটি ইউটিলিটি ফাংশন আছে, getCount , যেটি একটি অবজেক্ট রিটার্ন করে যার মধ্যে দুটি মান রয়েছে lowCount , যেখানে Aces কে এক হিসাবে গণ্য করা হয় এবং highCount , যেখানে একটি Ace সর্বাধিক এগারো হিসাবে বিবেচিত হয়। এর সাথে, আমি মোট সম্পর্কে আমার প্রম্পট তথ্য যোগ করি।


এটি বেশ কিছুটা সাহায্য করেছিল , কিন্তু আমি এখনও মাঝে মাঝে বিভ্রান্তিকর প্রতিক্রিয়া ফিরিয়ে দিয়েছি।


তাই... হয়তো জুয়ার টেবিলে আপনার মাতাল বন্ধুকে পরামর্শ দিচ্ছেন?


আমি ডেমোর এই সংস্করণটি সর্বজনীনভাবে ভাগ করতে চাই, এবং আমি অবশ্যই কোডটি ভাগ করতে পারি, তবে আমি পাইপড্রিম ওয়ার্কফ্লো অক্ষম করছি যাতে আমি এর জন্য চার্জ না করি। ফ্রন্ট-এন্ড কোডটি এখানে নির্দ্বিধায় দেখুন:


https://codepen.io/cfjedimaster/pen/QWYpQjY/905e31ed6d9e3539c041044b308f5f06?editors=1011


সর্বদা হিসাবে, আপনি কি আমাকে কী মনে করেন!


এছাড়াও এখানে প্রকাশিত.