تجزیه و تحلیل قفسه کتاب: از Gemini برای ایجاد یک برنامه Java Cloud Run استفاده کنید که داده های BigQuery را به وب می برد.

1. مقدمه

آیا عاشق کندوکاو در کتاب ها هستید اما از حجم زیاد انتخاب ها غرق می شوید؟ تصور کنید یک برنامه مجهز به هوش مصنوعی دارید که نه تنها خواندن کامل را توصیه می کند، بلکه خلاصه ای مختصر را بر اساس ژانر انتخابی شما ارائه می دهد و به شما نگاهی اجمالی به ماهیت کتاب می دهد. در این کد، من شما را در ساخت چنین برنامه‌ای با BigQuery، Vertex AI و Cloud Run با کمک Gemini راهنمایی می‌کنم.

بررسی اجمالی پروژه

مورد استفاده ما حول این 4 جزء کلیدی متمرکز است:

  • پایگاه داده کتاب: مجموعه داده عمومی گسترده BigQuery از کتاب های آرشیو اینترنتی به عنوان کاتالوگ کتاب جامع ما عمل خواهد کرد.
  • موتور خلاصه‌سازی هوش مصنوعی: توابع ابری Google، مجهز به مدل زبان Gemini-Pro، خلاصه‌های روشن‌گری را متناسب با درخواست‌های کاربر تولید می‌کند.
  • یکپارچه‌سازی BigQuery: یک تابع راه دور در BigQuery که تابع Cloud ما را برای ارائه خلاصه‌ها و مضامین درخواستی کتاب فراخوانی می‌کند.
  • رابط کاربری: یک برنامه وب میزبانی شده در Cloud Run که یک برنامه وب را برای مشاهده نتایج به کاربران ارائه می دهد.

ما کل اجرای پروژه را به 3 کد لبه تقسیم کرده ایم، و این کد لبه کدلب 3 را در لیست زیر پوشش می دهد:

Codelab 1: از Gemini برای ایجاد یک تابع ابری جاوا برای برنامه Gemini استفاده کنید.

Codelab 2: از Gemini برای ساخت برنامه های کاربردی هوش مصنوعی مولد فقط SQL با BigQuery استفاده کنید.

Codelab 3: از Gemini برای ایجاد یک برنامه وب Java Spring Boot که با BigQuery تعامل دارد، استفاده کنید.

2. از Gemini برای ساختن یک برنامه وب Spring Boot با BigQuery استفاده کنید

چیزی که خواهی ساخت

  • مجموعه داده و جدول BigQuery لازم را ایجاد کنید.
  • برنامه وب Java Spring Boot که با BigQuery تعامل می کند تا داده ها و نمایش کتاب ها را در وب دریافت کند.
  • این برنامه در Cloud Run مستقر شده است.
  • این مراحل را با کمک جمینی اجرا خواهید کرد.

3. الزامات

  • مرورگری مانند کروم یا فایرفاکس
  • یک پروژه Google Cloud با فعال کردن صورت‌حساب
  • اگر تابع Cloud را به‌عنوان بخشی از بخش 1 Codelab مستقر کرده باشید ، مفید است.
  • مشروط: اگر در این زمان به پیوند رایگان Google Cloud Credits دسترسی دارید (که ممکن است توسط سازمان‌دهنده کارگاه برای شما ارائه شده باشد)، از دستورالعمل‌های موجود در صفحه زیر برای تکمیل مراحل CREDITS ACTIVATION و PROJECT CREATION از قبل استفاده کنید. اگر این پیوند را ندارید، مراحل پیش نیاز پروژه و صورتحساب را در زیر ادامه دهید:

پروژه خود را ایجاد کنید

اگر قبلاً یک حساب صورت‌حساب را فعال کرده‌اید و با استفاده از پیوند ذکر شده در مرحله شرطی بالا پروژه ایجاد کرده‌اید، می‌توانید مراحل زیر را نادیده بگیرید.

  1. در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید.
  2. مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورت‌حساب در پروژه آشنا شوید.

Cloud Shell را فعال کنید

  1. شما از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان در حال اجرا در Google Cloud که با bq از قبل بارگذاری شده است:

از Cloud Console، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:

6757b2fb50ddcc2d.png

  1. پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است. برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد
gcloud config list project
  1. اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>

برای دستورات و استفاده از gcloud به اسناد مراجعه کنید.

4. فعال کردن Gemini و APIهای ضروری

Gemini را فعال کنید

  1. برای فعال کردن API به Gemini Marketplace بروید. همچنین می توانید از دستور زیر استفاده کنید:

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

  1. از صفحه جمینی دیدن کنید و روی «شروع چت» کلیک کنید.

