PaLM এবং LangChain4J এর সাথে জাভাতে জেনারেটিভ এআই টেক্সট জেনারেশন

1. ভূমিকা

শেষ আপডেট: 2023-11-27

জেনারেটিভ এআই কি

জেনারেটিভ এআই বা জেনারেটিভ কৃত্রিম বুদ্ধিমত্তা বলতে টেক্সট, ইমেজ, মিউজিক, অডিও এবং ভিডিওর মতো নতুন কন্টেন্ট তৈরি করতে AI ব্যবহারকে বোঝায়।

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

জেনারেটিভ এআই কিভাবে কাজ করে?

জেনারেটিভ এআই একটি এমএল (মেশিন লার্নিং) মডেল ব্যবহার করে মানব-সৃষ্ট সামগ্রীর একটি ডেটাসেটের নিদর্শন এবং সম্পর্কগুলি শিখতে কাজ করে। এটি তারপর নতুন বিষয়বস্তু তৈরি করতে শেখা নিদর্শন ব্যবহার করে।

একটি জেনারেটিভ এআই মডেলকে প্রশিক্ষিত করার সবচেয়ে সাধারণ উপায় হল তত্ত্বাবধানে শেখার ব্যবহার করা — মডেলটিতে মানব-সৃষ্ট সামগ্রী এবং সংশ্লিষ্ট লেবেলগুলির একটি সেট দেওয়া হয়। এটি তখন এমন বিষয়বস্তু তৈরি করতে শেখে যা মানুষের তৈরি সামগ্রীর অনুরূপ এবং একই লেবেল দিয়ে লেবেলযুক্ত।

সাধারণ জেনারেটিভ এআই অ্যাপ্লিকেশন কি কি?

জেনারেটিভ এআই বিশাল কন্টেন্ট প্রসেস করে, পাঠ্য, ছবি এবং ব্যবহারকারী-বান্ধব ফর্ম্যাটের মাধ্যমে অন্তর্দৃষ্টি এবং উত্তর তৈরি করে। জেনারেটিভ এআই ব্যবহার করা যেতে পারে:

  • উন্নত চ্যাট এবং অনুসন্ধান অভিজ্ঞতার মাধ্যমে গ্রাহকের মিথস্ক্রিয়া উন্নত করুন
  • কথোপকথন ইন্টারফেস এবং সংক্ষিপ্তকরণের মাধ্যমে বিশাল পরিমাণে অসংগঠিত ডেটা অন্বেষণ করুন
  • পুনরাবৃত্তিমূলক কাজগুলিতে সহায়তা করুন যেমন প্রস্তাবগুলির জন্য অনুরোধের উত্তর দেওয়া (RFPs), পাঁচটি ভাষায় বিপণন বিষয়বস্তু স্থানীয়করণ, এবং সম্মতির জন্য গ্রাহক চুক্তিগুলি পরীক্ষা করা এবং আরও অনেক কিছু

গুগল ক্লাউডে কী জেনারেটিভ এআই অফার রয়েছে?

Vertex AI এর সাথে, আপনার অ্যাপ্লিকেশনগুলিতে ফাউন্ডেশন মডেলগুলির সাথে ইন্টারঅ্যাক্ট করুন, কাস্টমাইজ করুন এবং এম্বেড করুন — সামান্য থেকে কোন ML দক্ষতার প্রয়োজন নেই৷ মডেল গার্ডেনে ফাউন্ডেশন মডেলগুলি অ্যাক্সেস করুন, জেনারেটিভ এআই স্টুডিওতে একটি সাধারণ UI এর মাধ্যমে মডেলগুলি টিউন করুন বা ডেটা সায়েন্স নোটবুকে মডেলগুলি ব্যবহার করুন৷

Vertex AI সার্চ এবং কথোপকথন ডেভেলপারদের জেনারেটিভ AI চালিত সার্চ ইঞ্জিন এবং চ্যাটবট তৈরি করার দ্রুততম উপায় অফার করে।

এবং, ডুয়েট এআই হল আপনার AI-চালিত সহযোগী যা আপনাকে আরও দ্রুত করতে সাহায্য করার জন্য Google ক্লাউড এবং IDE জুড়ে উপলব্ধ।

এই কোডল্যাব কি উপর ফোকাস করছে?

