1. مقدمة
هل تحب قراءة الكتب ولكنك تشعر بالحيرة بسبب كثرة الخيارات؟ تخيَّل أن لديك تطبيقًا يستند إلى الذكاء الاصطناعي ولا يكتفي باقتراح القراءة المثالية فحسب، بل يقدّم أيضًا ملخّصًا موجزًا استنادًا إلى النوع الذي تختاره، ما يمنحك لمحة عن جوهر الكتاب. في هذا الدرس التطبيقي حول الترميز، سأشرح لك كيفية إنشاء تطبيق من هذا النوع باستخدام BigQuery وVertex AI وCloud Run بمساعدة Gemini.
نظرة عامة على المشروع
تتمحور حالة الاستخدام حول هذه المكوّنات الرئيسية الأربعة:
- قاعدة بيانات الكتب: ستكون مجموعة البيانات العامة الشاملة الخاصة بكتب أرشيف الإنترنت في BigQuery بمثابة فهرس الكتب الشامل.
- محرّك التلخيص المستند إلى الذكاء الاصطناعي: ستنشئ "وظائف Google Cloud"، المزوّدة بنموذج اللغة Gemini-Pro، ملخّصات مفيدة مخصّصة لطلبات المستخدمين.
- دمج BigQuery: هي دالة عن بُعد ضمن BigQuery تستدعي "دالة السحابة الإلكترونية" لتقديم ملخّصات ومواضيع الكتب عند الطلب.
- واجهة المستخدم: تطبيق ويب مستضاف على Cloud Run يوفّر تطبيق ويب للمستخدمين لعرض النتائج.
لقد قسّمنا عملية تنفيذ المشروع بأكملها إلى 3 دروس تطبيقية حول الترميز، ويتناول هذا الدرس التطبيقي حول الترميز الدرس رقم 3 في القائمة أدناه:
الدرس التطبيقي حول الترميز 1: استخدام Gemini لإنشاء دالة Java Cloud Function لتطبيق 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.
- ستنفّذ هذه الخطوات بمساعدة Gemini.
3- المتطلبات
- متصفّح، مثل Chrome أو Firefox
- مشروع على السحابة الإلكترونية من Google Cloud تم تفعيل الفوترة فيه
- من المفيد أن تكون قد نشرت Cloud Function كجزء من الدرس التطبيقي حول الترميز في الجزء 1 استخدام Gemini لإنشاء دالة Java Cloud Function لتطبيق ذكاء اصطناعي توليدي.
- شرطية: إذا كان بإمكانك الوصول في هذا الوقت إلى رابط أرصدة Google Cloud المجانية (الذي قد يكون قد وفّره لك منظّم ورشة العمل)، اتّبِع التعليمات الواردة في الصفحة أدناه لإكمال خطوات تفعيل الأرصدة وإنشاء المشروع مسبقًا. إذا لم يكن لديك هذا الرابط، يُرجى اتّباع خطوات المتطلبات الأساسية للمشروع والفوترة أدناه:
إنشاء مشروعك
يمكنك تخطّي الخطوات أدناه إذا سبق لك تفعيل حساب فوترة وإنشاء مشروع باستخدام الرابط المذكور في الخطوة الشرطية أعلاه.
- في Google Cloud Console، ضمن صفحة اختيار المشروع، اختَر مشروعًا على Google Cloud أو أنشِئه.
- تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
تفعيل Cloud Shell
- ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ومحمّلة مسبقًا بأداة bq:
من Cloud Console، انقر على "تفعيل Cloud Shell" في أعلى يسار الصفحة:

- بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك. نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:
gcloud auth list
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك
gcloud config list project
- إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <YOUR_PROJECT_ID>
راجِع المستندات لمعرفة أوامر gcloud وطريقة استخدامها.
4. تفعيل Gemini وواجهات برمجة التطبيقات اللازمة
تفعيل Gemini
- انتقِل إلى Gemini Marketplace لتفعيل واجهة برمجة التطبيقات. يمكنك أيضًا استخدام الأمر التالي:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- انتقِل إلى صفحة Gemini وانقر على "بدء محادثة".
تفعيل واجهات برمجة التطبيقات الأخرى اللازمة
كيف يمكننا تحقيق ذلك؟ لنسأل Gemini عن ذلك، هل توافق؟ ولكن قبل ذلك، تذكَّر ما يلي:
ملاحظة: نماذج اللغات الكبيرة غير قطعية. لذلك، أثناء تجربة هذه الطلبات، قد يختلف الرد الذي تتلقّاه عن الردود الواردة في لقطة الشاشة.
انتقِل إلى وحدة تحكّم محادثة Gemini من خلال النقر على رمز "فتح Gemini" في أعلى يسار الصفحة بجانب شريط البحث في وحدة تحكّم Google Cloud.

اكتب هذا السؤال في قسم "إدخال طلب هنا":
How do I enable the BigQuery and Cloud Run apis using gcloud command?
ستتلقّى الردّ كما هو موضّح في الصورة التالية:

