Booksशेल्फ़ Analytics: Gemini का इस्तेमाल करके, Java Cloud Run ऐप्लिकेशन बनाएं. यह आपको BigQuery डेटा को वेब पर ले जाएगा

1. परिचय

क्या आपको किताबें पढ़ना पसंद है, लेकिन बहुत सारे विकल्पों की वजह से आप परेशान हो जाते हैं? एआई की मदद से काम करने वाले ऐसे ऐप्लिकेशन की कल्पना करें जो न सिर्फ़ आपके लिए सही किताब का सुझाव देता है, बल्कि आपकी पसंदीदा शैली के आधार पर किताब की खास जानकारी भी देता है. इससे आपको किताब के बारे में खास जानकारी मिलती है. इस कोडलैब में, आपको Gemini की मदद से BigQuery, Vertex AI, और Cloud Run की मदद से इस तरह का ऐप्लिकेशन बनाने का तरीका बताया जाएगा.

प्रोजेक्ट की खास जानकारी

हमारे इस्तेमाल के उदाहरण इन चार अहम कॉम्पोनेंट के बारे में हैं:

  • किताबों का डेटाबेस: इंटरनेट आर्काइव की किताबों का बड़ा BigQuery सार्वजनिक डेटासेट, किताबों का हमारा पूरा कैटलॉग होगा.
  • एआई की मदद से खास जानकारी देने वाला इंजन: Gemini-Pro भाषा मॉडल के साथ Google Cloud Functions, उपयोगकर्ता के अनुरोधों के हिसाब से अहम जानकारी जनरेट करेगा.
  • BigQuery इंटिग्रेशन: यह BigQuery में मौजूद एक रिमोट फ़ंक्शन है. यह हमारे Cloud Function को कॉल करके, मांग पर किताबों की खास जानकारी और थीम डिलीवर करता है.
  • यूज़र इंटरफ़ेस: Cloud Run पर होस्ट किया गया वेब ऐप्लिकेशन, जो उपयोगकर्ताओं को नतीजे देखने के लिए वेब ऐप्लिकेशन देगा.

हमने प्रोजेक्ट को लागू करने की पूरी प्रोसेस को तीन कोडलैब में बांटा है. इस कोडलैब में, नीचे दी गई सूची में मौजूद कोडलैब 3 शामिल है:

पहला कोडलैब: Gemini ऐप्लिकेशन के लिए, Java Cloud फ़ंक्शन बनाने के लिए Gemini का इस्तेमाल करना.

दूसरा कोडलैब: BigQuery की मदद से, सिर्फ़ एसक्यूएल वाले जनरेटिव एआई ऐप्लिकेशन बनाने के लिए Gemini का इस्तेमाल करना.

कोडलैब 3: Gemini का इस्तेमाल करके, BigQuery के साथ इंटरैक्ट करने वाला Java Spring बूट वेब ऐप्लिकेशन बनाएं.

2. BigQuery के साथ Spring Boot वेब ऐप्लिकेशन बनाने के लिए, Gemini का इस्तेमाल करना

आपको क्या बनाना है

  • ज़रूरी BigQuery डेटासेट और टेबल बनाएं.
  • Java Spring Boot वेब ऐप्लिकेशन, जो किताब का डेटा फ़ेच करने और उसे वेब पर दिखाने के लिए, BigQuery के साथ इंटरैक्ट करता है.
  • यह ऐप्लिकेशन, Cloud Run पर डिप्लॉय किया गया है.
  • Gemini की मदद से, आपको ये चरण पूरे करने होंगे.

3. ज़रूरी शर्तें

  • कोई ब्राउज़र, जैसे कि Chrome या Firefox
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट
  • अगर आपने पहले चरण के कोडलैब जनरेटिव एआई ऐप्लिकेशन के लिए Java Cloud Function बनाने के लिए Gemini का इस्तेमाल करें कोडलैब के हिस्से के तौर पर Cloud Function को डिप्लॉय किया है, तो यह आपके लिए मददगार होगा.
  • शर्तों के साथ: अगर अब तक आपके पास Google Cloud क्रेडिट के मुफ़्त लिंक का ऐक्सेस है, तो क्रेडिट चालू करने और प्रोजेक्ट बनाने से जुड़े चरणों को पहले ही पूरा करने के लिए, नीचे दिए गए पेज पर जाएं. इसके बाद, शायद वर्कशॉप के आयोजक ने आपको यह लिंक दिया हो. अगर आपके पास यह लिंक नहीं है, तो प्रोजेक्ट और बिलिंग से जुड़ी ज़रूरी शर्तों को पूरा करने के लिए, यहां दिया गया तरीका अपनाएं:

अपना प्रोजेक्ट बनाना

अगर आपने पहले ही कोई बिलिंग खाता चालू कर लिया है और ऊपर दिए गए शर्त वाले चरण में बताए गए लिंक का इस्तेमाल करके कोई प्रोजेक्ट बना लिया है, तो नीचे दिए गए चरणों को छोड़ा जा सकता है.

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं, यह देखने का तरीका जानें.

Cloud Shell चालू करना

  1. आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है, जिसमें bq पहले से लोड होता है:

Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद, 'Cloud Shell चालू करें' पर क्लिक करें:

6757b2fb50ddcc2d.png

  1. Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपने पहले ही पुष्टि कर ली है और प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है. पुष्टि करने के लिए, Cloud Shell में यह कमांड चलाएं:
gcloud auth list
  1. Cloud Shell में यह कमांड चलाकर पुष्टि करें कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है
gcloud config list project
  1. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए इस निर्देश का इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>

gcloud के निर्देशों और इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें.

4. Gemini और ज़रूरी एपीआई चालू करना

Gemini की सुविधा चालू करना

  1. एपीआई को चालू करने के लिए, Gemini Marketplace पर जाएं. इस निर्देश का भी इस्तेमाल किया जा सकता है:

gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID

  1. Gemini पेज पर जाएं और "चैट शुरू करें" पर क्लिक करें.

अन्य ज़रूरी एपीआई चालू करें

हम ऐसा कैसे करेंगे? चलिए, Gemini से पूछते हैं, क्या हम ऐसा कर सकते हैं? हालांकि, ऐसा करने से पहले इन बातों का ध्यान रखें:

ध्यान दें: एलएलएम, नॉन-डेटरमिनिस्टिक होते हैं. इसलिए, इन प्रॉम्प्ट को आज़माते समय, आपको जो जवाब मिलता है वह मेरे स्क्रीनशॉट में दिए गए जवाबों से अलग दिख सकता है.

Gemini से चैट कंसोल में जाने के लिए, Google Cloud Console में खोज बार के बगल में, सबसे ऊपर दाएं कोने में मौजूद "Gemini खोलें" आइकॉन पर क्लिक करें.

26e1491322855614.png

"यहां प्रॉम्प्ट डालें" सेक्शन में, यह सवाल टाइप करें:

How do I enable the BigQuery and Cloud Run apis using gcloud command?

आपको इस इमेज में दिखाया गया जवाब मिलता है:

b97a8a9fa9143b3f.png

उस कोड को कॉपी करें (कमांड स्निपेट में सबसे ऊपर मौजूद, कॉपी आइकॉन का इस्तेमाल किया जा सकता है). इसके बाद, उससे जुड़ी सेवाओं को चालू करने के लिए, Cloud Shell टर्मिनल में उसे चलाएं:

  • bigquery.googleapis.com
  • run.googleapis.com

5. किताबों के डेटा के लिए, BigQuery का सार्वजनिक डेटासेट एक्सप्लोर करना

BigQuery के सार्वजनिक डेटासेट के बारे में जानें. इसमें कई इंटरनेट पर मौजूद संग्रहित किताबों की जानकारी होती है. अगर आपको इस लिंक से internetarchivebooks डेटासेट पर नहीं जा पा रहे हैं, तो डेटासेट को एक्सप्लोर करने के लिए नीचे दिया गया तरीका अपनाएं. इसके अलावा, दस्तावेज़ में दिया गया तरीका भी अपनाया जा सकता है:

यह सार्वजनिक डेटासेट, BigQuery एक्सप्लोरर पैनल में देखा जा सकता है. BigQuery कंसोल पर जाने पर, आपको यह विकल्प बाईं ओर दिखेगा.

39e2ac03cc99cbac.png

खोज बार में "gdelt-bq" या "internetarchivebooks" टाइप करें और सभी प्रोजेक्ट खोजें पर क्लिक करें. नतीजे को बड़ा करें और इंटरनेट आर्काइव की किताबों को स्टार दें, जैसा कि यहां दी गई इमेज में दिखाया गया है:

68dba68a79cddfc9.png.