এই কোডল্যাবটি PaLM 2 Large Language Model (LLM) এর উপর ফোকাস করে, যা Google Cloud Vertex AI-তে হোস্ট করা হয়েছে যা সমস্ত মেশিন লার্নিং পণ্য এবং পরিষেবাগুলিকে অন্তর্ভুক্ত করে।

আপনি LangChain4J LLM ফ্রেমওয়ার্ক অর্কেস্ট্রেটরের সাথে মিলিত হয়ে PaLM API এর সাথে ইন্টারঅ্যাক্ট করতে Java ব্যবহার করবেন। প্রশ্ন উত্তর, ধারণা তৈরি, সত্তা এবং কাঠামোগত বিষয়বস্তু নিষ্কাশন এবং সারসংক্ষেপের জন্য LLM-এর সুবিধা নিতে আপনি বিভিন্ন নির্দিষ্ট উদাহরণের মধ্য দিয়ে যাবেন।

LangChain4J ফ্রেমওয়ার্ক সম্পর্কে আমাকে আরও বলুন!

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

c6d7f7c3fd0d2951.png

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

  • জাভা প্রোগ্রামিং ভাষার জ্ঞান
  • একটি Google ক্লাউড প্রকল্প
  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

ক্লাউড শেল শুরু করুন

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি ক্লাউড শেল ব্যবহার করবেন, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন d1264ca30785e435.png .

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.png

এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।

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

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

3. আপনার উন্নয়ন পরিবেশ প্রস্তুত করা

এই কোডল্যাবে, আপনি আপনার জাভা প্রোগ্রামগুলি বিকাশ করতে ক্লাউড শেল টার্মিনাল এবং কোড এডিটর ব্যবহার করতে যাচ্ছেন।

Vertex AI APIs সক্ষম করুন

  1. Google ক্লাউড কনসোলে, নিশ্চিত করুন যে আপনার প্রোজেক্টের নামটি আপনার Google ক্লাউড কনসোলের শীর্ষে প্রদর্শিত হচ্ছে। যদি তা না হয়, তাহলে প্রজেক্ট সিলেক্টর খুলতে একটি প্রজেক্ট নির্বাচন করুন ক্লিক করুন এবং আপনার উদ্দেশ্যপ্রণোদিত প্রকল্প নির্বাচন করুন।
  2. আপনি যদি Google ক্লাউড কনসোলের Vertex AI অংশে না থাকেন তবে নিম্নলিখিতগুলি করুন:
  3. অনুসন্ধানে , Vertex AI লিখুন, তারপরে ফিরে আসুন
  4. অনুসন্ধান ফলাফলে, Vertex AI-তে ক্লিক করুন Vertex AI ড্যাশবোর্ড প্রদর্শিত হবে।
  5. Vertex AI ড্যাশবোর্ডে সমস্ত প্রস্তাবিত API সক্রিয় করুন ক্লিক করুন৷

এটি বেশ কয়েকটি এপিআই সক্ষম করবে, কিন্তু কোডল্যাবের জন্য সবচেয়ে গুরুত্বপূর্ণটি হল aiplatform.googleapis.com , যা আপনি ক্লাউড শেল টার্মিনালে, নিম্নলিখিত কমান্ডটি চালিয়ে কমান্ড-লাইনে সক্ষম করতে পারেন:

$ gcloud services enable aiplatform.googleapis.com

Gradle দিয়ে প্রকল্পের কাঠামো তৈরি করা

আপনার জাভা কোড উদাহরণ তৈরি করার জন্য, আপনি Gradle বিল্ড টুল এবং Java এর 17 সংস্করণ ব্যবহার করবেন। ক্লাউড শেল টার্মিনালে, গ্রেডলের সাথে আপনার প্রকল্প সেট আপ করতে, একটি ডিরেক্টরি তৈরি করুন (এখানে, 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

আপনি একটি অ্যাপ্লিকেশন তৈরি করবেন (বিকল্প 2), জাভা ভাষা ব্যবহার করে (বিকল্প 3), সাবপ্রজেক্ট ব্যবহার না করে (বিকল্প 1), বিল্ড ফাইলের জন্য গ্রোভি সিনট্যাক্স ব্যবহার করে (বিকল্প 1), নতুন বিল্ড বৈশিষ্ট্যগুলি ব্যবহার করবেন না (বিকল্প নম্বর ), JUnit জুপিটার দিয়ে পরীক্ষা তৈরি করা (বিকল্প 4), এবং প্রকল্পের নামের জন্য আপনি 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টি নির্ভরতা রয়েছে:

  • মূল প্রকল্পে একটি,
  • এবং একটি ডেডিকেটেড ভার্টেক্স এআই মডিউলের জন্য।

আমাদের প্রোগ্রাম কম্পাইল এবং চালানোর জন্য Java 17 ব্যবহার করার জন্য, 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()
}