انسخ هذا الرمز (يمكنك استخدام رمز النسخ في أعلى مقتطف الأمر) ونفِّذه في وحدة طرفية Cloud Shell لتفعيل الخدمات المعنية:
- bigquery.googleapis.com
- run.googleapis.com
5- استكشاف مجموعة بيانات BigQuery العامة لبيانات الكتب
ابدأ بالتعرّف على مجموعة بيانات BigQuery العامة التي تحتوي على معلومات حول العديد من كتب أرشيف الإنترنت. إذا لم تتمكّن من الوصول إلى مجموعة بيانات internetarchivebooks من هذا الرابط، يمكنك اتّباع الخطوات أدناه لاستكشاف مجموعة البيانات أو اتّباع هذه المستندات بدلاً من ذلك:
يمكنك العثور على مجموعة البيانات العامة هذه في جزء "مستكشف BigQuery". يمكنك العثور على ذلك في الجانب الأيمن عند الانتقال إلى وحدة تحكّم BigQuery.

اكتب "gdelt-bq" أو "internetarchivebooks" في شريط البحث وانقر على "البحث في جميع المشاريع". وسِّع النتيجة وامنح كتب Internet Archive نجمة كما هو موضّح في الصورة أدناه:
.
وسِّع مجموعة البيانات، وانقر على gdelt-bq.internetarchivebooks، ثم عاين البيانات في جدول 1920. يتضمّن هذا الجدول كتبًا مؤرشفة من عام 1920.
لإلقاء نظرة على المخطط الذي سنستخدمه في الأقسام اللاحقة، نفِّذ طلب البحث التالي:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
سنستخدم الحقول الثلاثة التالية في الدرس التطبيقي:
- BookMeta_Title (title)
- المواضيع (المواضيع مفصولة بعلامة ";")
- BookMeta_FullText (النص الكامل للكتاب)
6. إنشاء نموذج Java Cloud Run الأساسي باستخدام Gemini
افتح "محرِّر Cloud Shell" من خلال النقر على رمز "فتح المحرِّر" في أعلى يسار "وحدة Cloud Shell الطرفية" (أفضّل عادةً فتح الوحدة الطرفية والمحرِّر في علامات تبويب منفصلة بالتوازي حتى نتمكّن من كتابة الرمز في إحداهما وإنشائه في الأخرى).

بعد فتح المحرّر، تأكَّد من أنّ شعار Gemini في أسفل يسار نافذة المحرّر مفعّل (وليس مشطوبًا). تأكَّد أيضًا من أنّ مشروع Google Cloud في أسفل يمين الصفحة يشير إلى مشروعك النشط الحالي الذي تريد العمل عليه. إذا كانت غير نشطة، انقر عليها، ثم امنح الإذن، واختَر مشروع Google Cloud الذي تريد أن تشير إليه، ثم فعّلها.
بعد تفعيل كليهما، انقر على اسم المشروع في أسفل يسار الصفحة، وفي القائمة المنبثقة التي تفتح بعنوان "رمز السحابة" (Cloud Code)، انتقِل للأسفل إلى "تطبيق جديد" (New Application).

في تلك القائمة، اختَر تطبيق Cloud Run. من القائمة المنبثقة، اختَر Java:

في القائمة الناتجة، اكتب اسم المشروع "bookshelf-web" بدلاً من helloworld وانقر على "حسنًا".

رائع! لقد أعددت تطبيق Java بسيطًا على Cloud Run باستخدام Gemini، ولم تفعل الكثير باستثناء تفعيل إعدادات التفعيل، أليس كذلك؟
هذه هي بنية المشروع التي من المفترض أن تظهر لك:

يمكنك الآن نشر التطبيق. لكنّ هذا ليس السبب الذي دفعنا إلى إطلاق هذه الميزة. ما زلنا بحاجة إلى تضمين الوظيفة الرئيسية لتطبيق الويب، وهي جلب بيانات الإحصاءات من قاعدة بيانات BigQuery وعرضها على الويب.
لإجراء ذلك، يمكنك إضافة المزيد من الطلبات وتطوير الرمز بشكل تدريجي باستخدام Gemini أو كتابة المنطق بنفسك. سأختار مزيجًا من الاثنين.
7. إضافة التبعيات لاستخدام BigQuery في تطبيق الويب
بعد إعداد التطبيق، أصبحنا جاهزين لإجراء تغييرات على مصدر التطبيق وخصائصه. أولاً، لنضِف التبعيات. لنطلب من Gemini أن يقترحها علينا.
في "أداة تعديل Cloud Code"، تأكَّد من أنّ شريط الحالة يعرض Gemini نشطًا في أسفل يسار الصفحة وأنّ مشروع Google Cloud النشط محدّد في أسفل يمين الصفحة.
في "محرّر رمز Cloud"، انتقِل إلى ملف pom.xml، وفوق علامة </dependencies> مباشرةً، اكتب تعليق الطلب التالي :

