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

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



- এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। এটি একটি অক্ষর স্ট্রিং যা Google API গুলি ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য এবং অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটি কী তা নিয়ে চিন্তা করেন না। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রোজেক্ট আইডি (সাধারণত
PROJECT_IDহিসাবে চিহ্নিত) উল্লেখ করতে হবে। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র্যান্ডম তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন, এবং এটি উপলব্ধ কিনা তা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে। - আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি Project Number , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপর, ক্লাউড রিসোর্স/API ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবটি চালানোর জন্য খুব বেশি খরচ হবে না, এমনকি কিছু খরচও হবে না। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে রিসোর্স বন্ধ করতে, আপনি আপনার তৈরি রিসোর্সগুলি মুছে ফেলতে পারেন অথবা প্রকল্পটি মুছে ফেলতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
ক্লাউড শেল শুরু করুন
যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন
.

যদি আপনি প্রথমবারের মতো ক্লাউড শেল শুরু করেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন দেখানো হবে যা এটি কী তা বর্ণনা করবে। যদি আপনার কাছে একটি মধ্যবর্তী স্ক্রিন থাকে, তাহলে 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 API গুলি সক্ষম করুন
- গুগল ক্লাউড কনসোলে, নিশ্চিত করুন যে আপনার প্রোজেক্টের নামটি আপনার গুগল ক্লাউড কনসোলের উপরে প্রদর্শিত হচ্ছে। যদি তা না থাকে, তাহলে প্রোজেক্ট সিলেক্টর খুলতে একটি প্রোজেক্ট নির্বাচন করুন এ ক্লিক করুন এবং আপনার উদ্দেশ্যপ্রণোদিত প্রোজেক্টটি নির্বাচন করুন।
- আপনি যদি গুগল ক্লাউড কনসোলের ভার্টেক্স এআই অংশে না থাকেন, তাহলে নিম্নলিখিতগুলি করুন:
- অনুসন্ধানে , Vertex AI লিখুন, তারপর ফিরে আসুন
- অনুসন্ধানের ফলাফলে, Vertex AI এ ক্লিক করুন। Vertex AI ড্যাশবোর্ড প্রদর্শিত হবে।
- Vertex AI ড্যাশবোর্ডে সমস্ত প্রস্তাবিত API সক্ষম করুন -এ ক্লিক করুন।
এটি বেশ কয়েকটি 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 এর জন্য 2টি নির্ভরতা রয়েছে:
- মূল প্রকল্পের একটি,
- এবং একটি ডেডিকেটেড ভার্টেক্স এআই মডিউলের জন্য।
আমাদের প্রোগ্রামগুলি কম্পাইল এবং চালানোর জন্য জাভা ১৭ ব্যবহার করার জন্য, plugins {} ব্লকের নীচে নিম্নলিখিত ব্লকটি যুক্ত করুন:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
আরও একটি পরিবর্তন করতে হবে: app/build.gradle এর application ব্লক আপডেট করুন, যাতে ব্যবহারকারীরা বিল্ড টুলটি ব্যবহার করার সময় কমান্ড-লাইনে চালানোর জন্য প্রধান ক্লাসকে ওভাররাইড করতে সক্ষম হন:
application {
mainClass = providers.systemProperty('javaMainClass')
.orElse('palm.workshop.App')
}
আপনার বিল্ড ফাইলটি অ্যাপ্লিকেশন চালানোর জন্য প্রস্তুত কিনা তা পরীক্ষা করার জন্য, আপনি ডিফল্ট main ক্লাসটি চালাতে পারেন যা একটি সাধারণ 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());
}
}
এই প্রথম উদাহরণে, আপনাকে PaLM-এর জন্য Response ক্লাস এবং 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)— উদাহরণে, 500 টি টোকেন অনুরোধ করা হয়েছিল (3 টি টোকেন প্রায় 4 শব্দের সমতুল্য), আপনি উৎপন্ন উত্তরটি কত দীর্ঘ রাখতে চান তার উপর নির্ভর করে -
.topK(20)— টেক্সট সম্পূর্ণ করার জন্য সর্বাধিক সম্ভাব্য শব্দের মধ্যে থেকে এলোমেলোভাবে একটি শব্দ নির্বাচন করা (১ থেকে ৪০ পর্যন্ত) -
.topP(0.95)— সম্ভাব্য শব্দ নির্বাচন করতে যার মোট সম্ভাব্যতা সেই ভাসমান বিন্দু সংখ্যার সাথে যোগ করে (0 এবং 1 এর মধ্যে) -
.maxRetries(3)— যদি আপনি প্রতি সময় কোটার অনুরোধ অতিক্রম করে থাকেন, তাহলে আপনি মডেলটিকে 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 এর মতো বৃহৎ ভাষার মডেলগুলি প্রশ্নের উত্তর দেওয়ার জন্য শক্তিশালী, তবে আপনি এগুলি আরও অনেক কাজের জন্য ব্যবহার করতে পারেন! উদাহরণস্বরূপ, জেনারেটিভ এআই স্টুডিওতে নিম্নলিখিত প্রম্পটগুলি চেষ্টা করুন (অথবা TextPrompts ক্লাস পরিবর্তন করে)। আপনার নিজস্ব ধারণা দিয়ে বড় হাতের শব্দগুলি পরিবর্তন করুন এবং তাদের আউটপুট পরীক্ষা করুন:
- অনুবাদ — "নিম্নলিখিত বাক্যটি ফরাসি ভাষায় অনুবাদ করুন: YOUR_SENTENCE_HERE "
- সারসংক্ষেপ — "নিম্নলিখিত নথির একটি সারসংক্ষেপ প্রদান করুন: PASTE_YOUR_DOC"
- সৃজনশীল প্রজন্ম — " বিষয়বস্তু_এর_কবিতা সম্পর্কে একটি কবিতা লিখুন"
- প্রোগ্রামিং — " 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 মডেলকে টেক্সট শ্রেণীবদ্ধ করতে বা অনুভূতি বিশ্লেষণ করতে সাহায্য করার জন্য আরেকটি "প্রম্পট ইঞ্জিনিয়ারিং" কৌশল আবিষ্কার করবেন। আসুন "few-shot prompting" সম্পর্কে কথা বলি। এটি কয়েকটি উদাহরণ দিয়ে আপনার প্রম্পটগুলিকে উন্নত করার একটি উপায় যা ভাষা মডেলটিকে আপনার পছন্দসই দিকে পরিচালিত করতে সাহায্য করবে, আপনার উদ্দেশ্য আরও ভালভাবে বুঝতে পারবে।
প্রম্পট টেমপ্লেটের সুবিধা নিতে আমাদের 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());
}
}
প্রম্পটে ইনপুট এবং আউটপুটের কয়েকটি উদাহরণ দেওয়ার পদ্ধতিটি লক্ষ্য করুন। এগুলি হল "কয়েকটি শট" যা LLM-কে একই কাঠামো অনুসরণ করতে সাহায্য করে। যখন মডেলটি একটি ইনপুট পাবে, তখন এটি এমন একটি আউটপুট ফেরত দিতে চাইবে যা ইনপুট/আউটপুট প্যাটার্নের সাথে মেলে।
প্রোগ্রামটি চালালে কেবল POSITIVE শব্দটি ফিরে আসবে, কারণ স্ট্রবেরিও সুস্বাদু!
$ ./gradlew run -DjavaMainClass=palm.workshop.TextPrompts
> Task :app:run
POSITIVE
অনুভূতি বিশ্লেষণও একটি বিষয়বস্তু শ্রেণীবিভাগের দৃশ্যকল্প। আপনি বিভিন্ন নথিকে বিভিন্ন শ্রেণীতে শ্রেণীবদ্ধ করার জন্য একই "কয়েক-শট প্রম্পটিং" পদ্ধতি প্রয়োগ করতে পারেন।
৮. অভিনন্দন
অভিনন্দন, আপনি LangChain4J এবং PaLM API ব্যবহার করে জাভাতে আপনার প্রথম জেনারেটিভ এআই অ্যাপ্লিকেশনটি সফলভাবে তৈরি করেছেন! আপনি আবিষ্কার করেছেন যে বৃহৎ ভাষা মডেলগুলি বেশ শক্তিশালী এবং প্রশ্ন/উত্তর, ডেটা নিষ্কাশন, সারসংক্ষেপ, পাঠ্য শ্রেণীবিভাগ, অনুভূতি বিশ্লেষণ এবং আরও অনেক কিছুর মতো বিভিন্ন কাজ পরিচালনা করতে সক্ষম।
এরপর কী?
জাভাতে PaLM ব্যবহার করে আরও এগিয়ে যাওয়ার জন্য নিম্নলিখিত কিছু কোডল্যাব দেখুন:
আরও পড়া
- জেনারেটিভ এআই সাধারণ ব্যবহারের ক্ষেত্রে
- জেনারেটিভ এআই-এর উপর প্রশিক্ষণের সংস্থান
- জেনারেটিভ এআই স্টুডিওর মাধ্যমে PaLM-এর সাথে যোগাযোগ করুন
- দায়িত্বশীল এআই