১. ভূমিকা
সর্বশেষ হালনাগাদ: ২৭-১১-২০২৩
জেনারেটিভ এআই কী
জেনারেটিভ এআই বা জেনারেটিভ কৃত্রিম বুদ্ধিমত্তা বলতে কৃত্রিম বুদ্ধিমত্তার ব্যবহার করে নতুন বিষয়বস্তু, যেমন পাঠ্য, ছবি, সঙ্গীত, অডিও এবং ভিডিও তৈরি করাকে বোঝায়।
জেনারেটিভ এআই ফাউন্ডেশন মডেল (বৃহৎ এআই মডেল) দ্বারা চালিত হয়, যা মাল্টি-টাস্কিং করতে পারে এবং সারসংক্ষেপ তৈরি, প্রশ্নোত্তর, শ্রেণিবিন্যাসসহ আরও অনেক ধরনের কাজ স্বতঃস্ফূর্তভাবে সম্পাদন করতে পারে। এছাড়াও, ন্যূনতম প্রশিক্ষণের মাধ্যমে খুব অল্প উদাহরণ ডেটা ব্যবহার করে ফাউন্ডেশন মডেলগুলোকে নির্দিষ্ট ব্যবহারের জন্য অভিযোজিত করা যায়।
জেনারেটিভ এআই কীভাবে কাজ করে?
জেনারেটিভ এআই একটি এমএল (মেশিন লার্নিং) মডেল ব্যবহার করে মানুষের তৈরি কন্টেন্টের ডেটাসেটের মধ্যেকার প্যাটার্ন ও সম্পর্কগুলো শেখে। এরপর এটি সেই শেখা প্যাটার্নগুলো ব্যবহার করে নতুন কন্টেন্ট তৈরি করে।
একটি জেনারেটিভ এআই মডেলকে প্রশিক্ষণ দেওয়ার সবচেয়ে প্রচলিত উপায় হলো সুপারভাইজড লার্নিং ব্যবহার করা — এক্ষেত্রে মডেলটিকে মানুষের তৈরি এক সেট কন্টেন্ট এবং তার সাথে সম্পর্কিত লেবেল দেওয়া হয়। এরপর এটি মানুষের তৈরি কন্টেন্টের অনুরূপ এবং একই লেবেলযুক্ত কন্টেন্ট তৈরি করতে শেখে।
জেনারেটিভ এআই-এর সাধারণ প্রয়োগগুলো কী কী?
জেনারেটিভ এআই বিপুল পরিমাণ কন্টেন্ট প্রক্রিয়াজাত করে টেক্সট, ছবি এবং ব্যবহারকারী-বান্ধব ফরম্যাটের মাধ্যমে অন্তর্দৃষ্টি ও উত্তর তৈরি করে। জেনারেটিভ এআই নিম্নলিখিত ক্ষেত্রে ব্যবহার করা যেতে পারে:
- উন্নত চ্যাট এবং সার্চ অভিজ্ঞতার মাধ্যমে গ্রাহক মিথস্ক্রিয়া উন্নত করুন
- কথোপকথনমূলক ইন্টারফেস এবং সারসংক্ষেপের মাধ্যমে বিপুল পরিমাণ অসংগঠিত ডেটা অন্বেষণ করুন।
- প্রস্তাবনা অনুরোধের (RFP) উত্তর দেওয়া, পাঁচটি ভাষায় বিপণন সামগ্রী স্থানীয়করণ করা, এবং সম্মতি যাচাইয়ের মতো পুনরাবৃত্তিমূলক কাজে সহায়তা করা, এবং আরও অনেক কিছু।
গুগল ক্লাউডের কী কী জেনারেটিভ এআই পরিষেবা রয়েছে?
Vertex AI-এর সাহায্যে, আপনার অ্যাপ্লিকেশনগুলিতে ফাউন্ডেশন মডেলগুলির সাথে ইন্টারঅ্যাক্ট করুন, সেগুলিকে কাস্টমাইজ করুন এবং এম্বেড করুন — এর জন্য খুব সামান্য বা কোনো ML দক্ষতার প্রয়োজন নেই। Model Garden- এ ফাউন্ডেশন মডেলগুলি অ্যাক্সেস করুন, Generative AI Studio- এর একটি সহজ UI-এর মাধ্যমে মডেলগুলি টিউন করুন, অথবা একটি ডেটা সায়েন্স নোটবুকে মডেলগুলি ব্যবহার করুন।
ভার্টেক্স এআই সার্চ অ্যান্ড কনভারসেশন ডেভেলপারদের জন্য জেনারেটিভ এআই চালিত সার্চ ইঞ্জিন এবং চ্যাটবট তৈরির দ্রুততম উপায় প্রদান করে।
আর, ডুয়েট এআই হলো আপনার এআই-চালিত সহযোগী, যা গুগল ক্লাউড এবং আইডিই জুড়ে উপলব্ধ থেকে আপনাকে আরও বেশি কাজ দ্রুত সম্পন্ন করতে সাহায্য করে।
এই কোডল্যাবটি কীসের উপর আলোকপাত করছে?
এই কোডল্যাবটি গুগল ক্লাউড ভার্টেক্স এআই-তে হোস্ট করা PaLM 2 লার্জ ল্যাঙ্গুয়েজ মডেল (LLM)-এর উপর আলোকপাত করে, যা সমস্ত মেশিন লার্নিং পণ্য এবং পরিষেবা অন্তর্ভুক্ত করে।
আপনি LangChain4J LLM ফ্রেমওয়ার্ক অর্কেস্ট্রেটরের সাথে একত্রে PaLM API-এর সাথে ইন্টারঅ্যাক্ট করার জন্য জাভা ব্যবহার করবেন। প্রশ্নোত্তর, ধারণা তৈরি, এনটিটি ও স্ট্রাকচার্ড কন্টেন্ট এক্সট্র্যাকশন এবং সারসংক্ষেপ তৈরির জন্য LLM-এর সুবিধা নিতে আপনি বিভিন্ন বাস্তব উদাহরণের মধ্য দিয়ে যাবেন।
LangChain4J ফ্রেমওয়ার্ক সম্পর্কে আমাকে আরও বলুন!
LangChain4J ফ্রেমওয়ার্কটি আপনার জাভা অ্যাপ্লিকেশনগুলিতে বৃহৎ ল্যাঙ্গুয়েজ মডেলগুলিকে একীভূত করার জন্য একটি ওপেন সোর্স লাইব্রেরি। এটি স্বয়ং LLM-এর মতো বিভিন্ন উপাদানকে সমন্বিত করে, এবং এর পাশাপাশি ভেক্টর ডেটাবেস (অর্থগত অনুসন্ধানের জন্য), ডকুমেন্ট লোডার ও স্প্লিটার (ডকুমেন্ট বিশ্লেষণ ও তা থেকে শেখার জন্য), আউটপুট পার্সার এবং আরও অনেক টুলের মতো অন্যান্য সরঞ্জামও ব্যবহার করে।

