1. ওভারভিউ
একটি খেলনার দোকানে কার্যত বা ব্যক্তিগতভাবে পা রাখার কল্পনা করুন, যেখানে নিখুঁত উপহার খুঁজে পাওয়া অনায়াসে। আপনি যা খুঁজছেন তা বর্ণনা করতে পারেন, একটি খেলনার ছবি আপলোড করতে পারেন, অথবা এমনকি আপনার নিজের সৃষ্টি ডিজাইন করতে পারেন, এবং দোকানটি অবিলম্বে আপনার প্রয়োজনগুলি বুঝতে পারে এবং একটি উপযোগী অভিজ্ঞতা প্রদান করে৷ এটি একটি ভবিষ্যত কল্পনা নয়; এটি একটি বাস্তবতা যা এআই, ক্লাউড প্রযুক্তি এবং ব্যক্তিগতকৃত ই-কমার্সের দৃষ্টিভঙ্গি দ্বারা চালিত।
চ্যালেঞ্জ: আপনার কল্পনার সাথে মেলে এমন নিখুঁত পণ্যটি খুঁজে পাওয়া কঠিন হতে পারে। সাধারণ অনুসন্ধানের পদ, কীওয়ার্ড এবং অস্পষ্ট অনুসন্ধানগুলি প্রায়শই ছোট হয়ে যায়, অবিরাম পৃষ্ঠাগুলি ব্রাউজ করা ক্লান্তিকর হতে পারে এবং আপনি যা কল্পনা করেন এবং যা পাওয়া যায় তার মধ্যে সংযোগ বিচ্ছিন্ন হয়ে যাওয়া হতাশার কারণ হতে পারে।
সমাধান: ডেমো অ্যাপ্লিকেশনটি এই চ্যালেঞ্জ মোকাবেলা করে, AI এর শক্তিকে কাজে লাগিয়ে প্রাসঙ্গিক অনুসন্ধান এবং অনুসন্ধানের প্রেক্ষাপটের সাথে মিলে যাওয়া পণ্যের কাস্টম প্রজন্মের সাথে সত্যিকারের ব্যক্তিগতকৃত এবং নির্বিঘ্ন অভিজ্ঞতা প্রদান করে।
আপনি কি নির্মাণ করবেন
এই ল্যাবের অংশ হিসাবে, আপনি করবেন:
- একটি AlloyDB উদাহরণ তৈরি করুন এবং খেলনা ডেটাসেট লোড করুন
- AlloyDB-তে pgvector এবং জেনারেটিভ AI মডেল এক্সটেনশনগুলি সক্ষম করুন৷
- পণ্যের বিবরণ থেকে এম্বেডিং তৈরি করুন এবং ব্যবহারকারীর অনুসন্ধান পাঠ্যের জন্য রিয়েল টাইম কোসাইন সাদৃশ্য অনুসন্ধান করুন
- প্রাসঙ্গিক খেলনা অনুসন্ধানের জন্য ব্যবহারকারীর দ্বারা আপলোড করা চিত্র বর্ণনা করতে Gemini 2.0 Flash চালু করুন
- ব্যবহারকারীর আগ্রহের উপর ভিত্তি করে কাস্টম একটি খেলনা তৈরি করতে Imagen 3 ব্যবহার করুন
- কাস্টম তৈরি খেলনার দামের বিবরণের জন্য ডেটাবেসের জন্য Gen AI টুলবক্স ব্যবহার করে তৈরি একটি মূল্য পূর্বাভাস টুল ব্যবহার করুন
- সার্ভারবিহীন ক্লাউড রান ফাংশনে সমাধানটি স্থাপন করুন
প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
2. স্থাপত্য
ডেটা ফ্লো: আসুন আমাদের সিস্টেমের মাধ্যমে কীভাবে ডেটা চলে যায় তা ঘনিষ্ঠভাবে দেখে নেওয়া যাক:
- এআই-চালিত RAG (পুনরুদ্ধার অগমেন্টেড জেনারেশন) সহ প্রাসঙ্গিক অনুসন্ধান
এটিকে এভাবে ভাবুন: শুধু "লাল গাড়ি" খোঁজার পরিবর্তে সিস্টেমটি নীচের বিষয়গুলি বোঝে:
"একটি 3 বছর বয়সী ছেলের জন্য উপযুক্ত ছোট গাড়ি।"
ভিত্তি হিসাবে AlloyDB: আমরা AlloyDB ব্যবহার করি, Google ক্লাউডের সম্পূর্ণরূপে পরিচালিত, PostgreSQL-সামঞ্জস্যপূর্ণ ডাটাবেস, বর্ণনা, চিত্র URL এবং অন্যান্য প্রাসঙ্গিক বৈশিষ্ট্য সহ আমাদের খেলনা ডেটা সংরক্ষণ করতে।
শব্দার্থিক অনুসন্ধানের জন্য pgvector: pgvector, একটি PostgreSQL এক্সটেনশন, আমাদের খেলনা বর্ণনা এবং ব্যবহারকারীর অনুসন্ধান অনুসন্ধান উভয়ের ভেক্টর এম্বেডিং সংরক্ষণ করতে দেয়। এটি শব্দার্থিক অনুসন্ধান সক্ষম করে, যার অর্থ সিস্টেমটি কেবলমাত্র সঠিক কীওয়ার্ড নয়, শব্দের পিছনের অর্থ বোঝে।
প্রাসঙ্গিকতার জন্য কোসাইন সাদৃশ্য: আমরা ব্যবহারকারীর অনুসন্ধান ভেক্টর এবং খেলনা বর্ণনা ভেক্টরের মধ্যে শব্দার্থগত সাদৃশ্য পরিমাপ করতে কোসাইন সাদৃশ্য ব্যবহার করি, সবচেয়ে প্রাসঙ্গিক ফলাফলগুলি দেখায়।
গতি এবং নির্ভুলতার জন্য ScaNN সূচক: দ্রুত এবং সঠিক ফলাফল নিশ্চিত করতে, বিশেষ করে আমাদের খেলনা তালিকা বৃদ্ধির সাথে সাথে, আমরা ScaNN (স্কেলযোগ্য নিকটতম প্রতিবেশী) সূচককে একীভূত করি। এটি আমাদের ভেক্টর অনুসন্ধানের কার্যকারিতা এবং প্রত্যাহারকে উল্লেখযোগ্যভাবে উন্নত করে।
- জেমিনি 2.0 ফ্ল্যাশ সহ চিত্র-ভিত্তিক অনুসন্ধান এবং বোঝাপড়া
টেক্সট হিসাবে প্রসঙ্গ টাইপ করার পরিবর্তে, ধরা যাক ব্যবহারকারী একটি পরিচিত খেলনার একটি ছবি আপলোড করতে চায় যা তারা অনুসন্ধান করতে চায়৷ ব্যবহারকারীরা তাদের পছন্দের খেলনার একটি ছবি আপলোড করতে পারেন এবং এর সাথে প্রাসঙ্গিক বৈশিষ্ট্য পেতে পারেন। আমরা Google এর জেমিনি 2.0 ফ্ল্যাশ মডেলটি ব্যবহার করি, যা LangChain4j ব্যবহার করে, ছবি বিশ্লেষণ করতে এবং প্রাসঙ্গিক প্রসঙ্গ, যেমন খেলনার রঙ, উপাদান, ধরন এবং অভিপ্রেত বয়সের গোষ্ঠী বের করতে।
- জেনারেটিভ এআই দিয়ে কাস্টমাইজড আপনার স্বপ্নের খেলনা তৈরি করা: ইমেজেন 3
আসল জাদুটি ঘটে যখন ব্যবহারকারীরা তাদের নিজস্ব খেলনা তৈরি করার সিদ্ধান্ত নেয়। Imagen 3 ব্যবহার করে, আমরা তাদের সহজ পাঠ্য প্রম্পট ব্যবহার করে তাদের স্বপ্নের খেলনা বর্ণনা করার অনুমতি দিই। কল্পনা করুন যে বলতে পারেন: "আমি বেগুনি ডানা এবং একটি বন্ধুত্বপূর্ণ মুখ সহ একটি প্লাশ ড্রাগন চাই" এবং সেই ড্রাগনটি আপনার পর্দায় জীবন্ত হয়ে উঠতে দেখে! ইমেজেন 3 তারপরে কাস্টম-ডিজাইন করা খেলনার একটি চিত্র তৈরি করে, ব্যবহারকারীকে তাদের সৃষ্টির একটি পরিষ্কার ভিজ্যুয়ালাইজেশন দেয়।
- ডাটাবেসের জন্য এজেন্ট এবং জেনারেল এআই টুলবক্স দ্বারা চালিত মূল্য পূর্বাভাস
আমরা একটি মূল্য পূর্বাভাস বৈশিষ্ট্য প্রয়োগ করেছি যা কাস্টম-ডিজাইন করা খেলনা উৎপাদনের খরচ অনুমান করে। এটি একটি এজেন্ট দ্বারা চালিত হয় যার মধ্যে একটি অত্যাধুনিক মূল্য গণনার সরঞ্জাম রয়েছে৷
ডাটাবেসের জন্য Gen AI টুলবক্স: এই এজেন্টটি Google-এর নতুন ওপেন-সোর্স টুল, ডেটাবেসের জন্য Gen AI টুলবক্স ব্যবহার করে আমাদের ডাটাবেসের সাথে নির্বিঘ্নে একত্রিত হয়েছে। এটি এজেন্টকে একটি সঠিক মূল্য অনুমান প্রদানের জন্য উপাদান খরচ, উত্পাদন প্রক্রিয়া এবং অন্যান্য প্রাসঙ্গিক কারণগুলির রিয়েল-টাইম ডেটা অ্যাক্সেস করতে দেয়। এখানে এটি সম্পর্কে আরও পড়ুন.
- জাভা স্প্রিং বুট, জেমিনি কোড অ্যাসিস্ট এবং স্ট্রীমলাইনড ডেভেলপমেন্ট এবং সার্ভারহীন স্থাপনার জন্য ক্লাউড রান
পুরো অ্যাপ্লিকেশনটি জাভা স্প্রিং বুট ব্যবহার করে তৈরি করা হয়েছে, একটি শক্তিশালী এবং মাপযোগ্য কাঠামো। আমরা পুরো উন্নয়ন প্রক্রিয়া জুড়ে জেমিনি কোড অ্যাসিস্ট ব্যবহার করেছি, বিশেষ করে ফ্রন্ট-এন্ড ডেভেলপমেন্টের জন্য, উল্লেখযোগ্যভাবে উন্নয়ন চক্রকে ত্বরান্বিত করে এবং কোডের গুণমান উন্নত করে। আমরা সম্পূর্ণ অ্যাপ্লিকেশন স্থাপনের জন্য ক্লাউড রান এবং ডাটাবেস এবং এজেন্টিক কার্যকারিতাগুলিকে স্বাধীন শেষ পয়েন্ট হিসাবে স্থাপনের জন্য ক্লাউড রান ফাংশন ব্যবহার করেছি।
3. আপনি শুরু করার আগে
একটি প্রকল্প তৈরি করুন
- Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
- নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।
- আপনি ক্লাউড শেল ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা bq এর সাথে প্রিলোড করা হয়। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।
- একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
- যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- আপনার ক্লাউড শেল টার্মিনালে একের পর এক নিম্নলিখিত কমান্ডগুলি চালিয়ে প্রয়োজনীয় API গুলি সক্ষম করুন:
নীচে চালানোর জন্য একটি একক কমান্ডও রয়েছে, কিন্তু আপনি যদি একজন ট্রায়াল অ্যাকাউন্ট ব্যবহারকারী হন, তাহলে এইগুলিকে বাল্কভাবে সক্ষম করার চেষ্টা করার সময় আপনি কোটা সমস্যার সম্মুখীন হতে পারেন। এই কারণেই প্রতি লাইনে একটি করে কমান্ড দেওয়া হয়।
gcloud services enable alloydb.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable servicenetworking.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudfunctions.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud কমান্ডের বিকল্প হল কনসোলের মাধ্যমে প্রতিটি পণ্য অনুসন্ধান করে বা এই লিঙ্কটি ব্যবহার করে।
যদি কোনো API মিস হয়, আপনি সর্বদা বাস্তবায়নের সময় এটি সক্রিয় করতে পারেন।
জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।
4. ডাটাবেস সেটআপ
এই ল্যাবে আমরা AlloyDB কে ডাটাবেস হিসেবে ব্যবহার করব টয়স্টোরের ডেটা রাখার জন্য। এটি ডাটাবেস এবং লগগুলির মতো সমস্ত সংস্থান ধরে রাখতে ক্লাস্টার ব্যবহার করে। প্রতিটি ক্লাস্টারের একটি প্রাথমিক উদাহরণ রয়েছে যা ডেটাতে অ্যাক্সেস পয়েন্ট সরবরাহ করে। টেবিলে প্রকৃত তথ্য থাকবে।
আসুন একটি AlloyDB ক্লাস্টার, উদাহরণ এবং টেবিল তৈরি করি যেখানে ইকমার্স ডেটাসেট লোড করা হবে।
একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন
- ক্লাউড কনসোলে AlloyDB পৃষ্ঠাটি নেভিগেট করুন। ক্লাউড কনসোলে বেশিরভাগ পৃষ্ঠাগুলি খুঁজে পাওয়ার একটি সহজ উপায় হল কনসোলের অনুসন্ধান বার ব্যবহার করে সেগুলি অনুসন্ধান করা৷
- সেই পৃষ্ঠা থেকে ক্লাস্টার তৈরি করুন নির্বাচন করুন:
- আপনি নীচের মত একটি পর্দা দেখতে পাবেন. নিম্নলিখিত মানগুলির সাথে একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন (আপনি রেপো থেকে অ্যাপ্লিকেশন কোড ক্লোন করার ক্ষেত্রে মানগুলি মেলে তা নিশ্চিত করুন):
- ক্লাস্টার আইডি : "
vector-cluster
" - পাসওয়ার্ড : "
alloydb
" - PostgreSQL 15 সামঞ্জস্যপূর্ণ
- অঞ্চল : "
us-central1
" - নেটওয়ার্কিং : "
default
"
- আপনি যখন ডিফল্ট নেটওয়ার্ক নির্বাচন করেন, আপনি নীচের মত একটি স্ক্রীন দেখতে পাবেন।
সংযোগ সেট আপ নির্বাচন করুন।
- সেখান থেকে, " একটি স্বয়ংক্রিয়ভাবে বরাদ্দকৃত IP পরিসর ব্যবহার করুন " নির্বাচন করুন এবং চালিয়ে যান। তথ্য পর্যালোচনা করার পরে, সংযোগ তৈরি করুন নির্বাচন করুন।
- আপনার নেটওয়ার্ক সেট আপ হয়ে গেলে, আপনি আপনার ক্লাস্টার তৈরি করা চালিয়ে যেতে পারেন। নীচে দেখানো হিসাবে ক্লাস্টার সেট আপ সম্পূর্ণ করতে CLUSTER তৈরি করুন ক্লিক করুন:
ইনস্ট্যান্স আইডি পরিবর্তন করতে নিশ্চিত করুন "
vector-instance"
.
মনে রাখবেন ক্লাস্টার তৈরি হতে প্রায় 10 মিনিট সময় লাগবে। একবার এটি সফল হলে, আপনি একটি স্ক্রীন দেখতে পাবেন যা আপনার তৈরি করা ক্লাস্টারটির ওভারভিউ দেখায়।
5. ডেটা ইনজেশন
এখন স্টোর সম্পর্কে ডেটা সহ একটি টেবিল যুক্ত করার সময়। AlloyDB-তে নেভিগেট করুন, প্রাথমিক ক্লাস্টার নির্বাচন করুন এবং তারপর AlloyDB স্টুডিও:
আপনার উদাহরণ তৈরি করা শেষ হওয়ার জন্য আপনাকে অপেক্ষা করতে হতে পারে। এটি হয়ে গেলে, আপনি ক্লাস্টার তৈরি করার সময় আপনার তৈরি শংসাপত্রগুলি ব্যবহার করে AlloyDB-এ সাইন ইন করুন৷ PostgreSQL এ প্রমাণীকরণের জন্য নিম্নলিখিত ডেটা ব্যবহার করুন:
- ব্যবহারকারীর নাম: "
postgres
" - ডাটাবেস : "
postgres
" - পাসওয়ার্ড: "
alloydb
"
একবার আপনি সফলভাবে অ্যালোয়ডিবি স্টুডিওতে প্রমাণীকৃত হয়ে গেলে, এসকিউএল কমান্ড এডিটরে প্রবেশ করানো হয়। আপনি শেষ উইন্ডোর ডানদিকে প্লাস ব্যবহার করে একাধিক সম্পাদক উইন্ডো যোগ করতে পারেন।
আপনি প্রয়োজন অনুসারে রান, ফরম্যাট এবং সাফ বিকল্পগুলি ব্যবহার করে সম্পাদক উইন্ডোতে AlloyDB-এর জন্য কমান্ড লিখবেন।
এক্সটেনশন সক্রিয় করুন
এই অ্যাপটি তৈরি করার জন্য, আমরা pgvector
এবং google_ml_integration
এক্সটেনশনগুলি ব্যবহার করব। pgvector এক্সটেনশন আপনাকে ভেক্টর এম্বেডিং সংরক্ষণ এবং অনুসন্ধান করতে দেয়। google_ml_integration এক্সটেনশন এমন ফাংশন প্রদান করে যা আপনি SQL-এ ভবিষ্যদ্বাণী পেতে Vertex AI পূর্বাভাস শেষ পয়েন্ট অ্যাক্সেস করতে ব্যবহার করেন। নিম্নলিখিত ডিডিএলগুলি চালিয়ে এই এক্সটেনশনগুলিকে সক্ষম করুন :
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
আপনি যদি আপনার ডাটাবেসে সক্ষম করা এক্সটেনশনগুলি পরীক্ষা করতে চান তবে এই SQL কমান্ডটি চালান:
select extname, extversion from pg_extension;
একটি টেবিল তৈরি করুন
নীচের ডিডিএল স্টেটমেন্ট ব্যবহার করে একটি টেবিল তৈরি করুন:
CREATE TABLE toys ( id VARCHAR(25), name VARCHAR(25), description VARCHAR(20000), quantity INT, price FLOAT, image_url VARCHAR(200), text_embeddings vector(768)) ;
উপরের কমান্ডটি সফলভাবে কার্যকর করার পরে, আপনি ডাটাবেসের টেবিলটি দেখতে সক্ষম হবেন।
ডেটা ইনজেস্ট করুন
এই ল্যাবের জন্য, আমাদের কাছে এই SQL ফাইলে প্রায় 72 টি রেকর্ডের টেস্ট ডেটা আছে। এতে id, name, description, quantity, price, image_url
ক্ষেত্র রয়েছে। অন্যান্য ক্ষেত্রগুলি পরে ল্যাবে পূরণ করা হবে।
সেখান থেকে লাইনগুলি/বিবৃতি সন্নিবেশ করুন এবং তারপরে একটি ফাঁকা সম্পাদক ট্যাবে সেই লাইনগুলি পেস্ট করুন এবং RUN নির্বাচন করুন।
টেবিলের বিষয়বস্তু দেখতে, এক্সপ্লোরার বিভাগটি প্রসারিত করুন যতক্ষণ না আপনি পোশাক নামের টেবিলটি দেখতে পাচ্ছেন। সারণীতে প্রশ্ন করার বিকল্পটি দেখতে ত্রিকোণ (⋮) নির্বাচন করুন। একটি SELECT স্টেটমেন্ট একটি নতুন এডিটর ট্যাবে খুলবে।
অনুমতি দিন
ব্যবহারকারী postgres
embedding
ফাংশনে কার্যকর অধিকার প্রদানের জন্য নীচের বিবৃতিটি চালান:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB পরিষেবা অ্যাকাউন্টে Vertex AI ব্যবহারকারীর ভূমিকা মঞ্জুর করুন
ক্লাউড শেল টার্মিনালে যান এবং নিম্নলিখিত কমান্ড দিন:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
6. প্রসঙ্গের জন্য এম্বেডিং তৈরি করুন
কম্পিউটারের জন্য টেক্সট প্রক্রিয়া করার চেয়ে সংখ্যা প্রক্রিয়া করা অনেক সহজ। একটি এমবেডিং সিস্টেম পাঠ্যকে ফ্লোটিং পয়েন্ট সংখ্যার একটি সিরিজে রূপান্তরিত করে যা পাঠ্যকে উপস্থাপন করা উচিত, এটি যেভাবেই লেখা হোক না কেন, এটি কোন ভাষা ব্যবহার করে ইত্যাদি।
একটি সমুদ্রতীরবর্তী অবস্থান বর্ণনা বিবেচনা করুন. একে বলা যেতে পারে "জলের উপর", "সৈকতের সামনে", "আপনার ঘর থেকে সমুদ্রে হাঁটুন", "সুর লা মের", "на берегу океана" ইত্যাদি। এই পদগুলি সব আলাদা দেখতে, কিন্তু তাদের শব্দার্থিক অর্থ বা মেশিন লার্নিং পরিভাষায়, তাদের এম্বেডিংগুলি একে অপরের খুব কাছাকাছি হওয়া উচিত।
এখন যেহেতু ডেটা এবং প্রসঙ্গ প্রস্তুত, আমরা embedding
ক্ষেত্রের টেবিলে পণ্যের বিবরণের এমবেডিং যোগ করতে SQL চালাব। আপনি ব্যবহার করতে পারেন এমবেডিং মডেল বিভিন্ন আছে. আমরা Vertex AI থেকে text-embedding-005
ব্যবহার করছি। পুরো প্রকল্প জুড়ে একই এমবেডিং মডেল ব্যবহার করতে ভুলবেন না!
দ্রষ্টব্য: আপনি যদি কিছুক্ষণ আগে তৈরি করা একটি বিদ্যমান Google ক্লাউড প্রজেক্ট ব্যবহার করেন, তাহলে আপনাকে টেক্সট-এমবেডিং মডেলের পুরানো সংস্করণগুলি যেমন টেক্সটেমবেডিং-গেকো ব্যবহার করা চালিয়ে যেতে হবে।
AlloyDB স্টুডিও ট্যাবে ফিরে যান এবং নিম্নলিখিত DML টাইপ করুন:
UPDATE toys set text_embeddings = embedding( 'text-embedding-005', description);
কিছু এমবেডিং দেখতে আবার toys
টেবিলের দিকে তাকান। পরিবর্তনগুলি দেখতে SELECT স্টেটমেন্টটি পুনরায় চালু করতে ভুলবেন না।
SELECT id, name, description, price, quantity, image_url, text_embeddings FROM toys;
নিচে দেখানো খেলনার বর্ণনার জন্য এটি এম্বেডিং ভেক্টরকে ফিরিয়ে দিতে হবে, যা দেখতে ফ্লোটের অ্যারের মতো দেখাচ্ছে:
দ্রষ্টব্য: বিনামূল্যের স্তরের অধীনে নতুন তৈরি করা Google ক্লাউড প্রকল্পগুলি এম্বেডিং মডেলগুলিতে প্রতি সেকেন্ডে অনুমোদিত এমবেডিং অনুরোধের সংখ্যার ক্ষেত্রে কোটা সমস্যার সম্মুখীন হতে পারে৷ আমরা পরামর্শ দিই যে আপনি আইডির জন্য একটি ফিল্টার ক্যোয়ারী ব্যবহার করুন এবং তারপর এম্বেডিং তৈরি করার সময় বেছে বেছে 1-5টি রেকর্ড এবং আরও অনেক কিছু বেছে নিন।
7. ভেক্টর অনুসন্ধান করুন
এখন যেহেতু টেবিল, ডেটা এবং এম্বেডিং সবই প্রস্তুত, চলুন ব্যবহারকারীর সার্চ টেক্সটের জন্য রিয়েল টাইম ভেক্টর সার্চ করা যাক।
ধরুন ব্যবহারকারী জিজ্ঞাসা করেছেন:
" I want a white plush teddy bear toy with a floral pattern
।"
আপনি নীচের ক্যোয়ারী চালিয়ে এর জন্য মিল খুঁজে পেতে পারেন:
select * from toys
ORDER BY text_embeddings <=> CAST(embedding('text-embedding-005', 'I want a white plush teddy bear toy with a floral pattern') as vector(768))
LIMIT 5;
আসুন এই প্রশ্নটি বিস্তারিতভাবে দেখুন:
এই প্রশ্নে,
- ব্যবহারকারীর অনুসন্ধান পাঠ্য হল: "
I want a white plush teddy bear toy with a floral pattern.
" - আমরা মডেলটি ব্যবহার করে
embedding()
পদ্ধতিতে এম্বেডিং এ রূপান্তর করছি:text-embedding-005
। এই ধাপটি শেষ ধাপের পরে পরিচিত দেখা উচিত, যেখানে আমরা টেবিলের সমস্ত আইটেমে এমবেডিং ফাংশন প্রয়োগ করেছি। - "
<=>
" COSINE SIMILARITY দূরত্ব পদ্ধতির ব্যবহার প্রতিনিধিত্ব করে৷ আপনি pgvector এর ডকুমেন্টেশনে উপলব্ধ সমস্ত সাদৃশ্য পরিমাপ খুঁজে পেতে পারেন। - ডাটাবেসে সংরক্ষিত ভেক্টরের সাথে সামঞ্জস্যপূর্ণ করতে আমরা এম্বেডিং পদ্ধতির ফলাফলকে ভেক্টর টাইপে রূপান্তর করছি।
- LIMIT 5 প্রতিনিধিত্ব করে যে আমরা অনুসন্ধান পাঠ্যের জন্য 5টি নিকটতম প্রতিবেশী বের করতে চাই।
ফলাফল এই মত দেখায়:
আপনি আপনার ফলাফলগুলিতে লক্ষ্য করতে পারেন, মিলগুলি অনুসন্ধান পাঠ্যের বেশ কাছাকাছি। ফলাফল কিভাবে পরিবর্তিত হয় তা দেখতে পাঠ্য পরিবর্তন করার চেষ্টা করুন।
গুরুত্বপূর্ণ নোট:
এখন ধরা যাক আমরা ScaNN সূচক ব্যবহার করে এই ভেক্টর অনুসন্ধান ফলাফলের কর্মক্ষমতা (কোয়েরি সময়), দক্ষতা এবং প্রত্যাহার করতে চাই। অনুগ্রহ করে এই ব্লগের ধাপগুলি পড়ুন যাতে সূচী ছাড়া ফলাফলের পার্থক্য তুলনা করা যায়।
ঐচ্ছিক পদক্ষেপ: দক্ষতা উন্নত করুন এবং ScaNN সূচকের সাথে প্রত্যাহার করুন
সুবিধার জন্য এখানে শুধুমাত্র সূচী তৈরির পদক্ষেপগুলি তালিকাভুক্ত করা হচ্ছে:
- যেহেতু আমাদের ইতিমধ্যেই ক্লাস্টার, উদাহরণ, প্রসঙ্গ এবং এম্বেডিং তৈরি করা আছে, তাই আমাদের কেবল নিম্নলিখিত বিবৃতিটি ব্যবহার করে ScaNN এক্সটেনশন ইনস্টল করতে হবে:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- পরবর্তীতে আমরা সূচক তৈরি করব (ScaNN):
CREATE INDEX toysearch_index ON toys
USING scann (text_embeddings cosine)
WITH (num_leaves=9);
উপরের DDL-এ, apparel_index হল সূচকের নাম
"খেলনা" আমার টেবিল
"স্ক্যান" হল সূচক পদ্ধতি
"এম্বেডিং" হল টেবিলের কলাম যা আমি সূচী করতে চাই
"কোসাইন" হল দূরত্বের পদ্ধতি যা আমি সূচকের সাথে ব্যবহার করতে চাই
"8" হল এই সূচকে প্রয়োগ করার জন্য পার্টিশনের সংখ্যা। 1 থেকে 1048576 এর মধ্যে যেকোনো মান সেট করুন৷ এই মানটি কীভাবে নির্ধারণ করবেন সে সম্পর্কে আরও তথ্যের জন্য, একটি স্ক্যানএন সূচক টিউন করুন দেখুন৷
আমি ScaNN রেপোতে প্রস্তাবিত ডেটা পয়েন্টের সংখ্যার একটি SQUARE ROOT ব্যবহার করেছি (পার্টিশন করার সময়, num_leaves মোটামুটি ডেটাপয়েন্টের সংখ্যার বর্গমূল হওয়া উচিত)।
- ক্যোয়ারী ব্যবহার করে সূচক তৈরি করা হয়েছে কিনা তা পরীক্ষা করুন:
SELECT * FROM pg_stat_ann_indexes;
- আমরা সূচী ছাড়াই ব্যবহার করেছি একই প্রশ্ন ব্যবহার করে ভেক্টর অনুসন্ধান করুন:
select * from toys
ORDER BY text_embeddings <=> CAST(embedding('text-embedding-005', 'I want a white plush teddy bear toy with a floral pattern') as vector(768))
LIMIT 5;
উপরের ক্যোয়ারীটি একই যা আমরা 8 ধাপে ল্যাবে ব্যবহার করেছি। তবে এখন আমাদের ক্ষেত্রটি সূচিত করা হয়েছে।
- সূচী সহ এবং ব্যতীত একটি সাধারণ অনুসন্ধান ক্যোয়ারী দিয়ে পরীক্ষা করুন (সূচি বাদ দিয়ে):
এই ব্যবহারের ক্ষেত্রে শুধুমাত্র 72টি রেকর্ড রয়েছে তাই সূচকটি সত্যিই কার্যকর হয় না। অন্য ব্যবহারের ক্ষেত্রে পরিচালিত একটি পরীক্ষার জন্য, ফলাফলগুলি নিম্নরূপ:
INDEXED এম্বেডিং ডেটাতে একই ভেক্টর অনুসন্ধান ক্যোয়ারী গুণমানের অনুসন্ধান ফলাফল এবং দক্ষতার ফলাফল দেয়। সূচকের সাথে দক্ষতা ব্যাপকভাবে উন্নত হয়েছে (নির্বাহের জন্য সময়ের পরিপ্রেক্ষিতে: ScaNN ছাড়া 10.37ms এবং ScaNN এর সাথে 0.87ms)। এই বিষয়ে আরও তথ্যের জন্য, অনুগ্রহ করে এই ব্লগটি পড়ুন।
8. LLM-এর সাথে বৈধতা মিলান
একটি অ্যাপ্লিকেশনে সেরা মিলগুলি ফেরত দেওয়ার জন্য একটি পরিষেবা তৈরি করার আগে এবং এই সম্ভাব্য প্রতিক্রিয়াগুলি সত্যই প্রাসঙ্গিক এবং ব্যবহারকারীর সাথে ভাগ করে নেওয়ার জন্য নিরাপদ কিনা তা যাচাই করার জন্য একটি জেনারেটিভ এআই মডেল ব্যবহার করা যাক৷
মিথুনের জন্য দৃষ্টান্ত সেট আপ করা হয়েছে তা নিশ্চিত করা
আপনার ক্লাস্টার এবং ইনস্ট্যান্সের জন্য Google ML ইন্টিগ্রেশন ইতিমধ্যেই সক্ষম হয়েছে কিনা তা প্রথমে পরীক্ষা করুন৷ AlloyDB স্টুডিওতে, নিম্নলিখিত কমান্ড দিন:
show google_ml_integration.enable_model_support;
যদি মানটি "চালু" হিসাবে দেখানো হয়, আপনি পরবর্তী 2টি ধাপ এড়িয়ে যেতে পারেন এবং সরাসরি AlloyDB এবং Vertex AI মডেল ইন্টিগ্রেশন সেট আপ করতে যেতে পারেন৷
- আপনার AlloyDB ক্লাস্টারের প্রাথমিক উদাহরণে যান এবং প্রাথমিক উদাহরণ সম্পাদনা করুন ক্লিক করুন
- অ্যাডভান্সড কনফিগারেশন বিকল্পের পতাকা বিভাগে নেভিগেট করুন। এবং নিশ্চিত করুন যে
google_ml_integration.enable_model_support flag
নীচে দেখানো হিসাবে "on
" সেট করা আছে:
যদি এটি "চালু" তে সেট করা না থাকে তবে এটিকে "চালু" এ সেট করুন এবং তারপরে আপডেট INSTANCE বোতামে ক্লিক করুন৷ এই ধাপে কয়েক মিনিট সময় লাগবে।
AlloyDB এবং Vertex AI মডেল ইন্টিগ্রেশন
এখন আপনি AlloyDB স্টুডিওতে সংযোগ করতে পারেন এবং আপনার প্রজেক্ট আইডি ব্যবহার করে যেখানে নির্দেশিত হয়েছে সেখানে AlloyDB থেকে জেমিনি মডেল অ্যাক্সেস সেট আপ করতে নিম্নলিখিত DML স্টেটমেন্ট চালাতে পারেন। কমান্ড চালানোর আগে আপনাকে একটি সিনট্যাক্স ত্রুটি সম্পর্কে সতর্ক করা হতে পারে, তবে এটি সূক্ষ্মভাবে চালানো উচিত।
প্রথমত, আমরা নীচে দেখানো হিসাবে জেমিনি 1.5 মডেল সংযোগ তৈরি করি। নিচের কমান্ডে $PROJECT_ID
আপনার Google ক্লাউড প্রকল্প আইডি দিয়ে প্রতিস্থাপন করতে ভুলবেন না।
CALL
google_ml.create_model( model_id => 'gemini-1.5',
model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'alloydb_service_agent_iam');
আপনি AlloyDB স্টুডিওতে নিম্নলিখিত কমান্ডের মাধ্যমে অ্যাক্সেসের জন্য কনফিগার করা মডেলগুলি পরীক্ষা করতে পারেন:
select model_id,model_type from google_ml.model_info_view;
অবশেষে, Google Vertex AI মডেলের মাধ্যমে পূর্বাভাস চালানোর জন্য আমাদের ডাটাবেস ব্যবহারকারীদের ml_predict_row ফাংশন চালানোর অনুমতি দিতে হবে। নিম্নলিখিত কমান্ড চালান:
GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;
দ্রষ্টব্য: আপনি যদি একটি বিদ্যমান Google ক্লাউড প্রজেক্ট এবং কিছুক্ষণ আগে তৈরি করা AlloyDB-এর একটি বিদ্যমান ক্লাস্টার/ইনস্ট্যান্স ব্যবহার করেন, তাহলে আপনাকে gemini-1.5 মডেলের পুরানো রেফারেন্সগুলি বাদ দিতে হবে এবং উপরের CALL স্টেটমেন্ট দিয়ে আবার তৈরি করতে হবে এবং gemini-15-এর আসন্ন আহ্বানে সমস্যার সম্মুখীন হলে আবার ফাংশন ml_predict_row-এ অনুদান কার্যকর করতে হবে।
প্রতিক্রিয়া মূল্যায়ন
ক্যোয়ারী থেকে উত্তরগুলি যুক্তিসঙ্গত কিনা তা নিশ্চিত করতে আমরা পরবর্তী বিভাগে একটি বড় ক্যোয়ারী ব্যবহার করে শেষ করব, ক্যোয়ারী বোঝা কঠিন হতে পারে। আমরা এখন টুকরোগুলি দেখব এবং দেখব কিভাবে তারা কয়েক মিনিটের মধ্যে একত্রিত হয়।
- প্রথমে আমরা ডাটাবেসে একটি অনুরোধ পাঠাব যাতে ব্যবহারকারীর প্রশ্নের 10টি নিকটতম মিল পাওয়া যায়।
- প্রতিক্রিয়াগুলি কতটা বৈধ তা নির্ধারণ করতে, আমরা একটি বাইরের প্রশ্ন ব্যবহার করব যেখানে আমরা প্রতিক্রিয়াগুলিকে কীভাবে মূল্যায়ন করতে হয় তা ব্যাখ্যা করব৷ এটি কোয়েরির অংশ হিসাবে অভ্যন্তরীণ টেবিলের অনুসন্ধান পাঠ্য এবং
content
(যা খেলনা বর্ণনা ক্ষেত্র)recommended_text
ক্ষেত্রটি ব্যবহার করে। - এটি ব্যবহার করে, আমরা তারপরে ফিরে আসা প্রতিক্রিয়াগুলির "ভালতা" পর্যালোচনা করব৷
-
predict_row
JSON ফর্ম্যাটে তার ফলাফল প্রদান করে। কোড "-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'"
সেই JSON থেকে প্রকৃত পাঠ্য বের করতে ব্যবহৃত হয়। ফিরে আসা প্রকৃত JSON দেখতে, আপনি এই কোডটি সরাতে পারেন। - অবশেষে, LLM প্রতিক্রিয়া পেতে, আমরা
REGEXP_REPLACE(gemini_validation,
'[^a-zA-Z,: ]',
'',
'g')
ব্যবহার করে এটি বের করি
SELECT id,
name,
content,
quantity,
price,
image_url,
recommended_text,
REGEXP_REPLACE(gemini_validation, '[^a-zA-Z,: ]', '', 'g') AS gemini_validation
FROM (SELECT id,
name,
content,
quantity,
price,
image_url,
recommended_text,
CAST(ARRAY_AGG(LLM_RESPONSE) AS TEXT) AS gemini_validation
FROM (SELECT id,
name,
content,
quantity,
price,
image_url,
recommended_text,
json_array_elements(google_ml.predict_row(model_id => 'gemini-1.5',
request_body => CONCAT('{ "contents": [ { "role": "user", "parts": [ { "text": "User wants to buy a toy and this is the description of the toy they wish to buy: ', recommended_text, '. Check if the following product items from the inventory are close enough to really, contextually match the user description. Here are the items: ', content, '. Return a ONE-LINE response with 3 values: 1) MATCH: if the 2 contexts are reasonably matching in terms of any of the color or color family specified in the list, approximate style match with any of the styles mentioned in the user search text: This should be a simple YES or NO. Choose NO only if it is completely irrelevant to users search criteria. 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear one-line easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match. " } ] } ] }')::JSON)) -> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text' :: TEXT AS LLM_RESPONSE
FROM (SELECT id,
name,
description AS content,
quantity,
price,
image_url,
'Pink panther standing' AS recommended_text
FROM toys
ORDER BY text_embeddings <=> embedding('text-embedding-005',
'Pink panther standing')::VECTOR
LIMIT 10) AS xyz) AS X
GROUP BY id,
name,
content,
quantity,
price,
image_url,
recommended_text) AS final_matches
WHERE REGEXP_REPLACE(gemini_validation, '[^a-zA-Z,: ]', '', 'g') LIKE '%MATCH%:%YES%';
যদিও এটি এখনও ভয়ঙ্কর মনে হতে পারে, আশা করি আপনি এটি থেকে আরও কিছুটা বোঝাতে পারবেন। ফলাফলগুলি একটি ম্যাচ আছে কিনা তা বলে, ম্যাচটি কত শতাংশ এবং রেটিং এর কিছু ব্যাখ্যা।
লক্ষ্য করুন যে মিথুন মডেলটি ডিফল্টরূপে স্ট্রিমিং চালু আছে, তাই প্রকৃত প্রতিক্রিয়া একাধিক লাইন জুড়ে ছড়িয়ে রয়েছে:
9. ক্লাউড সার্ভারহীনভাবে খেলনা অনুসন্ধান নিন
এই অ্যাপটিকে ওয়েবে নিয়ে যাওয়ার জন্য প্রস্তুত? ক্লাউড রান ফাংশনগুলির সাথে এই নলেজ ইঞ্জিনকে সার্ভারহীন করতে নীচের পদক্ষেপগুলি অনুসরণ করুন:
- একটি নতুন ক্লাউড রান ফাংশন তৈরি করতে Google ক্লাউড কনসোলে ক্লাউড রান ফাংশনে যান বা লিঙ্কটি ব্যবহার করুন: https://console.cloud.google.com/functions/add ।
- " ক্লাউড রান ফাংশন " হিসাবে পরিবেশ নির্বাচন করুন। ফাংশনের নাম " get-toys-alloydb " প্রদান করুন এবং "us-central1" হিসাবে অঞ্চল নির্বাচন করুন। প্রমাণীকরণ সেট করুন "অপ্রমাণিত আহ্বানের অনুমতি দিন" এবং পরবর্তী ক্লিক করুন। সোর্স কোডের জন্য রানটাইম এবং ইনলাইন এডিটর হিসেবে Java 17 বেছে নিন।
- ডিফল্টরূপে এটি এন্ট্রি পয়েন্টকে "
gcfv2.HelloHttpFunction
" এ সেট করবে। আপনার ক্লাউড রান ফাংশনেরHelloHttpFunction.java
এবংpom.xml
এ স্থানধারক কোডটি যথাক্রমে HelloHttpFunction.java এবং pom.xml- এর কোড দিয়ে প্রতিস্থাপন করুন। - জাভা ফাইলে আপনার মানগুলির সাথে <<YOUR_PROJECT>> স্থানধারক এবং AlloyDB সংযোগ শংসাপত্রগুলি পরিবর্তন করতে মনে রাখবেন। AlloyDB শংসাপত্রগুলি হল সেইগুলি যা আমরা এই কোডল্যাবের শুরুতে ব্যবহার করেছি। আপনি যদি বিভিন্ন মান ব্যবহার করে থাকেন তবে অনুগ্রহ করে জাভা ফাইলে একই পরিবর্তন করুন।
- ডিপ্লোয় ক্লিক করুন।
একবার স্থাপন করা হলে, ক্লাউড ফাংশনকে আমাদের AlloyDB ডাটাবেস ইনস্ট্যান্স অ্যাক্সেস করার অনুমতি দেওয়ার জন্য, আমরা VPC সংযোগকারী তৈরি করব।
গুরুত্বপূর্ণ পদক্ষেপ:
আপনি একবার স্থাপনার জন্য প্রস্তুত হয়ে গেলে, আপনি Google ক্লাউড রান ফাংশন কনসোলে ফাংশনগুলি দেখতে সক্ষম হবেন। নতুন তৈরি ফাংশন ( get-toys-alloydb
) অনুসন্ধান করুন, এটিতে ক্লিক করুন, তারপরে সম্পাদনা ক্লিক করুন এবং নিম্নলিখিতগুলি পরিবর্তন করুন:
- রানটাইম, বিল্ড, সংযোগ এবং নিরাপত্তা সেটিংসে যান
- সময়সীমা 180 সেকেন্ডে বাড়ান
- সংযোগ ট্যাবে যান:
- ইনগ্রেস সেটিংসের অধীনে, নিশ্চিত করুন যে "সমস্ত ট্রাফিকের অনুমতি দিন" নির্বাচন করা হয়েছে।
- এগ্রেস সেটিংসের অধীনে, নেটওয়ার্ক ড্রপডাউনে ক্লিক করুন এবং "নতুন ভিপিসি সংযোগকারী যোগ করুন" বিকল্পটি নির্বাচন করুন এবং পপ-আপ ডায়ালগ বক্সে আপনি যে নির্দেশাবলী দেখছেন তা অনুসরণ করুন:
- VPC সংযোগকারীর জন্য একটি নাম দিন এবং নিশ্চিত করুন যে অঞ্চলটি আপনার উদাহরণের মতোই। নেটওয়ার্ক মানটিকে ডিফল্ট হিসাবে ছেড়ে দিন এবং সাবনেটকে 10.8.0.0 এর আইপি পরিসরের সাথে কাস্টম আইপি রেঞ্জ হিসাবে সেট করুন বা উপলব্ধ কিছু অনুরূপ।
- শো স্কেলিং সেটিংস প্রসারিত করুন এবং নিশ্চিত করুন যে আপনার কনফিগারেশনটি ঠিক নিম্নলিখিতটিতে সেট করা আছে:
- CREATE এ ক্লিক করুন এবং এই সংযোগকারীটি এখন প্রস্থান সেটিংসে তালিকাভুক্ত করা উচিত।
- নতুন তৈরি সংযোগকারী নির্বাচন করুন
- এই VPC সংযোগকারীর মাধ্যমে সমস্ত ট্র্যাফিক রুট করার জন্য বেছে নিন।
- NEXT- এ ক্লিক করুন এবং তারপর DEPLOY করুন ।
10. ক্লাউড রান ফাংশন পরীক্ষা করুন
একবার আপডেট করা ক্লাউড ফাংশন স্থাপন করা হলে, আপনি নিম্নলিখিত বিন্যাসে শেষ পয়েন্টটি দেখতে পাবেন:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/get-toys-alloydb
বিকল্পভাবে, আপনি ক্লাউড রান ফাংশনটি নিম্নরূপ পরীক্ষা করতে পারেন:
PROJECT_ID=$(gcloud config get-value project)
curl -X POST https://us-central1-$PROJECT_ID.cloudfunctions.net/get-toys-alloydb \
-H 'Content-Type: application/json' \
-d '{"search":"I want a standing pink panther toy"}' \
| jq .
এবং ফলাফল:
তাই তো! AlloyDB ডেটাতে এমবেডিং মডেল ব্যবহার করে সাদৃশ্য ভেক্টর অনুসন্ধান করা সহজ।
11. ওয়েব অ্যাপ্লিকেশন ক্লায়েন্ট তৈরি করা!
এই অংশে, আমরা ব্যবহারকারীর সাথে যোগাযোগ করতে এবং পাঠ্য, চিত্রের উপর ভিত্তি করে ম্যাচিং খেলনা খুঁজে পেতে এবং এমনকি তাদের প্রয়োজনের ভিত্তিতে একটি নতুন খেলনা তৈরি করতে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করব। যেহেতু অ্যাপ্লিকেশনটি ইতিমধ্যেই তৈরি করা হয়েছে, আপনি এটিকে আপনার IDE-তে অনুলিপি করতে এবং অ্যাপটি চালু এবং চালু করতে নীচের পদক্ষেপগুলি অনুসরণ করতে পারেন।
- যেহেতু আমরা জেমিনি 2.0 ফ্ল্যাশ ব্যবহার করি সেই ইমেজটি বর্ণনা করার জন্য যা ব্যবহারকারী ম্যাচিং খেলনা খুঁজে পেতে আপলোড করতে পারে, তাই আমাদের এই অ্যাপ্লিকেশনটির জন্য API KEY পেতে হবে। এটি করতে, https://aistudio.google.com/apikey এ যান এবং আপনার সক্রিয় Google ক্লাউড প্রকল্পের জন্য API কী পান যেটিতে আপনি এই অ্যাপ্লিকেশনটি প্রয়োগ করছেন এবং কীটি কোথাও সংরক্ষণ করুন:
- ক্লাউড শেল টার্মিনালে নেভিগেট করুন
- নিম্নলিখিত কমান্ড দিয়ে রেপো ক্লোন করুন:
git clone https://github.com/AbiramiSukumaran/toysearch
cd toysearch
- একবার রেপো ক্লোন হয়ে গেলে, আপনি আপনার ক্লাউড শেল এডিটর থেকে প্রকল্পটি অ্যাক্সেস করতে সক্ষম হবেন।
- আপনাকে ক্লোন করা প্রকল্প থেকে "get-toys-alloydb" এবং "toolbox-toys" ফোল্ডারগুলি মুছে ফেলতে হবে কারণ এই 2টি হল ক্লাউড রান ফাংশন কোড যা আপনার প্রয়োজন হলে রেপো থেকে উল্লেখ করা যেতে পারে৷
- আপনি অ্যাপটি তৈরি এবং স্থাপন করার আগে সমস্ত প্রয়োজনীয় পরিবেশ ভেরিয়েবল সেট করা আছে তা নিশ্চিত করুন। ক্লাউড শেল টার্মিনালে নেভিগেট করুন এবং নিম্নলিখিতগুলি চালান:
PROJECT_ID=$(gcloud config get-value project)
export PROJECT_ID $PROJECT_ID
export GOOGLE_API_KEY <YOUR API KEY that you saved>
- স্থানীয়ভাবে অ্যাপটি তৈরি করুন এবং চালান:
আপনি প্রকল্প ডিরেক্টরিতে আছেন তা নিশ্চিত করে, নিম্নলিখিত কমান্ডগুলি চালান:
mvn package
mvn spring-boot:run
- ক্লাউড রানে স্থাপন করুন
gcloud run deploy --source .
12. জেনারেটিভ AI বিবরণ বোঝা
কোন কর্মের প্রয়োজন নেই। শুধু আপনার বোঝার জন্য:
এখন আপনি প্রয়োগ করার জন্য অ্যাপ্লিকেশন পেয়েছেন, আমরা কীভাবে অনুসন্ধান (পাঠ্য এবং চিত্র) এবং প্রজন্ম সম্পন্ন করেছি তা বুঝতে একটু সময় নিন ।
- ব্যবহারকারীর পাঠ্য ভিত্তিক ভেক্টর অনুসন্ধান:
এটি ইতিমধ্যেই ক্লাউড রান ফাংশনে সম্বোধন করা হয়েছে যা আমরা "ভেক্টর অনুসন্ধান অ্যাপ্লিকেশন ওয়েব নিন" বিভাগে স্থাপন করেছি।
- ছবি আপলোড ভিত্তিক ভেক্টর অনুসন্ধান:
টেক্সট হিসাবে প্রসঙ্গ টাইপ করার পরিবর্তে, ধরা যাক ব্যবহারকারী একটি পরিচিত খেলনার একটি ছবি আপলোড করতে চায় যা তারা অনুসন্ধান করতে চায়৷ ব্যবহারকারীরা তাদের পছন্দের খেলনার একটি ছবি আপলোড করতে পারেন এবং এর সাথে প্রাসঙ্গিক বৈশিষ্ট্য পেতে পারেন।
আমরা Google এর জেমিনি 2.0 ফ্ল্যাশ মডেলটি ব্যবহার করি, যা LangChain4j ব্যবহার করে, ছবি বিশ্লেষণ করতে এবং প্রাসঙ্গিক প্রসঙ্গ, যেমন খেলনার রঙ, উপাদান, ধরন এবং অভিপ্রেত বয়সের গোষ্ঠী বের করতে।
মাত্র 5টি ধাপে, আমরা একটি ওপেন সোর্স ফ্রেমওয়ার্ক ব্যবহার করে বৃহৎ ভাষা মডেল আহ্বানের সাথে ফলাফলের সাথে মিলে যাওয়ার জন্য ব্যবহারকারীর মাল্টিমডাল ডেটা ইনপুট নিয়েছি। কিভাবে শিখুন:
package cloudcode.helloworld.web;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.googleai.GoogleAiGeminiChatModel;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.data.message.ImageContent;
import dev.langchain4j.data.message.TextContent;
import java.util.Base64;
import java.util.Optional;
public class GeminiCall {
public String imageToBase64String(byte[] imageBytes) {
String base64Img = Base64.getEncoder().encodeToString(imageBytes);
return base64Img;
}
public String callGemini(String base64ImgWithPrefix) throws Exception {
String searchText = "";
// 1. Remove the prefix
String base64Img = base64ImgWithPrefix.replace("data:image/jpeg;base64,", "");
// 2. Decode base64 to bytes
byte[] imageBytes = Base64.getDecoder().decode(base64Img);
String image = imageToBase64String(imageBytes);
// 3. Get API key from environment variable
String apiKey = Optional.ofNullable(System.getenv("GOOGLE_API_KEY"))
.orElseThrow(() -> new IllegalArgumentException("GOOGLE_API_KEY environment variable not set"));
// 4. Invoke Gemini 2.0
ChatLanguageModel gemini = GoogleAiGeminiChatModel.builder()
.apiKey(apiKey)
.modelName("gemini-2.0-flash-001")
.build();
Response<AiMessage> response = gemini.generate(
UserMessage.from(
ImageContent.from(image, "image/jpeg"),
TextContent.from(
"The picture has a toy in it. Describe the toy in the image in one line. Do not add any prefix or title to your description. Just describe that toy that you see in the image in one line, do not describe the surroundings and other objects around the toy in the image. If you do not see any toy in the image, send response stating that no toy is found in the input image.")));
// 5. Get the text from the response and send it back to the controller
searchText = response.content().text().trim();
System.out.println("searchText inside Geminicall: " + searchText);
return searchText;
}
}
- জেনেরেটিভ এআই-এর সাথে ব্যবহারকারীর অনুরোধের ভিত্তিতে একটি কাস্টমাইজড খেলনা তৈরি করতে আমরা কিভাবে Imagen 3 ব্যবহার করেছি তা বুঝুন।
ইমেজেন 3 তারপরে কাস্টম-ডিজাইন করা খেলনার একটি চিত্র তৈরি করে, ব্যবহারকারীকে তাদের সৃষ্টির একটি পরিষ্কার ভিজ্যুয়ালাইজেশন দেয়। এইভাবে আমরা মাত্র 5টি ধাপে এটি করেছি:
// Generate an image using a text prompt using an Imagen model
public String generateImage(String projectId, String location, String prompt)
throws ApiException, IOException {
final String endpoint = String.format("%s-aiplatform.googleapis.com:443", location);
PredictionServiceSettings predictionServiceSettings =
PredictionServiceSettings.newBuilder().setEndpoint(endpoint).build();
// 1. Set up the context and prompt
String context = "Generate a photo-realistic image of a toy described in the following input text from the user. Make sure you adhere to all the little details and requirements mentioned in the prompt. Ensure that the user is only describing a toy. If it is anything unrelated to a toy, politely decline the request stating that the request is inappropriate for the current context. ";
prompt = context + prompt;
// 2. Initialize a client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try (PredictionServiceClient predictionServiceClient =
PredictionServiceClient.create(predictionServiceSettings)) {
// 3. Invoke Imagen 3
final EndpointName endpointName =
EndpointName.ofProjectLocationPublisherModelName(
projectId, location, "google", "imagen-3.0-generate-001"); //"imagegeneration@006"; imagen-3.0-generate-001
Map<String, Object> instancesMap = new HashMap<>();
instancesMap.put("prompt", prompt);
Value instances = mapToValue(instancesMap);
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("sampleCount", 1);
paramsMap.put("aspectRatio", "1:1");
paramsMap.put("safetyFilterLevel", "block_few");
paramsMap.put("personGeneration", "allow_adult");
paramsMap.put("guidanceScale", 21);
paramsMap.put("imagenControlScale", 0.95); //Setting imagenControlScale
Value parameters = mapToValue(paramsMap);
// 4. Get prediction response image
PredictResponse predictResponse =
predictionServiceClient.predict(
endpointName, Collections.singletonList(instances), parameters);
// 5. Return the Base64 Encoded String to the controller
for (Value prediction : predictResponse.getPredictionsList()) {
Map<String, Value> fieldsMap = prediction.getStructValue().getFieldsMap();
if (fieldsMap.containsKey("bytesBase64Encoded")) {
bytesBase64EncodedOuput = fieldsMap.get("bytesBase64Encoded").getStringValue();
}
}
return bytesBase64EncodedOuput.toString();
}
}
মূল্য পূর্বাভাস
উপরের পূর্ববর্তী বিভাগে, আমরা আলোচনা করেছি কিভাবে ইমেজেন একটি খেলনার ইমেজ তৈরি করে যা ব্যবহারকারী নিজেরাই ডিজাইন করতে চায়। তাদের এটি কিনতে সক্ষম হওয়ার জন্য, অ্যাপ্লিকেশনটিকে এটির জন্য একটি মূল্য নির্ধারণ করতে হবে এবং আমরা কাস্টম তৈরি-টু-অর্ডার খেলনার জন্য একটি মূল্য নির্ধারণের জন্য একটি স্বজ্ঞাত যুক্তি ব্যবহার করেছি। যুক্তি হল ব্যবহারকারীর ডিজাইন করা খেলনার শীর্ষ 5টি সবচেয়ে কাছের ম্যাচিং খেলনার গড় দাম ব্যবহার করা।
জেনারেট করা খেলনার দামের পূর্বাভাস এই অ্যাপ্লিকেশনটির একটি গুরুত্বপূর্ণ অংশ এবং আমরা এটি তৈরি করতে একটি এজেন্টিক পদ্ধতি ব্যবহার করেছি। ডাটাবেসের জন্য Gen AI টুলবক্স উপস্থাপন করা হচ্ছে।
13. ডাটাবেসের জন্য জেনারেল এআই টুলবক্স
ডাটাবেসের জন্য Gen AI টুলবক্স হল Google এর একটি ওপেন সোর্স সার্ভার যা ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য Gen AI টুল তৈরি করা সহজ করে তোলে। এটি আপনাকে সংযোগ পুলিং, প্রমাণীকরণ এবং আরও অনেক কিছুর মতো জটিলতাগুলি পরিচালনা করে সহজ, দ্রুত এবং আরও নিরাপদে সরঞ্জামগুলি বিকাশ করতে সক্ষম করে৷ এটি আপনাকে Gen AI টুল তৈরি করতে সাহায্য করে যা আপনার এজেন্টদের আপনার ডাটাবেসের ডেটা অ্যাক্সেস করতে দেয়।
আপনার টুল প্রস্তুত করার জন্য এবং আমাদের অ্যাপ্লিকেশন এজেন্টিক করার জন্য এটি সেট আপ করতে সক্ষম হওয়ার জন্য আপনাকে অনুসরণ করতে হবে এমন পদক্ষেপগুলি: টুলবক্স কোডল্যাবের লিঙ্ক
আপনার অ্যাপ্লিকেশন এখন এই স্থাপন করা ক্লাউড রান ফাংশন এন্ডপয়েন্ট ব্যবহার করে খেলনা ইমেজ অর্ডার করার জন্য কাস্টম তৈরির জন্য জেনারেট করা Imagen ফলাফলের সাথে মূল্য পূরণ করতে পারে।
14. আপনার ওয়েব অ্যাপ্লিকেশন পরীক্ষা করুন
এখন আপনার অ্যাপ্লিকেশনের সমস্ত উপাদান তৈরি এবং স্থাপন করা হয়েছে, এটি ক্লাউডে পরিবেশনের জন্য প্রস্তুত। সমস্ত পরিস্থিতিতে আপনার আবেদন পরীক্ষা করুন. আপনি যা আশা করতে পারেন তার একটি ভিডিও লিঙ্ক এখানে রয়েছে:
https://www.youtube.com/shorts/ZMqUAWsghYQ
ল্যান্ডিং পৃষ্ঠাটি দেখতে এইরকম:
15. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Google ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান।
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।
16. অভিনন্দন
অভিনন্দন! শক্তিশালী ইন্টিগ্রেশন তৈরি করার জন্য ওপেন সোর্স লাইব্রেরি ব্যবহার করে আপনি সফলভাবে AlloyDB, pgvector, Imagen এবং Gemini 2.0 ব্যবহার করে একটি Toystore কনটেক্সচুয়াল সার্চ এবং জেনারেশন করেছেন। AlloyDB , Vertex AI , এবং ভেক্টর অনুসন্ধানের ক্ষমতাগুলিকে একত্রিত করে, আমরা প্রাসঙ্গিক এবং ভেক্টর অনুসন্ধানগুলিকে অ্যাক্সেসযোগ্য, দক্ষ এবং সত্যিকার অর্থে চালিত করার জন্য একটি বিশাল লাফ দিয়েছি।