डेटासेट को बड़ा करें और gdelt-bq.internetarchivebooks पर क्लिक करें. इसके बाद, 1920 की टेबल में डेटा की झलक देखें. इस टेबल में, साल 1920 की संग्रहित किताबें शामिल हैं.

अगले सेक्शन में इस्तेमाल किए जाने वाले स्कीमा को देखने के लिए, यह क्वेरी चलाएं:

select * from  `gdelt-bq.internetarchivebooks.1920` limit 5;

हम अपने कोडलैब के लिए, इन तीन फ़ील्ड का इस्तेमाल करेंगे:

  • BookMeta_Title (टाइटल)
  • थीम (थीम को ‘;' से अलग किया गया है)
  • BookMeta_FullText (किताब का पूरा टेक्स्ट)

6. Gemini की मदद से, Java Cloud Run का बुनियादी टेंप्लेट बनाना

अपने Cloud Shell Terminal के सबसे ऊपर दाएं कोने में मौजूद, एडिटर खोलें आइकॉन पर क्लिक करके क्लाउड शेल एडिटर खोलें. आम तौर पर, मुझे टर्मिनल और एडिटर को अलग-अलग टैब में अलग-अलग टैब में खोलना पसंद है, ताकि हम एक में कोड लिख सकें और दूसरे में बना सकें.

edd258384bc74f1f.png

एडिटर खोलने के बाद, पक्का करें कि एडिटर कंसोल के सबसे नीचे दाएं कोने में मौजूद, Gemini का लोगो चालू हो और उसे रद्द न किया गया हो. यह भी पक्का करें कि सबसे नीचे बाएं कोने में मौजूद आपका Google Cloud प्रोजेक्ट, आपके उस मौजूदा प्रोजेक्ट पर ले जा रहा हो जिस पर आपको काम करना है. अगर वे इनऐक्टिव हैं, तो उन पर क्लिक करें, अनुमति दें, और वह Google Cloud प्रोजेक्ट चुनें जिस पर आपको उन्हें ले जाना है. इसके बाद, उन्हें चालू करें.

दोनों चालू होने के बाद, सबसे नीचे बाईं ओर मौजूद प्रोजेक्ट के नाम पर क्लिक करें. इसके बाद, "Cloud Code" टाइटल वाली पॉप-अप सूची में, नीचे की ओर स्क्रोल करके "नया ऐप्लिकेशन" पर जाएं.

db998cc557e83f40.png

उस सूची में, Cloud Run ऐप्लिकेशन चुनें. पॉप-अप होने वाली सूची में से, Java चुनें:

c7748de85120507b.png

मिलने वाली सूची में, helloworld के बजाय "bookshelf-web" प्रोजेक्ट का नाम लिखें और OK क्लिक करें.

7c58c764277c571f.png

बहुत बढ़िया! आपने Gemini की मदद से, अपने सामान्य Java Cloud Run ऐप्लिकेशन को बूटस्ट्रैप किया है. साथ ही, कॉन्फ़िगरेशन को चालू करने और चालू करने के अलावा, आपने कुछ और नहीं किया है, क्या आपको सहमत हैं?

आपको इस प्रोजेक्ट स्ट्रक्चर को देखना चाहिए:

e6be37bbee730bd1.png

फ़िलहाल, ऐप्लिकेशन को डिप्लॉय किया जा सकता है. लेकिन, हमने यह काम शुरू नहीं किया. हमें अब भी वेब ऐप्लिकेशन के मुख्य फ़ंक्शन को शामिल करना होगा. इसकी मदद से, BigQuery डेटाबेस से Analytics डेटा फ़ेच किया जाता है और उसे वेब पर दिखाया जाता है.

इसके लिए, ज़्यादा प्रॉम्प्ट जोड़े जा सकते हैं और Gemini की मदद से, कोड को धीरे-धीरे डेवलप किया जा सकता है. इसके अलावा, लॉजिक को खुद भी लिखा जा सकता है. मैं दोनों का इस्तेमाल करूंगा.

7. वेब ऐप्लिकेशन में BigQuery का इस्तेमाल करने के लिए, डिपेंडेंसी जोड़ना

ऐप्लिकेशन बूटस्ट्रैप हो गया है, इसलिए अब हम ऐप्लिकेशन के सोर्स और प्रॉपर्टी में बदलाव करने के लिए तैयार हैं. सबसे पहले, डिपेंडेंसी जोड़ें. चलिए, Gemini से इसका सुझाव मांगते हैं.

Cloud Code Editor में, पक्का करें कि स्टेटस बार में सबसे नीचे दाएं कोने में Gemini चालू हो और सबसे नीचे बाएं कोने में, चालू Google Cloud प्रोजेक्ट चुना गया हो.

Cloud Code Editor में, </dependencies> टैग के ठीक ऊपर मौजूद pom.xml फ़ाइल पर जाएं. इसके बाद, प्रॉम्प्ट वाली यह टिप्पणी टाइप करें :

171d1c40ff8124e8.png

<!-- What maven dependency should I include to access BigQuery in the app-->

मुझे यह नतीजा मिला, जैसा कि नीचे दी गई इमेज में दिखाया गया है:

2df51efd655a3557.png

सुविधा के लिए, डिपेंडेंसी यहां चिपकाई जा रही है. अगर आपके मामले में सुझाव, वर्शन टैग के साथ आता है, तो उसे अनदेखा किया जा सकता है.

<dependency>
 <groupId>com.google.cloud</groupId>
 <artifactId>google-cloud-bigquery</artifactId>
</dependency>

8. वेब पर किताबों की अलमारी का डेटा पाने के लिए, सोर्स अपडेट करना

HelloWorldController.java कोड को नीचे दी गई चीज़ों से बदलें:

package cloudcode.helloworld.web;
import java.util.UUID;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.FieldValueList;


@RestController
public final class HelloWorldController {


  /**
   * Create an endpoint for the landing page
   * @return the BigQuery analytics results string to the web
   */


  @GetMapping("/")
  public String helloWorld() throws Exception {
    /* Connect to bigquery and write a select SQL to fetch Title, Theme and Summary fields from the table `bookshelf.bookshelf_theme` if you have executed the codelab 1 of this series, if not just directly use records from gdelt-bq.internetarchivebooks.1920 table */

 
String query = "SELECT  BookMeta_Title || ' (' || Themes || ') ' as summary  from gdelt-bq.internetarchivebooks.1920 limit 10 ";


    BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    QueryJobConfiguration queryConfig =
        QueryJobConfiguration.newBuilder(query)
            .setUseLegacySql(false)
            .build();
    // Create a job ID so that we can safely retry.
    JobId jobId = JobId.of(UUID.randomUUID().toString());
    Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
    // Wait for the query to complete.
    queryJob = queryJob.waitFor();
    // Check for errors
    if (queryJob == null) {
      throw new RuntimeException("Job no longer exists");
    } else if (queryJob.getStatus().getError() != null) {
      throw new RuntimeException(queryJob.getStatus().getError().toString());
    }
    // Get the results.
    TableResult result = queryJob.getQueryResults();
    String responseString = "";
    // Print all pages of the results.
    for (FieldValueList row : result.iterateAll()) {
      responseString += row.get("summary").getStringValue() + ".         \n";
      System.out.printf("%s\n", row.get("summary").getStringValue());
    }
    return responseString;
  }
}

हमने सोर्स फ़ाइलों में ये बदलाव किए हैं:

  1. HelloWorldController.java में @Controller को @RestController से अपडेट किया गया.
  2. BigQuery में कॉल को शामिल करने के लिए, helloWorld() तरीके का कॉन्टेंट बदला गया. साथ ही, किताब के शीर्षक और थीम को सूची में शामिल करने के लिए डेटा फ़ेच करने वाली क्वेरी का एक्ज़ीक्यूशन किया गया.
  3. लोड होने पर इंडेक्स व्यू टेंप्लेट दिखाने के बजाय, इसे अपडेट किया जाता है, ताकि वेब को जवाब स्ट्रिंग के तौर पर दिखाया जा सके.

अहम जानकारी: नीचे दी गई जानकारी को अपडेट करना न भूलें

  1. मौजूदा mvc.perform(...) कॉल को हटाने के लिए, HelloWorldControllerTests.Java फ़ाइल को अपडेट करें.

कोड के बारे में ज़्यादा जानकारी देने के लिए Gemini

हमने आपको कोड दिया है और सोर्स फ़ाइलों में किए गए बदलावों के बारे में बताया है. ज़रूरत पड़ने पर, कोड की जानकारी और/या कोड पर की गई टिप्पणियां पाने के लिए, Gemini का इस्तेमाल किया जा सकता था. यहां कुछ तरीके दिए गए हैं, जिन्हें आज़माया जा सकता है:

  1. IDE में HelloWorldController.java फ़ाइल खोलकर, IDE में चैट पैनल पर जाएं और यह प्रॉम्प्ट दें: इसके बारे में बताएं. Gemini की ओर से दी गई पूरी जानकारी देखें. कोड के बारे में ज़्यादा जानकारी पाने के लिए, इस लिंक का इस्तेमाल किसी भी समय किया जा सकता है.
  2. कोड में किसी खास स्निपेट या लाइन को हाइलाइट किया जा सकता है.जैसे, @GetMapping("/"). इसके बाद, इस प्रॉम्प्ट का इस्तेमाल करें: इसकी जानकारी दें. इससे, सिर्फ़ उस कोड या स्निपेट की लाइन के बारे में पूरी जानकारी मिलेगी जिसे आपने चुना है.
  3. आप कुछ ऐसी क्वेरी को भी आज़मा सकते हैं जो कोड के बारे में अलग तरीके से पूछताछ करती हैं. उदाहरण के लिए, कोड की यह लाइन चुनी जा सकती है

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

और यह क्वेरी पूछें "अगर bigquery वैरिएबल शून्य है, तो क्या होगा?" 4. Gemini की मदद से, कोड में सुधार करने या उसे फिर से बनाने का अनुरोध भी किया जा सकता है. उदाहरण के लिए, helloWorld() तरीके के लिए पूरा कोड चुना जा सकता है और यह प्रॉम्प्ट दिया जा सकता है: "मैं इस कोड को कैसे बेहतर या फिर से लिखूं?". Gemini से मिलने वाले सुझाव देखें.

9. बिल्ड और डिप्लॉय करना

Cloud Shell Terminal पर जाएं. पक्का करें कि यह टर्मिनल में आपके प्रोजेक्ट आईडी पर ले जाता हो.

4b3392dd050340a3.png

cd कमांड का इस्तेमाल करके, प्रोजेक्ट डायरेक्ट्री पर जाएं:

cd bookshelf-web

यह पक्का करने के लिए कि आपका ऐप्लिकेशन स्थानीय तौर पर चल रहा है, नीचे दिए गए निर्देशों को एक-एक करके चलाएं.

mvn package

mvn spring-boot:run

अब, "Web Preview" बटन पर क्लिक करें और "port 8080 पर प्रीव्यू करें" विकल्प पर क्लिक करें, जैसा कि यहां दिखाया गया है:

ea9464498b6bd9df.png

पक्का करें कि आपको क्लाउड शेल मशीन पर, स्थानीय तौर पर चल रहा ऐप्लिकेशन दिख रहा हो.

चलिए, अब Gemini से पूछें कि इस वेब ऐप्लिकेशन को Cloud Run पर कैसे डिप्लॉय किया जाए. Google Cloud Console में "Gemini खोलें" बटन पर क्लिक करके, Gemini Chat पर जाएं.

मेरा प्रॉम्प्ट यह है:

What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?

जवाब यहां दिया गया है:

6f21c2d59b6dc416.png

आइए, gcloud कमांड में सेवा के नाम और क्षेत्र के प्लेसहोल्डर को बदलें, जैसा कि नीचे दिए गए स्निपेट में दिखाया गया है:

gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION

इस कमांड को Cloud Shell टर्मिनल से चलाएं. आपको कुछ फ़ॉलो-अप सवाल दिखेंगे. सही जवाब चुनें. इसके बाद, आपको डिप्लॉयमेंट की प्रोसेस दिखेगी:

66f5d6e00c16a4db.png

इसमें कुछ मिनट लगते हैं. इसके बाद, ऐप्लिकेशन को बिना सर्वर के Google Cloud पर डिप्लॉय किया जाता है. Cloud Run पर डिप्लॉय किए गए ऐप्लिकेशन पर क्लिक करें और वेब पर नतीजा देखें:

fd342d8f16e664ab.png

10. बधाई हो

बधाई हो! हमने Gemini का इस्तेमाल करके, किताबों की अलमारी का आंकड़ा जुटाने के लिए, Java Cloud Run वेब ऐप्लिकेशन को बनाया, डिप्लॉय किया, और उसकी जांच की है. फ़ॉलोअप टास्क के तौर पर, Gemini से पूछें कि Google Cloud Console से डिप्लॉय की गई Cloud Run सेवा को कैसे मिटाएं. इसके बाद, संसाधन को हटाने के लिए, उसके जवाब में दिए गए निर्देशों का पालन करें.