4. PaLM এর টেক্সট মডেলে আপনার প্রথম কল করা

এখন যেহেতু প্রকল্পটি সঠিকভাবে সেট আপ করা হয়েছে, এটি PaLM API কল করার সময়।

app/src/main/java/palm/workshop ডিরেক্টরিতে TextPrompts.java নামে একটি নতুন ক্লাস তৈরি করুন (ডিফল্ট App.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-এ পাঠানোর নির্দেশাবলী)। এখানে, আপনি এলএলএম কী সে সম্পর্কে একটি সহজ প্রশ্ন জিজ্ঞাসা করুন। কিন্তু বিভিন্ন প্রশ্ন বা কাজ চেষ্টা করার জন্য এই প্রম্পটটি পরিবর্তন করতে দ্বিধা বোধ করুন।

এই ক্লাস চালানোর জন্য, ক্লাউড শেল টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:

./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 বার কল করার জন্য পুনরায় চেষ্টা করতে পারেন

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

5. অসংগঠিত পাঠ্য থেকে তথ্য আহরণ করা

পূর্ববর্তী বিভাগে, আপনি কিছু পাঠ্য আউটপুট তৈরি করেছেন। আপনি যদি আপনার শেষ-ব্যবহারকারীদের সরাসরি এই আউটপুটটি দেখাতে চান তবে এটি ভাল। কিন্তু আপনি যদি এই আউটপুটে উল্লিখিত ডেটা পুনরুদ্ধার করতে চান, তাহলে আপনি কীভাবে অসংগঠিত পাঠ্য থেকে সেই তথ্যটি বের করবেন?

ধরা যাক আপনি একজন ব্যক্তির নাম এবং বয়স বের করতে চান, সেই ব্যক্তির জীবনী বা বিবরণ দেওয়া হয়েছে। আপনি নিম্নোক্তভাবে প্রম্পট টুইক করে 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

হ্যাঁ! আনার বয়স 23!

6. প্রম্পট টেমপ্লেট এবং কাঠামোগত প্রম্পট

প্রশ্নের উত্তরের বাইরে

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

  • অনুবাদ — "নিম্নলিখিত বাক্যটি ফরাসি ভাষায় অনুবাদ করুন: YOUR_SENTENCE_HERE "
  • সারসংক্ষেপ — "নিম্নলিখিত নথির একটি সারাংশ প্রদান করুন: PASTE_YOUR_DOC"
  • সৃজনশীল প্রজন্ম - " TOPIC_OF_THE_POEM সম্পর্কে একটি কবিতা লিখুন"
  • প্রোগ্রামিং — "কিভাবে 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());
    }
}

7. পাঠ্যকে শ্রেণীবদ্ধ করা এবং অনুভূতি বিশ্লেষণ করা

একইভাবে আপনি আগের বিভাগে যা শিখেছেন, আপনি 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

অনুভূতি বিশ্লেষণ একটি বিষয়বস্তু শ্রেণীবিভাগ দৃশ্যকল্প. আপনি একই "কয়েক-শট প্রম্পটিং" পদ্ধতি প্রয়োগ করতে পারেন বিভিন্ন দস্তাবেজকে বিভিন্ন বিভাগের বালতিতে শ্রেণীবদ্ধ করতে।

8. অভিনন্দন

অভিনন্দন, আপনি LangChain4J এবং PaLM API ব্যবহার করে জাভাতে আপনার প্রথম জেনারেটিভ এআই অ্যাপ্লিকেশন সফলভাবে তৈরি করেছেন! আপনি পথ ধরে আবিষ্কার করেছেন যে বড় ভাষার মডেলগুলি বেশ শক্তিশালী এবং প্রশ্ন/উত্তর, ডেটা নিষ্কাশন, সংক্ষিপ্তকরণ, পাঠ্য শ্রেণিবিন্যাস, অনুভূতি বিশ্লেষণ এবং আরও অনেক কিছু পরিচালনা করতে সক্ষম।

এরপর কি?

জাভাতে PaLM এর সাথে আরও যেতে নিম্নলিখিত কোডল্যাবগুলি দেখুন:

আরও পড়া

রেফারেন্স ডক্স