এই কোডল্যাব সম্পর্কে
1. ওভারভিউ
বিভিন্ন শিল্প জুড়ে, প্রাসঙ্গিক অনুসন্ধান একটি গুরুত্বপূর্ণ কার্যকারিতা যা তাদের অ্যাপ্লিকেশনগুলির হৃদয় এবং কেন্দ্র গঠন করে। পুনরুদ্ধার অগমেন্টেড জেনারেশন তার জেনারেটিভ এআই চালিত পুনরুদ্ধার প্রক্রিয়ার সাথে বেশ কিছুদিন ধরে এই গুরুত্বপূর্ণ প্রযুক্তি বিবর্তনের একটি মূল চালক। জেনারেটিভ মডেল, তাদের বৃহৎ প্রসঙ্গ উইন্ডো এবং চিত্তাকর্ষক আউটপুট গুণমান সহ, এআইকে রূপান্তরিত করছে। RAG এআই অ্যাপ্লিকেশান এবং এজেন্টগুলিতে প্রসঙ্গ ইনজেক্ট করার একটি পদ্ধতিগত উপায় প্রদান করে, সেগুলিকে স্ট্রাকচার্ড ডাটাবেস বা বিভিন্ন মিডিয়ার তথ্যে ভিত্তি করে। এই প্রাসঙ্গিক তথ্যটি সত্যের স্বচ্ছতা এবং আউটপুটের নির্ভুলতার জন্য অত্যন্ত গুরুত্বপূর্ণ, কিন্তু সেই ফলাফলগুলি কতটা সঠিক? আপনার ব্যবসা কি মূলত এই প্রাসঙ্গিক মিল এবং প্রাসঙ্গিকতার নির্ভুলতার উপর নির্ভর করে? তাহলে এই প্রকল্পটি আপনাকে সুড়সুড়ি দেবে!
এখন কল্পনা করুন যদি আমরা জেনারেটিভ মডেলের ক্ষমতা নিতে পারি এবং ইন্টারেক্টিভ এজেন্ট তৈরি করতে পারি যা এই ধরনের প্রসঙ্গ-সমালোচনা তথ্য দ্বারা সমর্থিত এবং সত্যের ভিত্তিতে স্বায়ত্তশাসিত সিদ্ধান্ত নিতে সক্ষম হয়; যে আমরা আজ নির্মাণ করতে যাচ্ছে কি. আমরা পেটেন্ট বিশ্লেষণ অ্যাপ্লিকেশনের জন্য AlloyDB-তে উন্নত RAG দ্বারা চালিত এজেন্ট ডেভেলপমেন্ট কিট ব্যবহার করে এন্ড টু এন্ড এআই এজেন্ট অ্যাপ তৈরি করতে যাচ্ছি।
পেটেন্ট বিশ্লেষণ এজেন্ট ব্যবহারকারীকে তাদের অনুসন্ধান পাঠ্যের প্রাসঙ্গিকভাবে প্রাসঙ্গিক পেটেন্ট খুঁজে পেতে সহায়তা করে এবং জিজ্ঞাসা করার পরে, একটি নির্বাচিত পেটেন্টের জন্য প্রয়োজনে একটি পরিষ্কার এবং সংক্ষিপ্ত ব্যাখ্যা এবং অতিরিক্ত বিবরণ প্রদান করে। এটা কিভাবে করা হয় দেখতে প্রস্তুত? এর মধ্যে ডুব দেওয়া যাক!
উদ্দেশ্য
লক্ষ্য সহজ। একজন ব্যবহারকারীকে একটি পাঠ্য বিবরণের উপর ভিত্তি করে পেটেন্ট অনুসন্ধান করার অনুমতি দিন এবং তারপর সার্চের ফলাফল থেকে একটি নির্দিষ্ট পেটেন্টের বিস্তারিত ব্যাখ্যা পান এবং এই সমস্ত কিছু জাভা ADK, AlloyDB, ভেক্টর অনুসন্ধান (উন্নত সূচক সহ), জেমিনি এবং ক্লাউড রানে সার্ভারহীনভাবে স্থাপন করা একটি AI এজেন্ট ব্যবহার করে।
আপনি কি নির্মাণ করবেন
এই ল্যাবের অংশ হিসাবে, আপনি করবেন:
- একটি AlloyDB উদাহরণ তৈরি করুন এবং পেটেন্ট পাবলিক ডেটাসেট ডেটা লোড করুন
- ScaNN এবং Recall eval বৈশিষ্ট্য ব্যবহার করে AlloyDB-তে উন্নত ভেক্টর অনুসন্ধান প্রয়োগ করুন
- Java ADK ব্যবহার করে একটি এজেন্ট তৈরি করুন
- জাভা সার্ভারহীন ক্লাউড ফাংশনে ডাটাবেস সার্ভার-সাইড লজিক প্রয়োগ করুন
- ক্লাউড রানে এজেন্ট স্থাপন ও পরীক্ষা করুন
নিম্নলিখিত চিত্রটি তথ্যের প্রবাহ এবং বাস্তবায়নের সাথে জড়িত পদক্ষেপগুলিকে উপস্থাপন করে।
High level diagram representing the flow of the Patent Search Agent with AlloyDB & ADK
প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
2. আপনি শুরু করার আগে
একটি প্রকল্প তৈরি করুন
- Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন।
- নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন।
- আপনি Cloud Shell ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ। গুগল ক্লাউড কনসোলের শীর্ষে সক্রিয় ক্লাউড শেল ক্লিক করুন।
- একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি পরীক্ষা করে দেখুন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে:
gcloud auth list
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
gcloud config list project
- যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
- প্রয়োজনীয় API সক্রিয় করুন। আপনি ক্লাউড শেল টার্মিনালে একটি gcloud কমান্ড ব্যবহার করতে পারেন:
gcloud services enable alloydb.googleapis.com compute.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudfunctions.googleapis.com aiplatform.googleapis.com
gcloud কমান্ডের বিকল্প হল কনসোলের মাধ্যমে প্রতিটি পণ্য অনুসন্ধান করে বা এই লিঙ্কটি ব্যবহার করে।
জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।
3. ডাটাবেস সেটআপ
এই ল্যাবে আমরা পেটেন্ট ডেটার ডাটাবেস হিসাবে AlloyDB ব্যবহার করব। এটি ডাটাবেস এবং লগগুলির মতো সমস্ত সংস্থান ধরে রাখতে ক্লাস্টার ব্যবহার করে। প্রতিটি ক্লাস্টারের একটি প্রাথমিক উদাহরণ রয়েছে যা ডেটাতে অ্যাক্সেস পয়েন্ট সরবরাহ করে। টেবিলে প্রকৃত তথ্য থাকবে।
আসুন একটি AlloyDB ক্লাস্টার, উদাহরণ এবং টেবিল তৈরি করি যেখানে পেটেন্ট ডেটাসেট লোড করা হবে।
একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন
- ক্লাউড কনসোলে AlloyDB পৃষ্ঠাটি নেভিগেট করুন। ক্লাউড কনসোলে বেশিরভাগ পৃষ্ঠাগুলি খুঁজে পাওয়ার একটি সহজ উপায় হল কনসোলের অনুসন্ধান বার ব্যবহার করে সেগুলি অনুসন্ধান করা৷
- সেই পৃষ্ঠা থেকে ক্লাস্টার তৈরি করুন নির্বাচন করুন:
- আপনি নীচের মত একটি পর্দা দেখতে পাবেন. নিম্নলিখিত মানগুলির সাথে একটি ক্লাস্টার এবং উদাহরণ তৈরি করুন (আপনি রেপো থেকে অ্যাপ্লিকেশন কোড ক্লোন করার ক্ষেত্রে মানগুলি মেলে তা নিশ্চিত করুন):
- ক্লাস্টার আইডি : "
vector-cluster
" - পাসওয়ার্ড : "
alloydb
" - PostgreSQL 15 / সর্বশেষ প্রস্তাবিত
- অঞ্চল : "
us-central1
" - নেটওয়ার্কিং : "
default
"
- আপনি যখন ডিফল্ট নেটওয়ার্ক নির্বাচন করেন, আপনি নীচের মত একটি স্ক্রীন দেখতে পাবেন।
সংযোগ সেট আপ নির্বাচন করুন।
- সেখান থেকে, " একটি স্বয়ংক্রিয়ভাবে বরাদ্দকৃত IP পরিসর ব্যবহার করুন " নির্বাচন করুন এবং চালিয়ে যান। তথ্য পর্যালোচনা করার পরে, সংযোগ তৈরি করুন নির্বাচন করুন।
- আপনার নেটওয়ার্ক সেট আপ হয়ে গেলে, আপনি আপনার ক্লাস্টার তৈরি করা চালিয়ে যেতে পারেন। নীচে দেখানো হিসাবে ক্লাস্টার সেট আপ সম্পূর্ণ করতে CLUSTER তৈরি করুন ক্লিক করুন:
ইনস্ট্যান্স আইডি (যা আপনি ক্লাস্টার/ইনস্ট্যান্স কনফিগারেশনের সময় খুঁজে পেতে পারেন) পরিবর্তন করতে ভুলবেন না
vector-instance
আপনি যদি এটি পরিবর্তন করতে না পারেন তবে সমস্ত আসন্ন রেফারেন্সে আপনার ইনস্ট্যান্স আইডি ব্যবহার করতে ভুলবেন না।
মনে রাখবেন ক্লাস্টার তৈরি হতে প্রায় 10 মিনিট সময় লাগবে। একবার এটি সফল হলে, আপনি একটি স্ক্রীন দেখতে পাবেন যা আপনার তৈরি করা ক্লাস্টারটির ওভারভিউ দেখায়।
4. ডেটা ইনজেশন
এখন স্টোর সম্পর্কে ডেটা সহ একটি টেবিল যুক্ত করার সময়। 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;
একটি টেবিল তৈরি করুন
আপনি AlloyDB স্টুডিওতে নীচের DDL স্টেটমেন্ট ব্যবহার করে একটি টেবিল তৈরি করতে পারেন:
CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT, abstract_embeddings vector(768)) ;
বিমূর্ত_এম্বেডিং কলামটি পাঠ্যের ভেক্টর মানের জন্য সঞ্চয়ের অনুমতি দেবে।
অনুমতি দিন
"এম্বেডিং" ফাংশনে কার্যকর করার জন্য নীচের বিবৃতিটি চালান:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB পরিষেবা অ্যাকাউন্টে Vertex AI ব্যবহারকারীর ভূমিকা মঞ্জুর করুন
Google ক্লাউড IAM কনসোল থেকে, AlloyDB পরিষেবা অ্যাকাউন্টটি মঞ্জুর করুন (যেটি এইরকম দেখাচ্ছে: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) ভূমিকা "Vertex AI ব্যবহারকারী"-তে অ্যাক্সেস করুন৷ PROJECT_NUMBER এ আপনার প্রকল্প নম্বর থাকবে৷
বিকল্পভাবে আপনি ক্লাউড শেল টার্মিনাল থেকে নীচের কমান্ডটি চালাতে পারেন:
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"
ডাটাবেসে পেটেন্ট ডেটা লোড করুন
BigQuery-এ Google Patents পাবলিক ডেটাসেটগুলি আমাদের ডেটাসেট হিসাবে ব্যবহার করা হবে৷ আমরা আমাদের প্রশ্নগুলি চালানোর জন্য AlloyDB স্টুডিও ব্যবহার করব। তথ্যটি এই insert_scripts.sql
ফাইলে পাওয়া যায় এবং আমরা পেটেন্ট ডেটা লোড করতে এটি চালাব।
- Google ক্লাউড কনসোলে, AlloyDB পৃষ্ঠাটি খুলুন।
- আপনার নতুন তৈরি ক্লাস্টার নির্বাচন করুন এবং উদাহরণে ক্লিক করুন।
- AlloyDB নেভিগেশন মেনুতে, AlloyDB Studio এ ক্লিক করুন। আপনার শংসাপত্র দিয়ে সাইন ইন করুন.
- ডানদিকের নতুন ট্যাব আইকনে ক্লিক করে একটি নতুন ট্যাব খুলুন।
- উপরে উল্লিখিত
insert_scripts.sql
স্ক্রিপ্ট থেকেinsert
ক্যোয়ারী স্টেটমেন্ট কপি করুন সম্পাদকে। আপনি এই ব্যবহারের ক্ষেত্রে একটি দ্রুত ডেমোর জন্য 10-50টি সন্নিবেশ বিবৃতি অনুলিপি করতে পারেন। - রান এ ক্লিক করুন। আপনার প্রশ্নের ফলাফল ফলাফল সারণীতে প্রদর্শিত হবে।
5. পেটেন্ট ডেটার জন্য এমবেডিং তৈরি করুন
প্রথমে নিম্নলিখিত নমুনা ক্যোয়ারী চালিয়ে এমবেডিং ফাংশন পরীক্ষা করা যাক:
SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');
এটি ক্যোয়ারীতে নমুনা পাঠ্যের জন্য এমবেডিং ভেক্টর ফেরত দিতে হবে, যা ফ্লোটগুলির একটি অ্যারের মতো দেখায়। এই মত দেখায়:
বিমূর্ত_এম্বেডিং ভেক্টর ক্ষেত্র আপডেট করুন
সংশ্লিষ্ট এমবেডিংগুলির সাথে টেবিলে পেটেন্ট বিমূর্তগুলি আপডেট করতে নীচের ডিএমএলটি চালান:
UPDATE patents_data set abstract_embeddings = embedding( 'text-embedding-005', abstract);
6. ভেক্টর অনুসন্ধান সম্পাদন করুন
এখন যেহেতু টেবিল, ডেটা, এম্বেডিং সবই প্রস্তুত, চলুন ব্যবহারকারীর সার্চ টেক্সটের জন্য রিয়েল টাইম ভেক্টর সার্চ করা যাক। আপনি নীচের ক্যোয়ারী চালিয়ে এটি পরীক্ষা করতে পারেন:
SELECT id || ' - ' || title as title FROM patents_data ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
এই প্রশ্নে,
- ব্যবহারকারীর অনুসন্ধান করা পাঠ্য হল: "সেন্টিমেন্ট বিশ্লেষণ"।
- আমরা মডেলটি ব্যবহার করে এমবেডিং() পদ্ধতিতে এম্বেডিং-এ রূপান্তর করছি: text-embeding-005।
- "<=>" COSINE SIMILARITY দূরত্ব পদ্ধতির ব্যবহার প্রতিনিধিত্ব করে।
- ডাটাবেসে সংরক্ষিত ভেক্টরের সাথে সামঞ্জস্যপূর্ণ করতে আমরা এম্বেডিং পদ্ধতির ফলাফলকে ভেক্টর টাইপে রূপান্তর করছি।
- LIMIT 10 প্রতিনিধিত্ব করে যে আমরা অনুসন্ধান পাঠ্যের 10টি নিকটতম মিল নির্বাচন করছি।
AlloyDB ভেক্টর অনুসন্ধান RAG পরবর্তী স্তরে নিয়ে যায়:
সেখানে একটি ভাল সংখ্যক জিনিস চালু আছে. ডেভেলপার-কেন্দ্রিক দুটি হল:
- ইনলাইন ফিল্টারিং
- মূল্যায়নকারীকে স্মরণ করুন
ইনলাইন ফিল্টারিং
পূর্বে একজন বিকাশকারী হিসাবে, আপনাকে ভেক্টর অনুসন্ধান ক্যোয়ারী সম্পাদন করতে হবে এবং ফিল্টারিং এবং প্রত্যাহার করার সাথে ডিল করতে হবে। AlloyDB ক্যোয়ারী অপ্টিমাইজার কিভাবে ফিল্টার সহ একটি ক্যোয়ারী চালাতে হয় তার উপর পছন্দ করে। ইনলাইন ফিল্টারিং হল একটি নতুন ক্যোয়ারী অপ্টিমাইজেশান কৌশল যা AlloyDB ক্যোয়ারী অপ্টিমাইজারকে মেটাডেটা ফিল্টারিং অবস্থা এবং পাশাপাশি ভেক্টর অনুসন্ধান উভয়ই মূল্যায়ন করতে দেয়, মেটাডেটা কলামে ভেক্টর সূচী এবং সূচী উভয়ই ব্যবহার করে। এটি প্রত্যাহার কর্মক্ষমতা বৃদ্ধি করেছে, যা ডেভেলপারদের বাক্সের বাইরে AlloyDB যা অফার করে তার সুবিধা নিতে দেয়।
মাঝারি সিলেক্টিভিটির ক্ষেত্রে ইনলাইন ফিল্টারিং সবচেয়ে ভালো। যেহেতু AlloyDB ভেক্টর সূচকের মাধ্যমে অনুসন্ধান করে, এটি কেবলমাত্র মেটাডেটা ফিল্টারিং অবস্থার সাথে মেলে এমন ভেক্টরগুলির জন্য দূরত্ব গণনা করে (কোয়েরিতে আপনার কার্যকরী ফিল্টারগুলি সাধারণত WHERE ক্লজে পরিচালনা করা হয়)। এটি পোস্ট-ফিল্টার বা প্রি-ফিল্টারের সুবিধার পরিপূরক এই প্রশ্নের জন্য কর্মক্ষমতা ব্যাপকভাবে উন্নত করে।
- pgvector এক্সটেনশন ইনস্টল বা আপডেট করুন
CREATE EXTENSION IF NOT EXISTS vector WITH VERSION '0.8.0.google-3';
যদি pgvector এক্সটেনশনটি ইতিমধ্যেই ইনস্টল করা থাকে, তাহলে ভেক্টর এক্সটেনশনটিকে 0.8.0.google-3 সংস্করণে আপগ্রেড করুন বা রিকল মূল্যায়নকারীর ক্ষমতা পেতে।
ALTER EXTENSION vector UPDATE TO '0.8.0.google-3';
আপনার ভেক্টর এক্সটেনশন <0.8.0.google-3 হলেই এই ধাপটি কার্যকর করা দরকার।
গুরুত্বপূর্ণ নোট: আপনার সারি সংখ্যা 100-এর কম হলে, আপনাকে প্রথমে স্ক্যানএন সূচক তৈরি করতে হবে না কারণ এটি কম সারির জন্য প্রযোজ্য হবে না। সেই ক্ষেত্রে অনুগ্রহ করে নিম্নলিখিত পদক্ষেপগুলি এড়িয়ে যান৷
- ScaNN সূচক তৈরি করতে, alloydb_scann এক্সটেনশন ইনস্টল করুন।
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- প্রথমে সূচী ছাড়া এবং ইনলাইন ফিল্টার সক্রিয় না করে ভেক্টর অনুসন্ধান ক্যোয়ারী চালান:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
ফলাফল অনুরূপ হওয়া উচিত:
- এটিতে ব্যাখ্যা বিশ্লেষণ চালান: (কোনও সূচক বা ইনলাইন ফিল্টারিং ছাড়াই)
কার্যকর করার সময় হল 2.4 ms
- আসুন num_claims ক্ষেত্রে একটি নিয়মিত সূচক তৈরি করি যাতে আমরা এটি দ্বারা ফিল্টার করতে পারি:
CREATE INDEX idx_patents_data_num_claims ON patents_data (num_claims);
- আমাদের পেটেন্ট অনুসন্ধান অ্যাপ্লিকেশনের জন্য ScaNN সূচক তৈরি করা যাক। আপনার AlloyDB স্টুডিও থেকে নিম্নলিখিত চালান:
CREATE INDEX patent_index ON patents_data
USING scann (abstract_embeddings cosine)
WITH (num_leaves=32);
গুরুত্বপূর্ণ নোট: (num_leaves=32)
1000+ সারি সহ আমাদের মোট ডেটাসেটের জন্য প্রযোজ্য। আপনার সারি সংখ্যা 100-এর কম হলে, আপনাকে প্রথমে একটি সূচক তৈরি করতে হবে না কারণ এটি কম সারির জন্য প্রযোজ্য হবে না।
- ScaNN ইনডেক্সে সক্ষম ইনলাইন ফিল্টারিং সেট করুন:
SET scann.enable_inline_filtering = on
- এখন, ফিল্টার এবং ভেক্টর অনুসন্ধানের সাথে একই কোয়েরি চালানো যাক:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
আপনি দেখতে পাচ্ছেন যে একই ভেক্টর অনুসন্ধানের জন্য কার্যকর করার সময় উল্লেখযোগ্যভাবে হ্রাস পেয়েছে। ভেক্টর অনুসন্ধানে ইনলাইন ফিল্টারিং ইনফিউজড স্ক্যানএন সূচক এটিকে সম্ভব করেছে!!!
এর পরে, আসুন এই ScaNN সক্ষম ভেক্টর অনুসন্ধানের জন্য প্রত্যাহার মূল্যায়ন করি।
মূল্যায়নকারীকে স্মরণ করুন
রিকল ইন সাদৃশ্য অনুসন্ধান হল প্রাসঙ্গিক দৃষ্টান্তের শতাংশ যা একটি অনুসন্ধান থেকে পুনরুদ্ধার করা হয়েছে, অর্থাৎ সত্য ইতিবাচক সংখ্যা। এটি অনুসন্ধানের গুণমান পরিমাপের জন্য ব্যবহৃত সবচেয়ে সাধারণ মেট্রিক। প্রত্যাহার ক্ষতির একটি উৎস আনুমানিক নিকটতম প্রতিবেশী অনুসন্ধান, বা aNN, এবং k (সঠিক) নিকটতম প্রতিবেশী অনুসন্ধান, বা kNN এর মধ্যে পার্থক্য থেকে আসে। AlloyDB-এর ScaNN-এর মতো ভেক্টর সূচীগুলি aNN অ্যালগরিদম প্রয়োগ করে, যা আপনাকে প্রত্যাহারে একটি ছোট ট্রেডঅফের বিনিময়ে বড় ডেটাসেটে ভেক্টর অনুসন্ধানের গতি বাড়াতে দেয়। এখন, AlloyDB আপনাকে পৃথক প্রশ্নের জন্য ডাটাবেসে সরাসরি এই ট্রেডঅফ পরিমাপ করার ক্ষমতা প্রদান করে এবং নিশ্চিত করে যে এটি সময়ের সাথে স্থিতিশীল। আপনি আরও ভাল ফলাফল এবং কর্মক্ষমতা অর্জন করতে এই তথ্যের প্রতিক্রিয়া হিসাবে ক্যোয়ারী এবং সূচক প্যারামিটার আপডেট করতে পারেন।
আপনি evaluate_query_recall ফাংশন ব্যবহার করে একটি প্রদত্ত কনফিগারেশনের জন্য একটি ভেক্টর সূচকে একটি ভেক্টর কোয়েরির জন্য রিকল খুঁজে পেতে পারেন। এই ফাংশনটি আপনাকে ভেক্টর কোয়েরি রিকল ফলাফলগুলি অর্জন করতে আপনার প্যারামিটারগুলি টিউন করতে দেয় যা আপনি চান। রিকল হল সার্চ কোয়ালিটির জন্য ব্যবহৃত মেট্রিক, এবং প্রত্যাবর্তিত ফলাফলের শতাংশ হিসাবে সংজ্ঞায়িত করা হয় যেগুলি বস্তুনিষ্ঠভাবে কোয়েরি ভেক্টরের কাছাকাছি। evaluate_query_recall ফাংশনটি ডিফল্টরূপে চালু থাকে।
গুরুত্বপূর্ণ নোট:
আপনি যদি নিম্নলিখিত ধাপে HNSW সূচকে অনুমতি অস্বীকার ত্রুটির সম্মুখীন হন, তাহলে আপাতত এই সম্পূর্ণ প্রত্যাহার মূল্যায়ন বিভাগটি এড়িয়ে যান। এটি এই মুহুর্তে অ্যাক্সেস সীমাবদ্ধতার সাথে করতে হতে পারে কারণ এই কোডল্যাবটি নথিভুক্ত করার সময় এটি প্রকাশিত হয়েছে।
- ScaNN সূচক এবং HNSW সূচকে সক্ষম সূচক স্ক্যান পতাকা সেট করুন:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
- AlloyDB স্টুডিওতে নিম্নলিখিত ক্যোয়ারী চালান:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 25 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
evaluate_query_recall ফাংশনটি একটি প্যারামিটার হিসাবে ক্যোয়ারী নেয় এবং এটির প্রত্যাহার করে। আমি একই ক্যোয়ারী ব্যবহার করছি যা আমি ফাংশন ইনপুট ক্যোয়ারী হিসাবে কর্মক্ষমতা পরীক্ষা করতে ব্যবহার করছি। আমি সূচী পদ্ধতি হিসাবে SCaNN যোগ করেছি। আরও পরামিতি বিকল্পের জন্য ডকুমেন্টেশন পড়ুন।
এই ভেক্টর অনুসন্ধান ক্যোয়ারীটির জন্য প্রত্যাহার আমরা ব্যবহার করছি:
আমি দেখতে পাচ্ছি যে RECALL 70%। এখন আমি সূচক প্যারামিটার, পদ্ধতি এবং ক্যোয়ারী প্যারামিটার পরিবর্তন করতে এবং এই ভেক্টর অনুসন্ধানের জন্য আমার প্রত্যাহার উন্নত করতে এই তথ্য ব্যবহার করতে পারি!
আমি ফলাফলে সারির সংখ্যা 7 এ পরিবর্তন করেছি (আগের 10 থেকে) এবং আমি একটি সামান্য উন্নত RECALL দেখতে পাচ্ছি, অর্থাৎ 86%।
এর মানে হল রিয়েল-টাইমে আমি ব্যবহারকারীদের সার্চের প্রেক্ষাপট অনুসারে ম্যাচের প্রাসঙ্গিকতা উন্নত করতে আমার ব্যবহারকারীরা দেখতে পাওয়া ম্যাচের সংখ্যা পরিবর্তন করতে পারি।
ঠিক আছে এখন! ডাটাবেস যুক্তি স্থাপন করার এবং এজেন্টের কাছে যাওয়ার সময়!!!
7. ডাটাবেস লজিককে ওয়েব সার্ভারহীনভাবে নিয়ে যান
এই অ্যাপটিকে ওয়েবে নিয়ে যাওয়ার জন্য প্রস্তুত? নীচের পদক্ষেপগুলি অনুসরণ করুন:
- একটি নতুন ক্লাউড রান ফাংশন তৈরি করতে Google ক্লাউড কনসোলে ক্লাউড রান ফাংশনে যান বা লিঙ্কটি ব্যবহার করুন: https://console.cloud.google.com/functions/add ।
- " ক্লাউড রান ফাংশন " হিসাবে পরিবেশ নির্বাচন করুন। ফাংশনের নাম " পেটেন্ট-সার্চ " প্রদান করুন এবং অঞ্চলটিকে " us-central1 " হিসাবে বেছে নিন। প্রমাণীকরণ সেট করুন " অপ্রমাণিত আহ্বানের অনুমতি দিন " এবং পরবর্তী ক্লিক করুন। সোর্স কোডের জন্য রানটাইম এবং ইনলাইন এডিটর হিসেবে Java 17 বেছে নিন।
- ডিফল্টরূপে এটি এন্ট্রি পয়েন্টকে " gcfv2.HelloHttpFunction " এ সেট করবে। আপনার ক্লাউড রান ফাংশনের HelloHttpFunction.java এবং pom.xml-এ স্থানধারক কোডটি যথাক্রমে " PatentSearch.java " এবং " pom.xml " থেকে কোড দিয়ে প্রতিস্থাপন করুন। ক্লাস ফাইলের নাম পরিবর্তন করে PatentSearch.java করুন।
- জাভা ফাইলে আপনার মানগুলির সাথে ************* প্লেসহোল্ডার এবং AlloyDB সংযোগ শংসাপত্রগুলি পরিবর্তন করতে মনে রাখবেন। AlloyDB শংসাপত্রগুলি হল সেইগুলি যা আমরা এই কোডল্যাবের শুরুতে ব্যবহার করেছি। আপনি যদি বিভিন্ন মান ব্যবহার করে থাকেন, অনুগ্রহ করে জাভা ফাইলে একই পরিবর্তন করুন।
- Deploy এ ক্লিক করুন।
গুরুত্বপূর্ণ পদক্ষেপ:
একবার স্থাপন করা হলে, ক্লাউড ফাংশনকে আমাদের AlloyDB ডাটাবেস ইনস্ট্যান্স অ্যাক্সেস করার অনুমতি দেওয়ার জন্য, আমরা VPC সংযোগকারী তৈরি করব।
একবার আপনি স্থাপনার জন্য প্রস্তুত হয়ে গেলে, আপনি Google ক্লাউড রান ফাংশন কনসোলে ফাংশনগুলি দেখতে সক্ষম হবেন৷ নতুন তৈরি ফাংশন (পেটেন্ট-অনুসন্ধান) অনুসন্ধান করুন, এটিতে ক্লিক করুন, তারপরে সম্পাদনা করুন এবং নতুন পুনর্বিবেচনা করুন (ক্লাউড রান ফাংশন কনসোলের উপরে সম্পাদনা আইকন (পেন) দ্বারা চিহ্নিত) ক্লিক করুন এবং নিম্নলিখিতগুলি পরিবর্তন করুন:
- নেটওয়ার্কিং ট্যাবে যান:
- " আউটবাউন্ড ট্রাফিকের জন্য একটি VPC এর সাথে সংযোগ করুন " নির্বাচন করুন এবং তারপর " সার্ভারলেস VPC অ্যাক্সেস সংযোগকারীগুলি ব্যবহার করুন " নির্বাচন করুন
- নেটওয়ার্ক ড্রপডাউন, সেটিংসের অধীনে, নেটওয়ার্ক ড্রপডাউনে ক্লিক করুন এবং " নতুন ভিপিসি সংযোগকারী যোগ করুন " বিকল্পটি নির্বাচন করুন (যদি আপনি ইতিমধ্যে ডিফল্টটি কনফিগার না করে থাকেন) এবং পপ-আপ ডায়ালগ বক্সে যে নির্দেশাবলী দেখতে পান তা অনুসরণ করুন:
- VPC সংযোগকারীর জন্য একটি নাম দিন এবং নিশ্চিত করুন যে অঞ্চলটি আপনার উদাহরণের মতোই। নেটওয়ার্ক মানটিকে ডিফল্ট হিসাবে ছেড়ে দিন এবং সাবনেটকে 10.8.0.0 এর আইপি পরিসরের সাথে কাস্টম আইপি রেঞ্জ হিসাবে সেট করুন বা উপলব্ধ কিছু অনুরূপ।
- শো স্কেলিং সেটিংস প্রসারিত করুন এবং নিশ্চিত করুন যে আপনার কনফিগারেশনটি ঠিক নিম্নলিখিতটিতে সেট করা আছে:
- CREATE এ ক্লিক করুন এবং এই সংযোগকারীটি এখন প্রস্থান সেটিংসে তালিকাভুক্ত করা উচিত।
- নতুন তৈরি সংযোগকারী নির্বাচন করুন.
- এই VPC সংযোগকারীর মাধ্যমে সমস্ত ট্র্যাফিক রুট করার জন্য বেছে নিন।
- পরবর্তী ক্লিক করুন এবং তারপর ডিপ্লোয় করুন ।
- একবার আপডেট করা ক্লাউড ফাংশনটি স্থাপন করা হলে, আপনি উত্পন্ন শেষ পয়েন্ট দেখতে পাবেন। এটি অনুলিপি করুন এবং নিম্নলিখিত কমান্ডে প্রতিস্থাপন করুন:
PROJECT_ID=$(gcloud config get-value project)
curl -X POST <<YOUR_ENDPOINT>> \
-H 'Content-Type: application/json' \
-d '{"search":"Sentiment Analysis"}'
তাই তো! AlloyDB ডেটাতে এমবেডিং মডেল ব্যবহার করে একটি উন্নত প্রাসঙ্গিক সাদৃশ্য ভেক্টর অনুসন্ধান করা সহজ।
8. জাভা ADK দিয়ে এজেন্ট তৈরি করা যাক
প্রথমে, এডিটরে জাভা প্রজেক্ট দিয়ে শুরু করা যাক।
- ক্লাউড শেল টার্মিনালে নেভিগেট করুন
https://shell.cloud.google.com/?fromcloudshell=true&show=ide%2Cterminal
- অনুরোধ করা হলে অনুমোদন করুন
- ক্লাউড শেল কনসোলের উপরে থেকে সম্পাদক আইকনে ক্লিক করে ক্লাউড শেল এডিটরে টগল করুন
- ল্যান্ডিং ক্লাউড শেল এডিটর কনসোলে, একটি নতুন ফোল্ডার তৈরি করুন এবং এটির নাম দিন "adk-agents"
নীচে দেখানো হিসাবে আপনার ক্লাউড শেলের রুট ডিরেক্টরিতে নতুন ফোল্ডার তৈরি করুন ক্লিক করুন:
এটিকে "adk-এজেন্ট" নাম দিন:
- নীচের কাঠামোতে সংশ্লিষ্ট ফাইলের নাম সহ নিম্নলিখিত ফোল্ডার কাঠামো এবং খালি ফাইলগুলি তৈরি করুন:
adk-agents/
└—— pom.xml
└—— src/
└—— main/
└—— java/
└—— agents/
└—— App.java
- একটি পৃথক ট্যাবে গিথুব রেপো খুলুন এবং App.java এবং pom.xml ফাইলগুলির জন্য উত্স কোডটি অনুলিপি করুন৷
- আপনি যদি উপরের ডানদিকে কোণায় "নতুন ট্যাবে খুলুন" আইকনটি ব্যবহার করে একটি নতুন ট্যাবে সম্পাদকটি খুলে থাকেন, তাহলে আপনি পৃষ্ঠার নীচে টার্মিনালটি খুলতে পারেন৷ আপনি এডিটর এবং টার্মিনাল উভয়ই সমান্তরালভাবে খোলা রাখতে পারেন যাতে আপনি অবাধে কাজ করতে পারেন।
- একবার ক্লোন হয়ে গেলে, ক্লাউড শেল এডিটর কনসোলে আবার টগল করুন
- যেহেতু আমরা ইতিমধ্যে ক্লাউড রান ফাংশন তৈরি করেছি, তাই আপনাকে রেপো ফোল্ডার থেকে ক্লাউড রান ফাংশন ফাইলগুলি অনুলিপি করতে হবে না ।
ADK Java SDK দিয়ে শুরু করা হচ্ছে
এটা মোটামুটি সোজা. আপনাকে প্রাথমিকভাবে নিশ্চিত করতে হবে যে আপনার ক্লোন ধাপে নিম্নলিখিতগুলি কভার করা হয়েছে:
- নির্ভরতা যোগ করুন:
আপনার pom.xml-এ google-adk এবং google-adk-dev (ওয়েব UI-এর জন্য) আর্টিফ্যাক্টগুলি অন্তর্ভুক্ত করুন।
<!-- The ADK core dependency -->
<dependency>
<groupId>com.google.adk</groupId>
<artifactId>google-adk</artifactId>
<version>0.1.0</version>
</dependency>
<!-- The ADK dev web UI to debug your agent -->
<dependency>
<groupId>com.google.adk</groupId>
<artifactId>google-adk-dev</artifactId>
<version>0.1.0</version>
</dependency>
সোর্স রিপোজিটরি থেকে pom.xml রেফারেন্স নিশ্চিত করুন কারণ অ্যাপ্লিকেশনটি চালানোর জন্য প্রয়োজনীয় অন্যান্য নির্ভরতা এবং কনফিগারেশন রয়েছে।
- আপনার প্রকল্প কনফিগার করুন:
আপনার জাভা সংস্করণ (17+ প্রস্তাবিত) এবং Maven কম্পাইলার সেটিংস আপনার pom.xml এ সঠিকভাবে কনফিগার করা হয়েছে তা নিশ্চিত করুন। আপনি নীচের কাঠামো অনুসরণ করতে আপনার প্রকল্প কনফিগার করতে পারেন:
adk-agents/
└—— pom.xml
└—— src/
└—— main/
└—— java/
└—— agents/
└—— App.java
- এজেন্ট এবং এর টুলস সংজ্ঞায়িত করা (App.java):
এখানেই ADK Java SDK-এর জাদু জ্বলজ্বল করে। আমরা আমাদের এজেন্ট, এর ক্ষমতা (নির্দেশাবলী) এবং এটি ব্যবহার করতে পারে এমন সরঞ্জামগুলিকে সংজ্ঞায়িত করি।
এখানে প্রধান এজেন্ট শ্রেণীর কয়েকটি কোড স্নিপেটের একটি সরলীকৃত সংস্করণ খুঁজুন। সম্পূর্ণ প্রকল্পের জন্য এখানে প্রজেক্ট রেপো দেখুন।
// App.java (Simplified Snippets)
package agents;
import com.google.adk.agents.LlmAgent;
import com.google.adk.agents.BaseAgent;
import com.google.adk.agents.InvocationContext;
import com.google.adk.tools.Annotations.Schema;
import com.google.adk.tools.FunctionTool;
// ... other imports
public class App {
static FunctionTool searchTool = FunctionTool.create(App.class, "getPatents");
static FunctionTool explainTool = FunctionTool.create(App.class, "explainPatent");
public static BaseAgent ROOT_AGENT = initAgent();
public static BaseAgent initAgent() {
return LlmAgent.builder()
.name("patent-search-agent")
.description("Patent Search agent")
.model("gemini-2.0-flash-001") // Specify your desired Gemini model
.instruction(
"""
You are a helpful patent search assistant capable of 2 things:
// ... complete instructions ...
""")
.tools(searchTool, explainTool)
.outputKey("patents") // Key to store tool output in session state
.build();
}
// --- Tool: Get Patents ---
public static Map<String, String> getPatents(
@Schema(name="searchText",description = "The search text for which the user wants to find matching patents")
String searchText) {
try {
String patentsJson = vectorSearch(searchText); // Calls our Cloud Run Function
return Map.of("status", "success", "report", patentsJson);
} catch (Exception e) {
// Log error
return Map.of("status", "error", "report", "Error fetching patents.");
}
}
// --- Tool: Explain Patent (Leveraging InvocationContext) ---
public static Map<String, String> explainPatent(
@Schema(name="patentId",description = "The patent id for which the user wants to get more explanation for, from the database")
String patentId,
@Schema(name="ctx",description = "The list of patent abstracts from the database from which the user can pick the one to get more explanation for")
InvocationContext ctx) { // Note the InvocationContext
try {
// Retrieve previous patent search results from session state
String previousResults = (String) ctx.session().state().get("patents");
if (previousResults != null && !previousResults.isEmpty()) {
// Logic to find the specific patent abstract from 'previousResults' by 'patentId'
String[] patentEntries = previousResults.split("\n\n\n\n");
for (String entry : patentEntries) {
if (entry.contains(patentId)) { // Simplified check
// The agent will then use its instructions to summarize this 'report'
return Map.of("status", "success", "report", entry);
}
}
}
return Map.of("status", "error", "report", "Patent ID not found in previous search.");
} catch (Exception e) {
// Log error
return Map.of("status", "error", "report", "Error explaining patent.");
}
}
public static void main(String[] args) throws Exception {
InMemoryRunner runner = new InMemoryRunner(ROOT_AGENT);
// ... (Session creation and main input loop - shown in your source)
}
}
কী ADK জাভা কোড উপাদান হাইলাইট করা হয়েছে:
- LlmAgent.builder(): আপনার এজেন্ট কনফিগার করার জন্য সাবলীল API।
- .instruction(...): কখন কোন টুল ব্যবহার করতে হবে তা সহ LLM-এর জন্য মূল প্রম্পট এবং নির্দেশিকা প্রদান করে।
- FunctionTool.create(App.class, "methodName"): সহজে আপনার জাভা পদ্ধতিগুলিকে এজেন্টের সাহায্য করতে পারে এমন সরঞ্জাম হিসাবে নিবন্ধন করে৷ পদ্ধতির নাম স্ট্রিং অবশ্যই একটি প্রকৃত পাবলিক স্ট্যাটিক পদ্ধতির সাথে মেলে।
- @Schema(description = ...): টুল প্যারামিটার টীকা করে, LLM কে বুঝতে সাহায্য করে যে প্রতিটি টুল কি ইনপুট আশা করে। এই বিবরণটি সঠিক টুল নির্বাচন এবং পরামিতি পূরণের জন্য অত্যন্ত গুরুত্বপূর্ণ।
- InvocationContext ctx: সেশন স্টেট (ctx.session().state()), ব্যবহারকারীর তথ্য এবং আরও অনেক কিছুতে অ্যাক্সেস প্রদান করে টুল পদ্ধতিতে স্বয়ংক্রিয়ভাবে পাস করা হয়।
- .outputKey("patents"): যখন একটি টুল ডেটা ফেরত দেয়, তখন ADK স্বয়ংক্রিয়ভাবে এটিকে এই কী-এর অধীনে সেশন স্টেটে সংরক্ষণ করতে পারে। এইভাবে ব্যাখ্যা করে পেটেন্ট getPatents থেকে ফলাফলগুলি অ্যাক্সেস করতে পারে।
- VECTOR_SEARCH_ENDPOINT: এটি একটি ভেরিয়েবল যা পেটেন্ট অনুসন্ধান ব্যবহারের ক্ষেত্রে ব্যবহারকারীর প্রাসঙ্গিক প্রশ্নোত্তরের জন্য মূল কার্যকরী যুক্তি ধারণ করে।
- অ্যাকশন আইটেম এখানে: পূর্ববর্তী বিভাগ থেকে জাভা ক্লাউড রান ফাংশন পদক্ষেপটি বাস্তবায়ন করার পরে আপনাকে একটি আপডেট করা ডিপ্লোয়েড এন্ডপয়েন্ট মান সেট করতে হবে।
- searchTool : এটি ব্যবহারকারীর সার্চ টেক্সটের জন্য পেটেন্ট ডাটাবেস থেকে প্রাসঙ্গিকভাবে প্রাসঙ্গিক পেটেন্ট মিল খুঁজে পেতে ব্যবহারকারীর সাথে জড়িত।
- ব্যাখ্যা টুল : এটি ব্যবহারকারীকে গভীর-ডাইভ করার জন্য একটি নির্দিষ্ট পেটেন্টের জন্য জিজ্ঞাসা করে। তারপর এটি পেটেন্ট বিমূর্ত সংক্ষিপ্ত করে এবং এটি আছে পেটেন্ট বিবরণ উপর ভিত্তি করে ব্যবহারকারীর কাছ থেকে আরো প্রশ্নের উত্তর গোড়ালি হয়.
গুরুত্বপূর্ণ দ্রষ্টব্য: আপনার নিয়োজিত CRF এন্ডপয়েন্টের সাথে VECTOR_SEARCH_ENDPOINT ভেরিয়েবল প্রতিস্থাপন করা নিশ্চিত করুন৷
স্টেটফুল ইন্টারঅ্যাকশনের জন্য Invocation Context ব্যবহার করা
দরকারী এজেন্ট তৈরির জন্য একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল একটি কথোপকথনের একাধিক মোড় জুড়ে রাষ্ট্র পরিচালনা করা। ADK-এর InvocationContext এটিকে সহজবোধ্য করে তোলে।
আমাদের App.java এ:
- যখন initAgent() সংজ্ঞায়িত করা হয়, তখন আমরা .outputKey("patents") ব্যবহার করি। এটি ADK কে বলে যে যখন একটি টুল (যেমন getPatents) তার রিপোর্ট ক্ষেত্রে ডেটা ফেরত দেয়, তখন সেই ডেটা কী "পেটেন্ট" এর অধীনে সেশন স্টেটে সংরক্ষণ করা উচিত।
- ব্যাখ্যাপ্যাটেন্ট টুল পদ্ধতিতে, আমরা InvocationContext ctx ইনজেক্ট করি:
public static Map<String, String> explainPatent(
@Schema(description = "...") String patentId, InvocationContext ctx) {
String previousResults = (String) ctx.session().state().get("patents");
// ... use previousResults ...
}
এটি ব্যাখ্যা প্যাটেন্ট টুলটিকে পূর্ববর্তী পালাক্রমে getPatents টুল দ্বারা আনা পেটেন্ট তালিকা অ্যাক্সেস করার অনুমতি দেয়, কথোপকথনকে রাষ্ট্রীয় এবং সুসঙ্গত করে তোলে।
9. স্থানীয় CLI টেস্টিং
পরিবেশের ভেরিয়েবলের সংজ্ঞা দাও
আপনাকে দুটি পরিবেশের ভেরিয়েবল রপ্তানি করতে হবে:
- একটি মিথুন কী যা আপনি এআই স্টুডিও থেকে পেতে পারেন:
এটি করতে, https://aistudio.google.com/apikey এ যান এবং আপনার সক্রিয় Google ক্লাউড প্রকল্পের জন্য API কী পান যেটিতে আপনি এই অ্যাপ্লিকেশনটি প্রয়োগ করছেন এবং কীটি কোথাও সংরক্ষণ করুন:
- একবার আপনি কীটি পেয়ে গেলে, ক্লাউড শেল টার্মিনাল খুলুন এবং নতুন ডিরেক্টরিতে যান যা আমরা এইমাত্র নিম্নলিখিত কমান্ডটি চালিয়ে adk-এজেন্ট তৈরি করেছি:
cd adk-agents
- আমরা এই সময় Vertex AI ব্যবহার করছি না তা নির্দিষ্ট করার জন্য একটি পরিবর্তনশীল।
export GOOGLE_GENAI_USE_VERTEXAI=FALSE
export GOOGLE_API_KEY=AIzaSyDF...
- CLI-তে আপনার প্রথম এজেন্ট চালান
এই প্রথম এজেন্টটি চালু করতে, আপনার টার্মিনালে নিম্নলিখিত Maven কমান্ডটি ব্যবহার করুন:
mvn compile exec:java -DmainClass="agents.App"
আপনি আপনার টার্মিনালে এজেন্ট থেকে ইন্টারেক্টিভ প্রতিক্রিয়া দেখতে পাবেন।
10. ক্লাউড রানে স্থাপন করা হচ্ছে
আপনার ADK জাভা এজেন্টকে ক্লাউড রানে মোতায়েন করা অন্য কোনো জাভা অ্যাপ্লিকেশন মোতায়েন করার অনুরূপ:
- ডকারফাইল: আপনার জাভা অ্যাপ্লিকেশন প্যাকেজ করার জন্য একটি ডকারফাইল তৈরি করুন।
- বিল্ড এবং পুশ ডকার ইমেজ: গুগল ক্লাউড বিল্ড এবং আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করুন।
- আপনি উপরের পদক্ষেপটি সম্পাদন করতে পারেন এবং শুধুমাত্র একটি কমান্ডে ক্লাউড রানে স্থাপন করতে পারেন:
gcloud run deploy --source . --set-env-vars GOOGLE_API_KEY=<<Your_Gemini_Key>>
একইভাবে, আপনি আপনার জাভা ক্লাউড রান ফাংশন (gcfv2.PatentSearch) স্থাপন করবেন। বিকল্পভাবে, আপনি সরাসরি ক্লাউড রান ফাংশন কনসোল থেকে ডাটাবেস লজিকের জন্য জাভা ক্লাউড রান ফাংশন তৈরি এবং স্থাপন করতে পারেন।
11. ওয়েব UI দিয়ে পরীক্ষা করা হচ্ছে
আপনার এজেন্টের স্থানীয় পরীক্ষা এবং ডিবাগিংয়ের জন্য ADK একটি সহজ ওয়েব UI নিয়ে আসে। আপনি যখন আপনার App.java স্থানীয়ভাবে চালান (যেমন, mvn exec:java -Dexec.mainClass="agents.App" যদি কনফিগার করা থাকে, বা শুধুমাত্র প্রধান পদ্ধতিটি চালান), তখন ADK সাধারণত একটি স্থানীয় ওয়েব সার্ভার শুরু করে।
ADK ওয়েব UI আপনাকে অনুমতি দেয়:
- আপনার এজেন্টকে বার্তা পাঠান।
- ইভেন্টগুলি দেখুন (ব্যবহারকারীর বার্তা, টুল কল, টুল প্রতিক্রিয়া, এলএলএম প্রতিক্রিয়া)।
- অধিবেশন অবস্থা পরিদর্শন.
- লগ এবং ট্রেস দেখুন.
আপনার এজেন্ট কীভাবে অনুরোধগুলি প্রক্রিয়া করে এবং এর সরঞ্জামগুলি ব্যবহার করে তা বোঝার জন্য এটি বিকাশের সময় অমূল্য। এটি অনুমান করে যে pom.xml-এ আপনার mainClass com.google.adk.web.AdkWebServer এ সেট করা আছে এবং আপনার এজেন্ট এটির সাথে নিবন্ধিত, অথবা আপনি একটি স্থানীয় পরীক্ষা চালাচ্ছেন যা এটি প্রকাশ করে।
কনসোল ইনপুটের জন্য InMemoryRunner এবং Scanner দিয়ে আপনার App.java চালানোর সময়, আপনি মূল এজেন্ট যুক্তি পরীক্ষা করছেন। ওয়েব UI হল আরও ভিজ্যুয়াল ডিবাগিং অভিজ্ঞতার জন্য একটি পৃথক উপাদান, প্রায়শই যখন ADK আপনার এজেন্টকে HTTP এর মাধ্যমে পরিবেশন করে তখন ব্যবহার করা হয়।
আপনি স্প্রিংবুট স্থানীয় সার্ভার চালু করতে আপনার রুট ডিরেক্টরি থেকে নিম্নলিখিত Maven কমান্ড ব্যবহার করতে পারেন:
mvn compile exec:java -Dexec.args="--adk.agents.source-dir=src/main/java/ --logging.level.com.google.adk.dev=TRACE --logging.level.com.google.adk.demo.agents=TRACE"
উপরের কমান্ড আউটপুট দিয়ে ইউআরএলে ইন্টারফেস প্রায়ই অ্যাক্সেসযোগ্য। যদি এটি ক্লাউড রান স্থাপন করা হয় , তাহলে আপনি ক্লাউড রান স্থাপন করা লিঙ্ক থেকে এটি অ্যাক্সেস করতে সক্ষম হবেন।
আপনি একটি ইন্টারেক্টিভ ইন্টারফেসে ফলাফল দেখতে সক্ষম হওয়া উচিত।
আমাদের নিযুক্ত পেটেন্ট এজেন্টের জন্য নীচের ভিডিওটি দেখুন:
AlloyDB ইনলাইন সার্চ এবং রিকল ইভালুয়েশন সহ একটি মান নিয়ন্ত্রিত পেটেন্ট এজেন্টের ডেমো!
12. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Google ক্লাউড কনসোলে, https://console.cloud.google.com/cloud-resource-manager?utm_campaign=CDR_0x1d2a42f5_default_b419133749&utm_medium=external&utm_source=blog- এ যান
- https://console.cloud.google.com/cloud-resource-manager?utm_campaign=CDR_0x1d2a42f5_default_b419133749&utm_medium=external&utm_source=blog পৃষ্ঠা।
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।
13. অভিনন্দন
অভিনন্দন! আপনি সফলভাবে জাভাতে আপনার পেটেন্ট অ্যানালাইসিস এজেন্ট তৈরি করেছেন ADK, https://cloud.google.com/alloydb/docs?utm_campaign=CDR_0x1d2a42f5_default_b419133749&utm_medium=external&utm=external&utm , we'veector, Vertex AI ,Vervex-এ নেওয়া প্রাসঙ্গিক মিল অনুসন্ধানগুলিকে এত রূপান্তরকারী, দক্ষ এবং সত্যিকার অর্থে চালিত করার জন্য একটি বিশাল লাফানো।
আজই শুরু করুন!
ADK ডকুমেন্টেশন: [অফিসিয়াল ADK জাভা ডক্সের লিঙ্ক]
পেটেন্ট বিশ্লেষণ এজেন্ট সোর্স কোড: [আপনার (এখন সর্বজনীন) গিটহাব রেপোতে লিঙ্ক করুন]
জাভা নমুনা এজেন্ট: [adk-নমুনা রেপো লিঙ্ক]
ADK কমিউনিটিতে যোগ দিন: https://www.reddit.com/r/agentdevelopmentkit/
শুভ এজেন্ট ভবন!