سایر API های ضروری را فعال کنید

چگونه این کار را انجام دهیم؟ بیایید این را از جوزا بپرسیم، درست است؟ اما قبل از آن به یاد داشته باشید:

توجه: LLM ها غیر قطعی هستند. بنابراین در حالی که شما این دستورات را امتحان می‌کنید، ممکن است پاسخی که دریافت می‌کنید متفاوت از پاسخ‌های موجود در اسکرین‌شات من باشد.

با کلیک بر روی نماد "Open Gemini" در گوشه سمت راست بالا در مجاورت نوار جستجو در کنسول Google Cloud به کنسول چت 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 که حاوی اطلاعاتی در مورد چندین کتاب آرشیو اینترنتی است، شروع کنید. اگر نمی‌توانید از این پیوند روی مجموعه داده‌های آرشیو کتاب‌های اینترنتی بیایید، برای کاوش مجموعه داده‌ها مراحل زیر را دنبال کنید یا این مستندات را دنبال کنید:

می توانید این مجموعه داده عمومی را در صفحه کاوشگر BigQuery پیدا کنید. وقتی روی کنسول BigQuery قرار می گیرید، می توانید آن را در سمت چپ پیدا کنید.

39e2ac03cc99cbac.png

"gdelt-bq" یا "internetarchivebooks" را در نوار جستجو تایپ کنید و روی SEARCH ALL PROJECTS کلیک کنید. همانطور که در تصویر زیر نشان داده شده است، کتاب های آرشیو اینترنتی نتیجه و ستاره را گسترش دهید:

68dba68a79cddfc9.png .

مجموعه داده را گسترش دهید، روی gdelt-bq.internetarchivebooks کلیک کنید و سپس داده ها را در جدول 1920 پیش نمایش کنید. این جدول شامل کتاب های سال 1920 بایگانی شده است.

برای نگاهی به طرحی که در بخش های بعدی استفاده خواهیم کرد، کوئری زیر را اجرا کنید:

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

ما از سه فیلد زیر برای Codelab خود استفاده خواهیم کرد:

  • BookMeta_Title (عنوان)
  • تم ها (موضوعات جدا شده با ";")
  • BookMeta_FullText (متن کامل کتاب)

6. قالب اصلی Java Cloud Run را با Gemini ایجاد کنید

با کلیک بر روی نماد Open Editor در گوشه سمت راست بالای ترمینال Cloud Shell خود، Cloud Shell Editor را باز کنید (من معمولا ترجیح می دهم ترمینال و ویرایشگر را در برگه های جداگانه به صورت موازی باز کنیم تا بتوانیم در یکی کد بنویسیم و در دیگری ایجاد کنیم).

edd258384bc74f1f.png

هنگامی که ویرایشگر را باز کردید، مطمئن شوید که لوگوی Gemini در گوشه سمت راست پایین کنسول ویرایشگر فعال است (و لغو نشده است). همچنین مطمئن شوید که پروژه Google Cloud شما در گوشه سمت چپ پایین به پروژه فعال فعلی شما اشاره می کند که می خواهید با آن کار کنید. اگر آنها غیرفعال هستند، روی آنها کلیک کنید، مجوز دهید، پروژه Google Cloud را که می خواهید به آن اشاره کند انتخاب کنید و آنها را فعال کنید.

پس از فعال شدن هر دو، روی نام پروژه در گوشه سمت چپ پایین کلیک کنید و در لیست پاپ آپی که با عنوان "Cloud Code" باز می شود، به سمت "برنامه جدید" بروید.

db998cc557e83f40.png

در آن لیست، برنامه Cloud Run را انتخاب کنید. از لیستی که ظاهر می شود، جاوا را انتخاب کنید:

c7748de85120507b.png

در لیست به دست آمده، به جای helloworld، نام پروژه "bookshelf-web" را تایپ کنید و روی OK کلیک کنید.

7c58c764277c571f.png

هورا! شما برنامه ساده Java Cloud Run خود را با Gemini بوت استرپ کرده اید و به جز فعال کردن و فعال سازی تنظیمات کار زیادی انجام نداده اید، موافقید؟

این ساختار پروژه است که باید ببینید:

e6be37bbee730bd1.png

در حال حاضر، شما خوب هستید که برنامه را اجرا کنید. اما به این دلیل این کار را شروع نکردیم. ما هنوز باید عملکرد اصلی برنامه وب را در نظر بگیریم که این است که داده های تجزیه و تحلیل را از پایگاه داده BigQuery واکشی کنیم و آن را در وب نمایش دهیم.

برای انجام این کار، شما آزاد هستید که دستورات بیشتری اضافه کنید و کد خود را به صورت تدریجی با Gemini توسعه دهید یا منطق را خودتان بنویسید. من به ترکیبی از هر دو می روم.