আপনি যা শিখবেন
- PaLM এবং LangChain4J ব্যবহার করার জন্য কীভাবে একটি জাভা প্রজেক্ট সেটআপ করবেন
- কন্টেন্ট তৈরি করতে এবং প্রশ্নের উত্তর দিতে PaLM টেক্সট মডেলে কীভাবে আপনার প্রথম কলটি করবেন
- অসংগঠিত কন্টেন্ট থেকে কীভাবে দরকারি তথ্য বের করা যায় (এনটিটি বা কীওয়ার্ড নিষ্কাশন, JSON ফরম্যাটে আউটপুট)
- অল্প কয়েকটি প্রম্পটিং শটের সাহায্যে কীভাবে কন্টেন্ট ক্লাসিফিকেশন বা সেন্টিমেন্ট অ্যানালাইসিস করা যায়
আপনার যা যা লাগবে
- জাভা প্রোগ্রামিং ভাষার জ্ঞান
- একটি গুগল ক্লাউড প্রকল্প
- ক্রোম বা ফায়ারফক্সের মতো একটি ব্রাউজার
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
ক্লাউড শেল শুরু করুন
যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন।
.

আপনি যদি প্রথমবারের মতো ক্লাউড শেল চালু করেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন আপনার সামনে আসবে। যদি একটি মধ্যবর্তী স্ক্রিন আসে, তাহলে 'চালিয়ে যান' (Continue) এ ক্লিক করুন।

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

