1. مقدمة
هل تحب التعمق في الكتب ولكنك تُربك من الحجم الهائل من الخيارات؟ تخيل أنّ لديك تطبيقًا مستندًا إلى الذكاء الاصطناعي لا يقترح عليك الكتب المناسبة فحسب، بل يوفّر أيضًا ملخّصًا موجزًا استنادًا إلى النوع الذي تختاره، ما يمنحك لمحة عن جوهر الكتاب. في هذا الدليل التعليمي، سأرشدك إلى كيفية إنشاء تطبيق مماثل باستخدام BigQuery وVertex AI وCloud Run بمساعدة Gemini.
نظرة عامة على المشروع
تركّز حالة الاستخدام على المكوّنات الأربعة الرئيسية التالية:
- قاعدة بيانات الكتب: ستشكّل مجموعة البيانات المتاحة للجميع في BigQuery الخاصة بكتب أرشيف الإنترنت كتالوج الكتب الشامل.
- محرك تلخيص الذكاء الاصطناعي: ستُنشئ وظائف Google Cloud، المزوّدة بنموذج اللغة Gemini-Pro، ملخصات مفيدة مخصّصة لطلبات المستخدمين.
- دمج BigQuery: دالة عن بُعد ضمن BigQuery تستدعي Cloud Function لتقديم ملخّصات الكتب والمواضيع عند الطلب.
- واجهة المستخدم: تطبيق ويب مستضاف على Cloud Run سيوفّر تطبيق ويب للمستخدمين لعرض النتائج.
لقد قسمنا تنفيذ المشروع بالكامل إلى 3 دروس تطبيقية حول الترميز، ويتناول هذا الدرس التطبيقي حول الترميز الدرس التطبيقي 3 في القائمة أدناه:
درس تطبيقي حول الترميز 1: استخدِم Gemini لإنشاء دالة Java Cloud لتطبيق Gemini.
Codelab 2: استخدام Gemini لإنشاء تطبيقات الذكاء الاصطناعي التوليدي المستندة إلى لغة الاستعلامات البنيوية (SQL) فقط باستخدام BigQuery
درس تطبيقي حول الترميز 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 لتطبيق الذكاء الاصطناعي التوليدي.
- شرط: إذا كان بإمكانك في الوقت الحالي الوصول إلى رابط أرصدة Google Cloud المجانية (الذي قد يكون قد زوّدك به منظّم ورشة العمل)، استخدِم التعليمات الواردة في الصفحة أدناه لإكمال خطوات تفعيل الأرصدة وإنشاء المشروع مسبقًا. إذا لم يكن لديك هذا الرابط، فتابع المشروع والخطوات الأساسية للفوترة أدناه:
إنشاء مشروعك
يمكنك تخطّي الخطوات أدناه إذا سبق لك تفعيل حساب فوترة وإنشاء مشروع باستخدام الرابط المذكور في الخطوة الشَرطية أعلاه.
- في Google Cloud Console، في صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google Cloud أو أنشِئه.
- تأكَّد من تفعيل الفوترة لمشروعك على Cloud. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
تفعيل Cloud Shell
- ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ويتم تحميلها مسبقًا مع bq:
من Cloud Console، انقر على Activate Cloud Shell (تفعيل 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 Chat، انقر على الرمز "فتح Gemini" في أعلى يسار الصفحة إلى جانب شريط البحث في Google Cloud Console.
اكتب هذا السؤال في قسم "إدخال طلب هنا":
How do I enable the BigQuery and Cloud Run apis using gcloud command?
ستحصل على الرد كما هو موضح في الصورة التالية:
انسخ هذا الرمز (يمكنك استخدام رمز النسخ في أعلى مقتطف الأمر) وشغِّله في Cloud Shell Terminal لتفعيل الخدمات ذات الصلة:
- bigquery.googleapis.com
- run.googleapis.com
5- استكشاف مجموعة البيانات العامة في BigQuery لبيانات الكتب
ابدأ بالتعرّف على مجموعة بيانات BigQuery العامة التي تحتوي على معلومات حول العديد من كتب أرشيف الإنترنت. إذا لم تتمكّن من الوصول إلى مجموعة بيانات internetarchivebooks من هذا الرابط، يُرجى اتّباع الخطوات أدناه لاستكشاف مجموعة البيانات أو اتّباع المستندات التالية بدلاً من ذلك:
يمكنك العثور على مجموعة البيانات العامة هذه في جزء مستكشف BigQuery. يمكنك العثور عليه على الجانب الأيمن عند الوصول إلى وحدة تحكم BigQuery.
اكتب "gdelt-bq" أو "internetarchivebooks" في شريط البحث وانقر فوق البحث في جميع المشاريع. وسِّع النتيجة وضَع علامة على الكتب في أرشيف الإنترنت كما هو موضّح في الصورة أدناه:
.
قم بتوسيع مجموعة البيانات، وانقر فوق 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 Run. من القائمة المنبثقة، اختَر Java:
في القائمة الناتجة، اكتب اسم المشروع "bookshelf-web" بدلاً من helloworld وانقر على "حسنًا".
رائع! لقد تمكّنت من إعداد تطبيق Java Cloud Run البسيط باستخدام Gemini ولم تُجري الكثير من الإجراءات بخلاف تفعيل الإعدادات وتنشيطها، أليس كذلك؟
في ما يلي بنية المشروع التي من المفترض أن تظهر لك:
في الوقت الحالي، يمكنك نشر التطبيق. ولكن ليس هذا هو السبب الذي دفعنا إلى بدء هذه الميزة. لا يزال علينا تضمين الوظيفة الرئيسية لتطبيق الويب، وهي جلب بيانات الإحصاءات من قاعدة بيانات BigQuery وعرضها على الويب.
ولإجراء ذلك، يمكنك إضافة المزيد من الطلبات وتطوير الرمز البرمجي بشكل تدريجي باستخدام Gemini أو كتابة المنطق بنفسك. سأستخدم مزيجًا من الاثنين.
7- إضافة التبعيات لاستخدام BigQuery في تطبيق الويب
بعد بدء تشغيل التطبيق، أصبحنا جاهزين لإجراء تغييرات على مصدر التطبيق وخصائصه. أولاً، لنضيف التبعيات. لنطلب من Gemini اقتراح هذا التطبيق.
في "محرر الرموز البرمجية في السحابة الإلكترونية"، تأكَّد من أنّ شريط الحالة يعرض Gemini مفعّلاً في أسفل يسار الصفحة وأنّ مشروع Google 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 في IDE، انتقِل إلى "لوحة المحادثة" في IDE وقدِّم الطلب التالي: شرح هذا. يمكنك الاطّلاع على الشرح التفصيلي الذي تقدّمه منصة Gemini. يمكنك استخدام هذا الرابط في أي وقت للحصول على بعض التفسيرات حول الرمز.
- يمكنك تمييز أي مقتطف أو سطر محدّد في الرمز البرمجي (مثل @GetMapping("/"))، ثم استخدام الطلب التالي: أريد شرح هذا. سيقدّم هذا الشرح تفصيلاً عن سطر الرمز أو المقتطف الذي اخترته فقط.
- يمكنك أيضًا تجربة بعض طلبات البحث التي تستفسر عن الرمز بطريقة مختلفة. على سبيل المثال، يمكنك اختيار سطر التعليمة البرمجية التالي:
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
واطرح الطلب التالي: "ماذا سيحدث إذا كان متغيّر bigquery فارغًا؟" 4. يمكنك أيضًا طلب تحسينات على الرموز البرمجية أو إعادة صياغة الرموز البرمجية بمساعدة Gemini. على سبيل المثال، يمكنك اختيار الرمز البرمجي الكامل لطريقة helloWorld() وتقديم الطلب التالي: "كيف يمكنني تحسين هذا الرمز البرمجي أو إعادة تنظيمه؟". اطّلِع على الاقتراحات التي يوفّرها Gemini.
9. الإنشاء والنشر
انتقِل إلى وحدة التحكّم في المحطة الطرفية في Cloud Shell. تأكَّد من أنّه يشير إلى رقم تعريف مشروعك في المحطة الطرفية.
انتقِل إلى دليل المشروع باستخدام الأمر cd:
cd bookshelf-web
شغِّل الأوامر أدناه واحدًا تلو الآخر للتأكّد من أنّ تطبيقك يعمل على الجهاز.
mvn package
mvn spring-boot:run
الآن، انقر على زر "معاينة الويب" ثم على خيار "معاينة على المنفذ 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 واتّبِع الخطوات التي يردّ بها لتنظيف المورد.