7. برای استفاده از BigQuery در برنامه وب، وابستگی ها را اضافه کنید

اکنون که برنامه بوت استرپ شده است، آماده هستیم تا تغییراتی در منبع و ویژگی های برنامه ایجاد کنیم. ابتدا بیایید وابستگی ها را اضافه کنیم. بیایید از Gemini بخواهیم آن را توصیه کند.

در ویرایشگر کد Cloud، مطمئن شوید که نوار وضعیت Gemini را فعال در گوشه سمت راست پایین و پروژه فعال Google Cloud را در گوشه پایین سمت چپ انتخاب شده نشان می‌دهد.

در ویرایشگر کد Cloud به فایل 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 کنترلر @ را به @RestController به روز کرد.
  2. محتوای متد helloWorld() جایگزین فراخوانی به BigQuery، اجرای کوئری که داده‌ها را برای فهرست کردن عنوان و مضامین کتاب واکشی می‌کند، شد.
  3. به جای بازگرداندن الگوی نمایه نمایه در بارگذاری، به روز می شود تا پاسخ را به صورت رشته ای به وب برگرداند.

نکته مهم: به یاد داشته باشید که موارد زیر را به روز کنید

  1. فایل HelloWorldControllerTests.Java را به‌روزرسانی کنید تا فراخوانی mvc.perform(...) فعلی را توضیح دهید.

Gemini برای توضیح کد

ما کد را در اختیار شما قرار دادیم و تغییراتی را که در فایل های منبع انجام دادیم شرح دادیم. می‌توانید از Gemini برای دریافت توضیحات کد و/یا نظرات کد در صورت نیاز استفاده کنید. در اینجا چند چیز وجود دارد که می توانید آنها را امتحان کنید:

  1. با باز کردن فایل HelloWorldController.java در IDE، به پنل چت در IDE بروید و اعلان زیر را ارائه دهید: این را توضیح دهید . توضیحات مفصلی که Gemini ارائه می دهد را بررسی کنید. این می تواند توسط شما در هر زمان برای دریافت توضیحاتی در مورد کد استفاده شود.
  2. می توانید هر قطعه یا خط خاصی را در کد برجسته کنید (مثلا @GetMapping("/") ) و سپس از دستور زیر استفاده کنید: این را توضیح دهید. این توضیح مفصلی را فقط در خط کد یا قطعه ای که انتخاب کرده اید ارائه می دهد.
  3. حتی می توانید برخی از پرس و جوهایی را امتحان کنید که در مورد کد به روشی متفاوت پرس و جو می کنند. به عنوان مثال می توانید خط کد زیر را انتخاب کنید

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

و سوال زیر را بپرسید "اگر متغیر bigquery null باشد چه اتفاقی خواهد افتاد؟" 4. همچنین می توانید با کمک Gemini درخواست بهبود کد یا refactoring کنید. به عنوان مثال، می توانید کل کد را برای متد helloWorld() انتخاب کنید و اعلان زیر را بدهید: "چگونه می توانم این کد را بهبود یا اصلاح کنم؟" . پیشنهاداتی را که Gemini ارائه می دهد بررسی کنید.

9. ساخت و استقرار

به ترمینال Cloud Shell بروید. مطمئن شوید که به شناسه پروژه شما در ترمینال اشاره می کند.

4b3392dd050340a3.png

با استفاده از دستور cd وارد فهرست پروژه شوید:

cd bookshelf-web

دستورات زیر را یکی یکی اجرا کنید تا مطمئن شوید برنامه شما به صورت محلی اجرا می شود.

mvn package

mvn spring-boot:run

اکنون روی دکمه «Web Preview» کلیک کنید و روی گزینه «Preview on port 8080» مانند شکل زیر کلیک کنید:

ea9464498b6bd9df.png

مطمئن شوید که می‌توانید برنامه را در حال اجرا به صورت محلی در دستگاه پوسته ابری خود مشاهده کنید.

حال، بیایید از Gemini بپرسیم که چگونه این برنامه وب را در Cloud Run استقرار دهیم. با کلیک بر روی دکمه "Open Gemini" در Google Cloud Console به 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. تبریک می گویم

تبریک می گویم! ما با موفقیت یک برنامه وب Java Cloud Run را برای انجام تجزیه و تحلیل قفسه کتاب با استفاده از Gemini ساخته، استقرار و آزمایش کرده ایم. به عنوان یک کار بعدی، از Gemini بپرسید که چگونه سرویس Cloud Run را از Google Cloud Console حذف کند و مراحلی را که با آن پاسخ می دهد دنبال کنید تا منبع را پاک کنید.