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

1. परिचय

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

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

हमारा इस्तेमाल का उदाहरण इन चार मुख्य कॉम्पोनेंट पर आधारित है:

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

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

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

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

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

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

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

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

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

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

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

  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. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं
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 से पूछते हैं, ठीक है? हालांकि, इससे पहले यह याद रखें कि:

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

Google Cloud कंसोल में खोज बार के बगल में सबसे ऊपर दाएं कोने में मौजूद, "Gemini खोलें" आइकॉन पर क्लिक करके, 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 (title)
  • थीम (थीम को ‘;' से अलग किया गया है)
  • BookMeta_FullText (किताब का पूरा टेक्स्ट)

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

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

edd258384bc74f1f.png

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

दोनों के चालू होने के बाद, नीचे बाएं कोने में मौजूद प्रोजेक्ट के नाम पर क्लिक करें. इसके बाद, "क्लाउड कोड" नाम की जो पॉप-अप सूची खुलेगी उसमें नीचे की ओर स्क्रोल करके, "नया ऐप्लिकेशन" पर जाएं.

db998cc557e83f40.png

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

c7748de85120507b.png

नतीजे के तौर पर मिली सूची में, helloworld की जगह प्रोजेक्ट का नाम "bookshelf-web" डालें. इसके बाद, ठीक है पर क्लिक करें.

7c58c764277c571f.png

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

आपको प्रोजेक्ट का यह स्ट्रक्चर दिखेगा:

e6be37bbee730bd1.png

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

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

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

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

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

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

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. helloWorld() तरीके के कॉन्टेंट को बदलकर, BigQuery को कॉल करने की सुविधा शामिल की गई है. साथ ही, क्वेरी को एक्ज़ीक्यूट करने की सुविधा भी शामिल की गई है. इससे किताब का टाइटल और थीम की सूची बनाने के लिए डेटा फ़ेच किया जा सकता है.
  3. लोड होने पर इंडेक्स व्यू टेंप्लेट दिखाने के बजाय, इसे वेब पर स्ट्रिंग के तौर पर जवाब दिखाने के लिए अपडेट किया जाता है.

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

  1. HelloWorldControllerTests.Java फ़ाइल को अपडेट करें, ताकि मौजूदा mvc.perform(...) इनवोकेशन पर टिप्पणी की जा सके.

Gemini for Code Explanation

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

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

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

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

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

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

4b3392dd050340a3.png

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

cd bookshelf-web

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

mvn package

mvn spring-boot:run

अब, "वेब प्रीव्यू" बटन पर क्लिक करें. इसके बाद, नीचे दिए गए तरीके से "पोर्ट 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 सेवा को कैसे मिटाया जाए. संसाधन को हटाने के लिए, Gemini के बताए गए चरणों का पालन करें.