<!-- What maven dependency should I include to access BigQuery in the app-->
حصلتُ على هذه النتيجة كما هو موضّح في الصورة أدناه:

ألصقنا هنا الاعتمادية لتسهيل الأمر. إذا ظهر الاقتراح مع علامة إصدار في حالتك، يمكنك تجاهل ذلك.
<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;
}
}
أجرينا التغييرات التالية على ملفات المصدر:
- في HelloWorldController.java، تم تعديل @Controller إلى @RestController.
- تم استبدال محتوى طريقة helloWorld() لتضمين طلب إلى BigQuery، وتنفيذ طلب البحث الذي يجلب البيانات لعرض عنوان الكتاب ومواضيعه.
- بدلاً من عرض نموذج صفحة الفهرس عند التحميل، يتم تعديله لعرض الرد كسلسلة على الويب.
ملاحظة مهمة: يُرجى تذكُّر تعديل ما يلي
- عدِّل ملف HelloWorldControllerTests.Java لإضافة تعليق إلى استدعاء mvc.perform(...) الحالي.
Gemini لشرح الرموز البرمجية
لقد قدّمنا لك الرمز البرمجي وشرحنا التغييرات التي أجريناها على ملفات المصدر. كان بإمكانك أيضًا استخدام Gemini للحصول على تفسيرات و/أو تعليقات على الرموز البرمجية حسب الحاجة. في ما يلي بعض الإجراءات التي يمكنك تجربتها:
- مع فتح ملف HelloWorldController.java في بيئة التطوير المتكاملة، انتقِل إلى "لوحة المحادثة" في بيئة التطوير المتكاملة وقدِّم الطلب التالي: اشرح هذا. اطّلِع على الشرح التفصيلي الذي يقدّمه Gemini. يمكنك استخدام هذه الميزة في أي وقت للحصول على بعض التوضيحات حول الرمز.
- يمكنك تمييز أي مقتطف أو سطر محدّد في الرمز (مثل @GetMapping("/") )، ثم استخدام الطلب التالي: Explain this. سيوفّر ذلك شرحًا تفصيليًا فقط لسطر الرمز أو المقتطف الذي اخترته.
- يمكنك حتى تجربة بعض طلبات البحث التي تستفسر عن الرمز بطريقة مختلفة. على سبيل المثال، يمكنك اختيار سطر الرمز التالي
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
وطرح طلب البحث التالي "ماذا سيحدث إذا كان متغير BigQuery قيمة فارغة؟" 4. يمكنك أيضًا طلب تحسينات على الرمز أو إعادة هيكلته بمساعدة Gemini. على سبيل المثال، يمكنك اختيار الرمز الكامل للطريقة helloWorld() وتقديم الطلب التالي: "كيف يمكنني تحسين هذا الرمز أو إعادة تصنيعه؟". اطّلِع على الاقتراحات التي يقدّمها Gemini.
9- إنشاء التطبيق ونشره
انتقِل إلى وحدة طرفية في Cloud Shell. تأكَّد من أنّها تشير إلى رقم تعريف مشروعك في نافذة الوحدة الطرفية.

انتقِل إلى دليل المشروع باستخدام الأمر cd:
cd bookshelf-web
نفِّذ الأوامر أدناه واحدًا تلو الآخر للتأكّد من أنّ تطبيقك يعمل على الجهاز.
mvn package
mvn spring-boot:run
الآن، انقر على الزر "معاينة الويب" (Web Preview) ثم على الخيار "معاينة على المنفذ 8080" (Preview on port 8080) كما هو موضّح أدناه:

تأكَّد من إمكانية رؤية التطبيق وهو يعمل على جهازك المحلي في Cloud Shell.
لنطلب الآن من Gemini معرفة كيفية نشر تطبيق الويب هذا على Cloud Run. انتقِل إلى Gemini Chat من خلال النقر على الزر "فتح Gemini" في Google Cloud Console.
إليك طلبي:
What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?
في ما يلي الردّ:

لنستبدل عناصر نائب اسم الخدمة والمنطقة في أمر gcloud كما هو موضّح في المقتطف أدناه:
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
نفِّذ هذا الأمر من "وحدة Cloud Shell الطرفية". ستظهر لك بعض الأسئلة المتابعة، اختَر الردود المناسبة، وسيصبح بإمكانك الاطّلاع على عملية النشر قيد التقدّم:

تستغرق هذه العملية بضع دقائق ويتم نشر التطبيق على Google Cloud بدون خادم. انقر على التطبيق الذي تم نشره على Cloud Run واطّلِع على النتيجة على الويب:

10. تهانينا
تهانينا! لقد أنشأنا تطبيق ويب Java Cloud Run ونشرناه واختبرناه بنجاح لإجراء تحليلات رف الكتب باستخدام Gemini. كخطوة متابعة، اطلب من Gemini كيفية حذف خدمة Cloud Run التي تم تفعيلها من Google Cloud Console واتّبِع الخطوات التي يردّ بها لتنظيف المورد.