এই ভার্চুয়াল মেশিনটিতে প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই একটি ব্রাউজার দিয়ে করা সম্ভব।
ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
৩. আপনার ডেভেলপমেন্ট পরিবেশ প্রস্তুত করা
এই কোডল্যাবে, আপনারা ক্লাউড শেল টার্মিনাল এবং কোড এডিটর ব্যবহার করে আপনাদের জাভা প্রোগ্রামগুলো তৈরি করবেন।
ভার্টেক্স এআই এপিআই সক্রিয় করুন
- গুগল ক্লাউড কনসোলে, নিশ্চিত করুন যে আপনার প্রোজেক্টের নামটি কনসোলের শীর্ষে প্রদর্শিত হচ্ছে। যদি তা না হয়, তাহলে প্রোজেক্ট সিলেক্টর খোলার জন্য ‘সিলেক্ট এ প্রোজেক্ট’-এ ক্লিক করুন এবং আপনার কাঙ্ক্ষিত প্রোজেক্টটি নির্বাচন করুন।
- আপনি যদি গুগল ক্লাউড কনসোলের ভার্টেক্স এআই অংশে না থাকেন, তাহলে নিম্নলিখিতগুলি করুন:
- সার্চ- এ, Vertex AI লিখুন, তারপর ফিরে আসুন।
- অনুসন্ধানের ফলাফলে, Vertex AI-তে ক্লিক করুন। Vertex AI ড্যাশবোর্ডটি প্রদর্শিত হবে।
- Vertex AI ড্যাশবোর্ডে ‘Enable All Recommended APIs’-এ ক্লিক করুন।
এর মাধ্যমে বেশ কয়েকটি এপিআই (API) চালু করা যাবে, কিন্তু কোডল্যাবের জন্য সবচেয়ে গুরুত্বপূর্ণটি হলো aiplatform.googleapis.com , যেটি আপনি ক্লাউড শেল টার্মিনালে কমান্ড-লাইন থেকেও নিম্নলিখিত কমান্ডটি চালিয়ে চালু করতে পারেন:
$ gcloud services enable aiplatform.googleapis.com
গ্রেডল দিয়ে প্রোজেক্টের কাঠামো তৈরি করা
আপনার জাভা কোডের উদাহরণগুলো বিল্ড করার জন্য, আপনি গ্রেডল বিল্ড টুল এবং জাভার ভার্সন ১৭ ব্যবহার করবেন। গ্রেডল দিয়ে আপনার প্রজেক্ট সেট আপ করতে, ক্লাউড শেল টার্মিনালে একটি ডিরেক্টরি তৈরি করুন (এখানে, palm-workshop ), এবং সেই ডিরেক্টরিতে gradle init কমান্ডটি চালান:
$ mkdir palm-workshop $ cd palm-workshop $ gradle init Select type of project to generate: 1: basic 2: application 3: library 4: Gradle plugin Enter selection (default: basic) [1..4] 2 Select implementation language: 1: C++ 2: Groovy 3: Java 4: Kotlin 5: Scala 6: Swift Enter selection (default: Java) [1..6] 3 Split functionality across multiple subprojects?: 1: no - only one application project 2: yes - application and library projects Enter selection (default: no - only one application project) [1..2] 1 Select build script DSL: 1: Groovy 2: Kotlin Enter selection (default: Groovy) [1..2] 1 Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] Select test framework: 1: JUnit 4 2: TestNG 3: Spock 4: JUnit Jupiter Enter selection (default: JUnit Jupiter) [1..4] 4 Project name (default: palm-workshop): Source package (default: palm.workshop): > Task :init Get more help with your project: https://docs.gradle.org/7.4/samples/sample_building_java_applications.html BUILD SUCCESSFUL in 51s 2 actionable tasks: 2 executed
আপনি একটি অ্যাপ্লিকেশন তৈরি করবেন (বিকল্প ২), জাভা ভাষা ব্যবহার করে (বিকল্প ৩), সাবপ্রজেক্ট ব্যবহার না করে (বিকল্প ১), বিল্ড ফাইলের জন্য গ্রুভি সিনট্যাক্স ব্যবহার করে (বিকল্প ১), নতুন বিল্ড ফিচার ব্যবহার না করে (বিকল্প না), JUnit Jupiter দিয়ে টেস্ট তৈরি করে (বিকল্প ৪), এবং প্রজেক্টের নাম হিসেবে আপনি palm-workshop ব্যবহার করতে পারেন, একইভাবে সোর্স প্যাকেজের জন্য আপনি palm.workshop ব্যবহার করতে পারেন।
প্রকল্পের কাঠামোটি নিম্নরূপ হবে:
├── gradle
│ └── ...
├── gradlew
├── gradlew.bat
├── settings.gradle
└── app
├── build.gradle
└── src
├── main
│ └── java
│ └── palm
│ └── workshop
│ └── App.java
└── test
└── ...
প্রয়োজনীয় কিছু ডিপেন্ডেন্সি যোগ করার জন্য চলুন app/build.gradle ফাইলটি আপডেট করি। যদি guava ডিপেন্ডেন্সিটি থাকে, তবে আপনি সেটি সরিয়ে ফেলতে পারেন এবং এর পরিবর্তে LangChain4J প্রোজেক্টের ডিপেন্ডেন্সি ও লগিং লাইব্রেরি যোগ করতে পারেন, যাতে লগার অনুপস্থিত থাকার বিরক্তিকর বার্তা এড়ানো যায়।
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// Logging library
implementation 'org.slf4j:slf4j-jdk14:2.0.9'
// This dependency is used by the application.
implementation 'dev.langchain4j:langchain4j-vertex-ai:0.24.0'
implementation 'dev.langchain4j:langchain4j:0.24.0'
}
LangChain4J-এর জন্য ২টি নির্ভরতা রয়েছে:
- মূল প্রকল্পের উপর একটি,
- এবং ডেডিকেটেড ভার্টেক্স এআই মডিউলটির জন্য একটি।
আমাদের প্রোগ্রামগুলো কম্পাইল ও রান করার জন্য জাভা ১৭ ব্যবহার করতে, plugins {} ব্লকের নিচে নিম্নলিখিত ব্লকটি যোগ করুন:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
আরও একটি পরিবর্তন করতে হবে: app/build.gradle এর application ব্লকটি আপডেট করুন, যাতে ব্যবহারকারীরা বিল্ড টুল চালু করার সময় কমান্ড-লাইনে চালানোর জন্য মেইন ক্লাসটিকে ওভাররাইড করতে পারেন।
application {
mainClass = providers.systemProperty('javaMainClass')
.orElse('palm.workshop.App')
}
আপনার অ্যাপ্লিকেশনটি চালানোর জন্য বিল্ড ফাইলটি প্রস্তুত কিনা তা পরীক্ষা করতে, আপনি ডিফল্ট মেইন ক্লাসটি চালাতে পারেন, যা একটি সাধারণ Hello World! বার্তা প্রিন্ট করে:
$ ./gradlew run -DjavaMainClass=palm.workshop.App > Task :app:run Hello World! BUILD SUCCESSFUL in 3s 2 actionable tasks: 2 executed
এখন আপনি LangChain4J প্রজেক্টটি ব্যবহার করে PaLM বৃহৎ ভাষার টেক্সট মডেল দিয়ে প্রোগ্রামিং করার জন্য প্রস্তুত!
তথ্যসূত্র হিসেবে, সম্পূর্ণ app/build.gradle বিল্ড ফাইলটি এখন দেখতে এইরকম হওয়া উচিত:
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'application'
}
java {
toolchain {
// Ensure we compile and run on Java 17
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// This dependency is used by the application.
implementation 'dev.langchain4j:langchain4j-vertex-ai:0.24.0'
implementation 'dev.langchain4j:langchain4j:0.24.0'
implementation 'org.slf4j:slf4j-jdk14:2.0.9'
}
application {
mainClass = providers.systemProperty('javaMainClass').orElse('palm.workshop.App')
}
tasks.named('test') {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}
৪. PaLM-এর টেক্সট মডেলে আপনার প্রথম কল করা
প্রজেক্টটি এখন সঠিকভাবে সেট আপ করা হয়ে গেছে, এবার PaLM API-কে কল করার পালা।
app/src/main/java/palm/workshop ডিরেক্টরিতে (ডিফল্ট App.java ক্লাসের পাশে) TextPrompts.java নামে একটি নতুন ক্লাস তৈরি করুন এবং নিম্নলিখিত বিষয়বস্তু টাইপ করুন:
package palm.workshop;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.vertexai.VertexAiLanguageModel;
public class TextPrompts {
public static void main(String[] args) {
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(500)
.build();
Response<String> response = model.generate("What are large language models?");
System.out.println(response.content());
}
}
এই প্রথম উদাহরণটিতে, আপনাকে Response ক্লাস এবং PaLM-এর জন্য Vertex AI ল্যাঙ্গুয়েজ মডেলটি ইম্পোর্ট করতে হবে।
এরপরে, main মেথডে, আপনি VertexAiLanguageModel এর বিল্ডার ব্যবহার করে ল্যাঙ্গুয়েজ মডেলটি কনফিগার করবেন, যা নিম্নরূপে নির্দিষ্ট করতে হবে:
- শেষ বিন্দু,
- প্রকল্পটি,
- অঞ্চলটি,
- প্রকাশক,
- এবং মডেলের নাম (
text-bison@001)।
এখন যেহেতু ল্যাঙ্গুয়েজ মডেলটি প্রস্তুত, আপনি generate() মেথডটি কল করে আপনার 'প্রম্পট' (অর্থাৎ, আপনার প্রশ্ন বা LLM-কে পাঠানোর জন্য নির্দেশাবলী) পাস করতে পারেন। এখানে, আপনি LLM কী, সে সম্পর্কে একটি সহজ প্রশ্ন জিজ্ঞাসা করবেন। তবে ভিন্ন ভিন্ন প্রশ্ন বা কাজ চেষ্টা করার জন্য এই প্রম্পটটি নির্দ্বিধায় পরিবর্তন করতে পারেন।
এই ক্লাসটি চালানোর জন্য, ক্লাউড শেল টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:
./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
আপনি এর মতো একটি আউটপুট দেখতে পাবেন:
Large language models (LLMs) are artificial intelligence systems that can understand and generate human language. They are trained on massive datasets of text and code, and can learn to perform a wide variety of tasks, such as translating languages, writing different kinds of creative content, and answering your questions in an informative way. LLMs are still under development, but they have the potential to revolutionize many industries. For example, they could be used to create more accurate and personalized customer service experiences, to help doctors diagnose and treat diseases, and to develop new forms of creative expression. However, LLMs also raise a number of ethical concerns. For example, they could be used to create fake news and propaganda, to manipulate people's behavior, and to invade people's privacy. It is important to carefully consider the potential risks and benefits of LLMs before they are widely used. Here are some of the key features of LLMs: * They are trained on massive datasets of text and code. * They can learn to perform a wide variety of tasks, such as translating languages, writing different kinds of creative content, and answering your questions in an informative way. * They are still under development, but they have the potential to revolutionize many industries. * They raise a number of ethical concerns, such as the potential for fake news, propaganda, and invasion of privacy.
VertexAILanguageModel বিল্ডার আপনাকে ঐচ্ছিক প্যারামিটার নির্ধারণ করার সুযোগ দেয়, যেগুলোর কিছু ডিফল্ট মান আগে থেকেই দেওয়া থাকে এবং আপনি সেগুলো পরিবর্তন করতে পারেন। এখানে কিছু উদাহরণ দেওয়া হলো:
-
.temperature(0.2)— প্রতিক্রিয়াটি কতটা সৃজনশীল হবে তা নির্ধারণ করতে (0 মানে কম সৃজনশীল এবং প্রায়শই তথ্যভিত্তিক, আর 1 মানে আরও সৃজনশীল আউটপুট) -
.maxOutputTokens(50)— উদাহরণে, ৫০০টি টোকেন অনুরোধ করা হয়েছিল (৩টি টোকেন প্রায় ৪টি শব্দের সমান), এটি নির্ভর করে আপনি তৈরি করা উত্তরটি কতটা দীর্ঘ করতে চান তার উপর। -
.topK(20)— টেক্সট কমপ্লিশনের জন্য সর্বাধিক সংখ্যক সম্ভাব্য শব্দ (১ থেকে ৪০ এর মধ্যে) থেকে এলোমেলোভাবে একটি শব্দ নির্বাচন করতে। -
.topP(0.95)— সেই সম্ভাব্য শব্দগুলো নির্বাচন করার জন্য যাদের মোট সম্ভাবনার যোগফল ঐ ফ্লোটিং পয়েন্ট সংখ্যাটির (০ এবং ১ এর মধ্যে) সমান হয়। -
.maxRetries(3)— যদি আপনার প্রতিবার অনুরোধ পাঠানোর কোটা পূর্ণ হয়ে যায়, তাহলে আপনি মডেলটিকে উদাহরণস্বরূপ ৩ বার কলটি পুনরায় চেষ্টা করতে বলতে পারেন।
বৃহৎ ল্যাঙ্গুয়েজ মডেলগুলো অত্যন্ত শক্তিশালী এবং জটিল প্রশ্নের উত্তর দিতে পারে, সেইসাথে বিভিন্ন ধরনের আকর্ষণীয় কাজ সামলাতে সক্ষম। পরবর্তী অংশে, আমরা একটি দরকারি কাজ দেখব: টেক্সট থেকে স্ট্রাকচার্ড ডেটা বের করা ।
৫. অসংগঠিত পাঠ্য থেকে তথ্য আহরণ
পূর্ববর্তী অংশে, আপনি কিছু টেক্সট আউটপুট তৈরি করেছেন। আপনি যদি এই আউটপুটটি সরাসরি আপনার ব্যবহারকারীদের দেখাতে চান, তবে তা ঠিক আছে। কিন্তু আপনি যদি এই আউটপুটে উল্লিখিত ডেটা পুনরুদ্ধার করতে চান, তবে সেই অসংগঠিত টেক্সট থেকে তথ্যটি কীভাবে বের করবেন?
ধরা যাক, আপনি কোনো ব্যক্তির জীবনী বা বিবরণ থেকে তার নাম এবং বয়স বের করতে চান। আপনি প্রম্পটটিকে নিম্নোক্তভাবে পরিবর্তন করে বৃহৎ ল্যাঙ্গুয়েজ মডেলকে JSON ডেটা স্ট্রাকচার তৈরি করার নির্দেশ দিতে পারেন (এটিকে সাধারণত "প্রম্পট ইঞ্জিনিয়ারিং" বলা হয়):
Extract the name and age of the person described below.
Return a JSON document with a "name" and an "age" property,
following this structure: {"name": "John Doe", "age": 34}
Return only JSON, without any markdown markup surrounding it.
Here is the document describing the person:
---
Anna is a 23 year old artist based in Brooklyn, New York. She was
born and raised in the suburbs of Chicago, where she developed a
love for art at a young age. She attended the School of the Art
Institute of Chicago, where she studied painting and drawing.
After graduating, she moved to New York City to pursue her art career.
Anna's work is inspired by her personal experiences and observations
of the world around her. She often uses bright colors and bold lines
to create vibrant and energetic paintings. Her work has been
exhibited in galleries and museums in New York City and Chicago.
---
JSON:
উপরের সম্পূর্ণ টেক্সট প্রম্পটটি পাস করার জন্য TextPrompts ক্লাসের model.generate() কলটি পরিবর্তন করুন:
Response<String> response = model.generate("""
Extract the name and age of the person described below.
Return a JSON document with a "name" and an "age" property, \
following this structure: {"name": "John Doe", "age": 34}
Return only JSON, without any markdown markup surrounding it.
Here is the document describing the person:
---
Anna is a 23 year old artist based in Brooklyn, New York. She was born and
raised in the suburbs of Chicago, where she developed a love for art at a
young age. She attended the School of the Art Institute of Chicago, where
she studied painting and drawing. After graduating, she moved to New York
City to pursue her art career. Anna's work is inspired by her personal
experiences and observations of the world around her. She often uses bright
colors and bold lines to create vibrant and energetic paintings. Her work
has been exhibited in galleries and museums in New York City and Chicago.
---
JSON:
"""
);
আপনি যদি আমাদের TextPrompts ক্লাসে এই প্রম্পটটি চালান, তাহলে এটি নিম্নলিখিত JSON স্ট্রিংটি ফেরত দেবে, যা আপনি GSON লাইব্রেরির মতো একটি JSON পার্সার দিয়ে পার্স করতে পারবেন:
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
> Task :app:run
{"name": "Anna", "age": 23}
BUILD SUCCESSFUL in 24s
2 actionable tasks: 1 executed, 1 up-to-date
হ্যাঁ! অ্যানার বয়স ২৩!
৬. প্রম্পট টেমপ্লেট এবং কাঠামোগত প্রম্পট
প্রশ্নোত্তরের ঊর্ধ্বে
PaLM-এর মতো বৃহৎ ল্যাঙ্গুয়েজ মডেলগুলো প্রশ্নের উত্তর দেওয়ার জন্য শক্তিশালী, কিন্তু আপনি এগুলো আরও অনেক কাজের জন্য ব্যবহার করতে পারেন! উদাহরণস্বরূপ, Generative AI Studio- তে (অথবা TextPrompts ক্লাসটি পরিবর্তন করে) নিম্নলিখিত প্রম্পটগুলো চেষ্টা করে দেখুন। বড় হাতের অক্ষরে লেখা শব্দগুলো আপনার নিজের ধারণা দিয়ে পরিবর্তন করুন এবং সেগুলোর আউটপুট পরীক্ষা করে দেখুন:
- Translation — "নিম্নলিখিত বাক্যটি ফরাসি ভাষায় অনুবাদ করুন: YOUR_SENTENCE_HERE "
- সারসংক্ষেপ — "নিম্নলিখিত নথিটির একটি সারসংক্ষেপ প্রদান করুন: আপনার নথিটি পেস্ট করুন"
- সৃজনশীল সৃষ্টি — " কবিতার বিষয় নিয়ে একটি কবিতা লেখো"
- প্রোগ্রামিং — " PROGRAMMING_LANGUAGE- এ কীভাবে একটি ফিবোনাচ্চি ফাংশন লিখতে হয়?"
প্রম্পট টেমপ্লেট
আপনি যদি অনুবাদ, সারসংক্ষেপ, সৃজনশীল সৃষ্টি বা প্রোগ্রামিং কাজের জন্য উপরের প্রম্পটগুলো ব্যবহার করে থাকেন, তাহলে আপনি প্লেসহোল্ডার মানগুলোকে আপনার নিজের ধারণা দিয়ে প্রতিস্থাপন করেছেন। কিন্তু এই ধরনের স্ট্রিং পরিবর্তন করার পরিবর্তে, আপনি 'প্রম্পট টেমপ্লেট'- এর সুবিধাও নিতে পারেন, যা আপনাকে সেই প্লেসহোল্ডার মানগুলো নির্ধারণ করতে এবং পরবর্তীতে আপনার ডেটা দিয়ে খালি জায়গা পূরণ করতে দেয়।
চলুন, main() মেথডের সম্পূর্ণ কন্টেন্টকে নিচের কোড দিয়ে প্রতিস্থাপন করে একটি মজাদার ও সৃজনশীল প্রম্পট দেখে নেওয়া যাক:
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(300)
.build();
PromptTemplate promptTemplate = PromptTemplate.from("""
Create a recipe for a {{dish}} with the following ingredients: \
{{ingredients}}, and give it a name.
"""
);
Map<String, Object> variables = new HashMap<>();
variables.put("dish", "dessert");
variables.put("ingredients", "strawberries, chocolate, whipped cream");
Prompt prompt = promptTemplate.apply(variables);
Response<String> response = model.generate(prompt);
System.out.println(response.content());
এবং নিম্নলিখিত ইম্পোর্টগুলো যোগ করে:
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.input.PromptTemplate;
import java.util.HashMap;
import java.util.Map;
তারপর অ্যাপ্লিকেশনটি আবার চালান। আউটপুটটি নিচের মতো দেখতে হবে:
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts > Task :app:run **Strawberry Shortcake** Ingredients: * 1 pint strawberries, hulled and sliced * 1/2 cup sugar * 1/4 cup cornstarch * 1/4 cup water * 1 tablespoon lemon juice * 1/2 cup heavy cream, whipped * 1/4 cup confectioners' sugar * 1/4 teaspoon vanilla extract * 6 graham cracker squares, crushed Instructions: 1. In a medium saucepan, combine the strawberries, sugar, cornstarch, water, and lemon juice. Bring to a boil over medium heat, stirring constantly. Reduce heat and simmer for 5 minutes, or until the sauce has thickened. 2. Remove from heat and let cool slightly. 3. In a large bowl, combine the whipped cream, confectioners' sugar, and vanilla extract. Beat until soft peaks form. 4. To assemble the shortcakes, place a graham cracker square on each of 6 dessert plates. Top with a scoop of whipped cream, then a spoonful of strawberry sauce. Repeat layers, ending with a graham cracker square. 5. Serve immediately. **Tips:** * For a more elegant presentation, you can use fresh strawberries instead of sliced strawberries. * If you don't have time to make your own whipped cream, you can use store-bought whipped cream.
সুস্বাদু!
প্রম্পট টেমপ্লেটের সাহায্যে, আপনি টেক্সট জেনারেশন মেথড কল করার আগে প্রয়োজনীয় প্যারামিটারগুলো সরবরাহ করতে পারেন। আপনার ব্যবহারকারীদের দেওয়া বিভিন্ন মানের জন্য ডেটা পাস করতে এবং প্রম্পট কাস্টমাইজ করার এটি একটি চমৎকার উপায়।
ক্লাসের নাম থেকেই বোঝা যায়, PromptTemplate ক্লাসটি একটি টেমপ্লেট প্রম্পট তৈরি করে, এবং আপনি প্লেসহোল্ডার নাম ও মানের একটি ম্যাপ প্রয়োগ করে প্লেসহোল্ডার উপাদানগুলিতে মান নির্ধারণ করতে পারেন।
কাঠামোগত নির্দেশাবলী (ঐচ্ছিক)
আপনার প্রম্পটগুলোকে কাঠামোবদ্ধ করার আরেকটি উপায় হলো @StructuredPrompt অ্যানোটেশন ব্যবহার করা, যদি আপনি আরও সমৃদ্ধ অবজেক্ট ওরিয়েন্টেড পদ্ধতি ব্যবহার করতে চান। আপনি একটি ক্লাসকে এই অ্যানোটেশনটি দিয়ে চিহ্নিত করেন, এবং এর ফিল্ডগুলো প্রম্পটে সংজ্ঞায়িত প্লেসহোল্ডারগুলোর সাথে সঙ্গতিপূর্ণ হয়। চলুন, এটি বাস্তবে দেখি।
প্রথমে, আমাদের কিছু নতুন ইম্পোর্ট করতে হবে:
import java.util.Arrays;
import java.util.List;
import dev.langchain4j.model.input.structured.StructuredPrompt;
import dev.langchain4j.model.input.structured.StructuredPromptProcessor;
তারপর আমরা আমাদের TextPrompts ক্লাসের ভিতরে একটি ইনার স্ট্যাটিক ক্লাস তৈরি করতে পারি যা @StructuredPrompt অ্যানোটেশনে বর্ণিত প্রম্পটে প্লেসহোল্ডারগুলি পাস করার জন্য প্রয়োজনীয় ডেটা সংগ্রহ করে:
@StructuredPrompt("Create a recipe of a {{dish}} that can be prepared using only {{ingredients}}")
static class RecipeCreationPrompt {
String dish;
List<String> ingredients;
}
তারপর সেই নতুন ক্লাসটি ইনস্ট্যানশিয়েট করুন এবং এটিকে আমাদের রেসিপির ডিশ ও উপকরণগুলো দিন, আগের মতোই প্রম্পটটি তৈরি করে generate() মেথডে পাস করুন:
RecipeCreationPrompt createRecipePrompt = new RecipeCreationPrompt();
createRecipePrompt.dish = "salad";
createRecipePrompt.ingredients = Arrays.asList("cucumber", "tomato", "feta", "onion", "olives");
Prompt prompt = StructuredPromptProcessor.toPrompt(createRecipePrompt);
Response<String> response = model.generate(prompt);
ম্যাপের মাধ্যমে শূন্যস্থান পূরণ করার পরিবর্তে, আপনি আরও টাইপ-সেফ উপায়ে এমন একটি জাভা অবজেক্ট ব্যবহার করতে পারেন যার ফিল্ডগুলো আপনার IDE দ্বারা স্বয়ংক্রিয়ভাবে পূরণ করা যায়।
আপনার TextPrompts ক্লাসে এই পরিবর্তনগুলো আরও সহজে পেস্ট করার জন্য এখানে সম্পূর্ণ কোডটি দেওয়া হলো:
package palm.workshop;
import java.util.Arrays;
import java.util.List;
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.vertexai.VertexAiLanguageModel;
import dev.langchain4j.model.input.structured.StructuredPrompt;
import dev.langchain4j.model.input.structured.StructuredPromptProcessor;
public class TextPrompts {
@StructuredPrompt("Create a recipe of a {{dish}} that can be prepared using only {{ingredients}}")
static class RecipeCreationPrompt {
String dish;
List<String> ingredients;
}
public static void main(String[] args) {
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(300)
.build();
RecipeCreationPrompt createRecipePrompt = new RecipeCreationPrompt();
createRecipePrompt.dish = "salad";
createRecipePrompt.ingredients = Arrays.asList("cucumber", "tomato", "feta", "onion", "olives");
Prompt prompt = StructuredPromptProcessor.toPrompt(createRecipePrompt);
Response<String> response = model.generate(prompt);
System.out.println(response.content());
}
}
৭. পাঠ্যের শ্রেণিবিন্যাস এবং অনুভূতির বিশ্লেষণ
পূর্ববর্তী বিভাগে আপনি যা শিখেছেন, তার অনুরূপভাবেই আপনি PaLM মডেলকে টেক্সট শ্রেণীবদ্ধ করতে বা অনুভূতি বিশ্লেষণ করতে সাহায্য করার জন্য আরেকটি "প্রম্পট ইঞ্জিনিয়ারিং" কৌশল সম্পর্কে জানতে পারবেন। চলুন "ফিউ-শট প্রম্পটিং" নিয়ে কথা বলা যাক। এটি কয়েকটি উদাহরণের মাধ্যমে আপনার প্রম্পটগুলোকে উন্নত করার একটি উপায়, যা ল্যাঙ্গুয়েজ মডেলকে আপনার কাঙ্ক্ষিত দিকে চালিত করতে এবং আপনার উদ্দেশ্য আরও ভালোভাবে বুঝতে সাহায্য করবে।
প্রম্পট টেমপ্লেটের সুবিধা নিতে চলুন আমাদের TextPrompts ক্লাসটি নতুন করে সাজাই:
package palm.workshop;
import java.util.Map;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.vertexai.VertexAiLanguageModel;
import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.input.PromptTemplate;
public class TextPrompts {
public static void main(String[] args) {
VertexAiLanguageModel model = VertexAiLanguageModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("YOUR_PROJECT_ID")
.location("us-central1")
.publisher("google")
.modelName("text-bison@001")
.maxOutputTokens(10)
.build();
PromptTemplate promptTemplate = PromptTemplate.from("""
Analyze the sentiment of the text below. Respond only with one word to describe the sentiment.
INPUT: This is fantastic news!
OUTPUT: POSITIVE
INPUT: Pi is roughly equal to 3.14
OUTPUT: NEUTRAL
INPUT: I really disliked the pizza. Who would use pineapples as a pizza topping?
OUTPUT: NEGATIVE
INPUT: {{text}}
OUTPUT:
""");
Prompt prompt = promptTemplate.apply(
Map.of("text", "I love strawberries!"));
Response<String> response = model.generate(prompt);
System.out.println(response.content());
}
}
প্রম্পটে ইনপুট এবং আউটপুটের কয়েকটি উদাহরণ দেওয়ার পদ্ধতিটি লক্ষ্য করুন। এইগুলোই হলো সেই "কয়েকটি নমুনা" যা এলএলএম-কে একই কাঠামো অনুসরণ করতে সাহায্য করে। এরপর যখন মডেলটি কোনো ইনপুট গ্রহণ করে, তখন এটি এমন একটি আউটপুট ফেরত দিতে চায় যা ইনপুট/আউটপুট প্যাটার্নটির সাথে মেলে।
প্রোগ্রামটি চালালে শুধু POSITIVE শব্দটিই ফেরত আসা উচিত, কারণ স্ট্রবেরিও খুব সুস্বাদু!
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
> Task :app:run
POSITIVE
সেন্টিমেন্ট অ্যানালাইসিসও এক ধরনের কন্টেন্ট ক্লাসিফিকেশন। বিভিন্ন ডকুমেন্টকে বিভিন্ন ক্যাটাগরিতে ভাগ করার জন্য আপনি একই "ফিউ-শট প্রম্পটিং" পদ্ধতি প্রয়োগ করতে পারেন।
৮. অভিনন্দন
অভিনন্দন, আপনি LangChain4J এবং PaLM API ব্যবহার করে জাভাতে আপনার প্রথম জেনারেটিভ এআই অ্যাপ্লিকেশনটি সফলভাবে তৈরি করেছেন! এই প্রক্রিয়ায় আপনি আবিষ্কার করেছেন যে, বৃহৎ ল্যাঙ্গুয়েজ মডেলগুলো বেশ শক্তিশালী এবং প্রশ্নোত্তর পর্ব, ডেটা নিষ্কাশন, সারসংক্ষেপ তৈরি, টেক্সট ক্লাসিফিকেশন, সেন্টিমেন্ট অ্যানালাইসিস এবং আরও অনেক ধরনের কাজ সামলাতে সক্ষম।
এরপর কী?
জাভাতে PaLM নিয়ে আরও এগিয়ে যেতে নিচের কোডল্যাবগুলো দেখে নিন:
আরও পড়ুন
- জেনারেটিভ এআই-এর সাধারণ ব্যবহারের ক্ষেত্রসমূহ
- জেনারেটিভ এআই সম্পর্কিত প্রশিক্ষণ উপকরণ
- জেনারেটিভ এআই স্টুডিওর মাধ্যমে PaLM-এর সাথে যোগাযোগ করুন
- দায়িত্বশীল এআই