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

۱. مقدمه

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

نمای کلی پروژه

مورد استفاده ما حول این ۴ مؤلفه کلیدی متمرکز است:

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

ما کل پیاده‌سازی پروژه را به ۳ آزمایشگاه کد تقسیم کرده‌ایم و این آزمایشگاه کد، آزمایشگاه کد ۳ را در لیست زیر پوشش می‌دهد:

آزمایشگاه کد ۱: استفاده از Gemini برای ساخت یک تابع ابری جاوا برای یک برنامه Gemini.

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

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

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

آنچه خواهید ساخت

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

۳. الزامات

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

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

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

فعال کردن پوسته ابری

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

از کنسول ابری، روی فعال کردن پوسته ابری در گوشه بالا سمت راست کلیک کنید:

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 به مستندات مراجعه کنید.

۴. فعال کردن جمینی و API های لازم

فعال کردن جمینی

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

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

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

فعال کردن سایر API های لازم

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

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

با کلیک روی آیکون «باز کردن جمینی» در گوشه بالا سمت راست، کنار نوار جستجو در کنسول گوگل کلود، به کنسول چت جمینی بروید.

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

۵. مجموعه داده‌های عمومی BigQuery را برای داده‌های کتاب‌ها بررسی کنید

با آشنایی با مجموعه داده‌های عمومی BigQuery که حاوی اطلاعات مربوط به کتاب‌های آرشیو اینترنتی متعدد است، شروع کنید. اگر نمی‌توانید از این لینک به مجموعه داده‌های internetarchivebooks دسترسی پیدا کنید، می‌توانید مراحل زیر را برای بررسی مجموعه داده‌ها دنبال کنید یا به طور جایگزین، این مستندات را دنبال کنید:

می‌توانید این مجموعه داده عمومی را در پنل اکسپلورر BigQuery پیدا کنید. می‌توانید این را در سمت چپ، هنگام ورود به کنسول BigQuery پیدا کنید.

39e2ac03cc99cbac.png

در نوار جستجو عبارت "gdelt-bq" یا "internetarchivebooks" را تایپ کنید و روی "جستجوی همه پروژه‌ها" کلیک کنید. در نتایج جستجو، گزینه "باز کردن" را انتخاب کنید و کتاب‌های بایگانی اینترنتی را مطابق تصویر زیر ستاره‌دار کنید:

68dba68a79cddfc9.png .

مجموعه داده‌ها را باز کنید، روی gdelt-bq.internetarchivebooks کلیک کنید و سپس داده‌های جدول ۱۹۲۰ را پیش‌نمایش کنید. این جدول شامل کتاب‌های بایگانی‌شده از سال ۱۹۲۰ است.

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

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

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

  • عنوان کتاب (عنوان)
  • قالب‌ها (قالب‌ها با ';' از هم جدا شده‌اند)
  • BookMeta_FullText (متن کامل کتاب)

۶. الگوی پایه Java Cloud Run را با Gemini ایجاد کنید

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

edd258384bc74f1f.png

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

وقتی هر دو فعال شدند، روی نام پروژه در گوشه پایین سمت چپ کلیک کنید و در لیست پاپ‌آپ که با عنوان «Cloud Code» باز می‌شود، به پایین اسکرول کنید تا به «New Application» برسید.

db998cc557e83f40.png

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

c7748de85120507b.png

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

7c58c764277c571f.png

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

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

e6be37bbee730bd1.png

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

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

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

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

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

در ویرایشگر کد ابری، به فایل pom.xml بروید، درست بالای تگ </dependencies> ، عبارت زیر را در قسمت توضیحات سریع تایپ کنید:

۱۷۱d1c40ff8124e8.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>

۸. به‌روزرسانی منبع برای دریافت داده‌های قفسه کتاب در وب

کد 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 برای دریافت توضیحات کد و/یا نظرات مربوط به کد در صورت نیاز استفاده کنید. در اینجا چند نکته وجود دارد که می‌توانید امتحان کنید:

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

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

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

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

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

4b3392dd050340a3.png

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

cd bookshelf-web

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

mvn package

mvn spring-boot:run

حالا، روی دکمه‌ی «پیش‌نمایش وب» کلیک کنید و مطابق شکل زیر، گزینه‌ی «پیش‌نمایش روی پورت ۸۰۸۰» را انتخاب کنید:

ea9464498b6bd9df.png

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

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

۱۰. تبریک

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