1. نظرة عامة
نعرف جميعًا المشاكل التي تسبّبها "البيانات غير المرئية". وهي ملفات PDF وصور وملفات نصية مخزَّنة في حِزم تخزين على السحابة الإلكترونية، ولا يمكن رصدها مطلقًا من خلال طلبات بحث SQL ولوحات بيانات "إحصاءات النشاط التجاري". في السابق، كان الوصول إلى هذه البيانات يتطلّب مسارات تعلُّم معقّدة للتعرّف البصري على الحروف، أو إدخال البيانات يدويًا، أو نصوص برمجية مخصّصة غير مستقرة.
لم يعُد الأمر كذلك.
في هذا التمرين العملي، سأوضّح لك كيفية تحويل 400 ملف PDF غير منظَّم، تتضمّن نصوصًا وجداول وصورًا، إلى جداول BigQuery منظَّمة بشكلٍ واضح مع استنتاج العلاقات بينها تلقائيًا. وسننفّذ ذلك في غضون دقائق باستخدام "كتالوج المعرفة" في BigQuery وDataplex.
ما ستنشئه
لإثبات ذلك، لنلقِ نظرة على نشاط تجاري وهمي: امتياز زبادي مجمّد سريع النمو.
لنفترض أنّك تدير بيانات نشاط Froyo التجاري هذا. لديك المئات من وصفات الطعام وأوراق مواصفات المورّدين، وكلها محفوظة بتنسيق PDF. يريد قادة المؤسسة إطلاق وكيل الذكاء الاصطناعي لمساعدة مدراء المتاجر والعملاء في الاستعلام عن تفاصيل المنتجات.
إليك السيناريو الأسوأ: يسأل أحد العملاء: "أنا مهتم حقًا بتجربة الزبادي المثلّج بنكهة "Midnight Swirl". هل يحتوي على أي مسبّبات للحساسية؟"
للإجابة عن هذا السؤال، يجب أن يقوم نظامك عادةً بما يلي:
- ابحث عن ملف PDF الخاص بوصفة "دوامة منتصف الليل".
- اقرأ المكوّنات (مثل "مسحوق الكاكاو" و"قاعدة الألبان" و"المستحلب X").
- ابحث في عشرات ملفات PDF الخاصة بالمورّدين للعثور على أوراق المواصفات الخاصة بهذه المكوّنات المحدّدة.
- راجِع أوراق بيانات المورِّدين بحثًا عن مسببات الحساسية المخفية المرتبطة بهذه المكوّنات.
إنّ محاولة إنشاء وكيل الذكاء الاصطناعي ينفّذ هذه العملية أثناء وقت التشغيل من خلال قراءة 400 ملف PDF أولي هي عملية بطيئة ومكلفة وعرضة للهلوسة. بدلاً من ذلك، سنستخدم الاستدلال الدلالي لاستخراج كل ذلك إلى قاعدة بيانات ارتباطية أولاً، ما سيجعل وكيل الذكاء الاصطناعي المستقبلي سريعًا جدًا ومستندًا بنسبة% 100 إلى بيانات SQL الفعلية.
لنبدأ في إنشاء التطبيق.

أهداف الدورة التعليمية
- كيفية إعداد حزمة Cloud Storage لملفات المصدر (ملفات PDF)
- كيفية إعداد مهمة Datascan وتشغيلها والاستدلال الدلالي في Knowledge Catalog لاستخراج البيانات من ملفات PDF المصدر والاستدلال دلاليًا على الروابط والسياق وتخزينها في BigQuery
- كيفية استخدام "وكلاء BigQuery" لإجراء محادثة مع مجموعة البيانات التي تم إنشاؤها حديثًا
المتطلبات
2. قبل البدء
إنشاء مشروع
- في Google Cloud Console، ضمن صفحة اختيار المشروع، اختَر أو أنشِئ مشروعًا على Google Cloud.
- تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. كيفية التحقّق من تفعيل الفوترة في مشروع
- ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud. انقر على "تفعيل Cloud Shell" في أعلى "وحدة تحكّم Google Cloud".

- بعد الاتصال بـ Cloud Shell، يمكنك التأكّد من إكمال عملية المصادقة وأنّ المشروع مضبوط على رقم تعريف مشروعك باستخدام الأمر التالي:
gcloud auth list
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك.
gcloud config list project
- إذا أردت إثبات ملكية حسابك
gcloud auth login
- إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
- فعِّل واجهات برمجة التطبيقات المطلوبة: نفِّذ الأمر التالي لتفعيل جميع واجهات برمجة التطبيقات المطلوبة:
gcloud services enable \
dataplex.googleapis.com \
datacatalog.googleapis.com \
discoveryengine.googleapis.com \
bigqueryconnection.googleapis.com \
bigquery.googleapis.com \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
serviceusage.googleapis.com \
storage.googleapis.com
المشاكل المحتملة وتحديد المشاكل وحلّها
متلازمة "المشروع الوهمي" | نفّذت الأمر |
حاجز الفوترة | لقد فعّلت المشروع، ولكن نسيت حساب الفوترة. AlloyDB هو محرّك عالي الأداء، ولن يبدأ إذا كان "خزان الوقود" (الفوترة) فارغًا. |
تأخّر في نشر واجهة برمجة التطبيقات | نقرت على "تفعيل واجهات برمجة التطبيقات"، ولكن سطر الأوامر لا يزال يعرض |
Quota Quags | إذا كنت تستخدم حسابًا تجريبيًا جديدًا تمامًا، قد تبلغ حصة إقليمية لمثيلات AlloyDB. إذا تعذّر تنفيذ |
وكيل الخدمة"مخفي" | في بعض الأحيان، لا يتم منح دور |
3- إعداد حزمة Google Cloud Storage
في هذا القسم، ستنشئ بنية تنظيمية ضمن BigQuery لتخزين بيانات وصفة Froyo والمورّدين، وتحديدًا لتفاصيل منتج Froyo. ويُنشئ أيضًا "عملية ربط بموارد السحابة الإلكترونية" تعمل كـ "جسر" آمن يتيح لـ BigQuery قراءة الملفات من مصادر خارجية، مثل Cloud Storage.
قبل البدء:
يحتوي هذا المستودع على وصفات وملفات PDF خاصة بالمورّدين سنستخدمها في هذا المشروع. احرص على تنزيل هذه الملفات. لتنزيل الملفات، اتّبِع الخطوات التالية.
في Cloud Shell، نفِّذ الأمر التالي:
git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/next-26-keynotes.git
انتقِل إلى المجلد الذي تم إنشاؤه حديثًا:
cd next-26-keynotes
اسحب مجلد data-cloud-demo.
git sparse-checkout set genkey/data-cloud-demo
بعد اكتمال عملية الدفع، انتقِل إلى المجلد data-cloud-demo واستخرِج ملفات ZIP للوصول إلى مواد العرض الخاصة بدرس تطبيقي حول الترميز.
إنشاء حِزمة وتحميل ملفات PDF الخاصة بـ Froyo (الوصفات والمورّدين)
- في Google Cloud Console، انتقِل إلى صفحة حِزم Cloud Storage.
- انقر على "إنشاء".
- في صفحة إنشاء حزمة، أدخِل معلومات الحزمة. بعد كل خطوة من الخطوات التالية، انقر على "متابعة" للانتقال إلى الخطوة التالية:
- في قسم البدء، أدخِل اسم المجموعة. مثال: froyo_data
- في قسم اختيار مكان تخزين البيانات، اختَر "المنطقة" ثم أدخِل منطقتك. us-central1
- في القسم اختيار طريقة التحكّم في الوصول إلى العناصر، أزِل العلامة من مربّع الاختيار "فرض منع الوصول العلني إلى هذه الحزمة" (Enforce public access prevention on this bucket).
- انقر على "إنشاء".
- في قائمة الحِزم، انقر على الحزمة التي أنشأتها.
- في علامة التبويب الكائنات الخاصة بالحزمة، انقر على "تحميل" ثم على "تحميل المجلدات".
- اختَر مجلد الوصفات الذي استخرجته في قسم "قبل البدء" من هذا الدرس العملي.
- انقر على "تحميل".
- كرِّر عملية التحميل للمجلد المورّدون.
بعد التحميل، من المفترض أن تبدو بنية الحزمة على النحو التالي (أو أيًا كان اسم الحزمة):

4. إعداد ربط BigQuery
أنشئ Cloud Resource Connection. يؤدي ذلك إلى إنشاء حساب خدمة فريد يعمل كـ "بطاقة تعريف" لـ BigQuery للوصول إلى الملفات الخارجية.
- انتقِل إلى صفحة BigQuery.
- في اللوحة اليمنى، انقر على "المستكشف". إذا لم يظهر الجزء الأيمن، انقر على "توسيع الجزء الأيمن" لفتحه.
- في جزء "المستكشف"، وسِّع اسم مشروعك، ثم انقر على "عمليات الربط".
- في صفحة "عمليات الربط"، انقر على "إنشاء عملية ربط".
- بالنسبة إلى نوع الاتصال، اختَر نماذج Vertex AI عن بُعد، والوظائف عن بُعد، وBigLake، وSpanner (مورد على السحابة الإلكترونية).
- في حقل "معرّف الاتصال"، أدخِل اسم معرّف الاتصال:
- bq-connection. احرص على تدوين رقم التعريف هذا لأنّك ستحتاج إليه عند إعداد عملية فحص البيانات لاحقًا في هذا الدرس التطبيقي حول الترميز.
- اضبط "نوع الموقع الجغرافي" على "المنطقة"، ثم اختَر منطقة. على سبيل المثال، us-central1. يجب أن يكون الربط في المنطقة نفسها التي تتوفّر فيها مواردك الأخرى، مثل مجموعات البيانات.
- انقر على "إنشاء عملية ربط".
- انقر على "الانتقال إلى عملية الربط".
- في لوحة "معلومات الاتصال"، انسخ رقم تعريف حساب الخدمة لاستخدامه في خطوة لاحقة. يبدو حساب الخدمة مشابهًا لما يلي: bqcx-**********-qn3a@gcp-sa-bigquery-condel.iam.gserviceaccount.com.
5- إعداد الأذونات
- منح الأذونات اللازمة لعملية ربط BigQuery من أجل الوصول إلى عناصر Cloud Storage وKnowledge Catalog
انتقِل إلى صفحة "إدارة الهوية وإمكانية الوصول" (IAM) وفي قسم "العرض حسب الجهات الرئيسية"، انقر على الزر "منح الوصول"، ثم أضِف جهة رئيسية عن طريق لصق حساب الخدمة الذي نسخته في الخطوة الأخيرة. في قسم الأدوار، أضِف أسماء الأدوار التالية واحدًا تلو الآخر واحفظها:
- roles/storage.objectUser
- roles/storage.objectViewer
- roles/bigquery.user
- roles/bigquery.dataEditor
- roles/aiplatform.viewer
- roles/agentplatform.user
- roles/storage.admin
- roles/dataproc.serviceAgent
- roles/dataplex.discoveryPublishingServiceAgent
- roles/dataplex.serviceAgent
- roles/dataplex.securityAdmin
- منح حساب خدمة Dataplex أذونات الوصول إلى حزمة Cloud Storage
انتقِل إلى صفحة "إدارة الهوية وإمكانية الوصول" (IAM) وفي قسم "العرض حسب المستخدمين الرئيسيين"، انقر على الزر "منح الوصول" وأضِف مستخدمًا رئيسيًا عن طريق كتابة Dataplex في شريط النص "مستخدم رئيسي جديد". من القائمة التي يتم إكمالها تلقائيًا، اختَر مدير حساب خدمة Dataplex الذي يبدو مشابهًا لما يلي:
service-*********@ gcp-sa-dataplex.iam.gserviceaccount.com
امنح حساب الخدمة هذا الأدوار التالية:
- roles/storage.objectUser
- roles/storage.objectViewer
- roles/storage.viewer
- roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
- roles/storage.objectViewer
- roles/storage.viewer
- roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
- roles/storage.objectViewer
- roles/storage.viewer
- roles/dataplex.discoveryBigLakePublishingServiceAgent
6. إعداد "كتالوج المعارف"
إنشاء "كتالوج معلومات" لتوحيد البيانات غير المنظَّمة وأتمتة عملية العثور على الملفات غير المنظَّمة (مثل وصفات PDF والمورّدين الذين يقدّمون ملفات PDF)
- إنشاء DataScan من خلال curl
يمكنك إنشاء هذه المهمة من وحدة التحكّم أيضًا، ولكن في هذا القسم، سننشئ عمليات فحص لحزمة Cloud Storage من خلال إضافة datascan_ID وتوجيهها إلى مجموعات بيانات BigQuery. بعد ذلك، سينشئ "كتالوج المعرفة" تلقائيًا إدخالات لملفات PDF في BigQuery.
نفِّذ مجموعة الأوامر أدناه من "وحدة Cloud Shell الطرفية" في مشروعك النشط الحالي الذي يهمّك:
# 1. Set your variables
PROJECT_ID="<PROJECT_ID>"
REGION="<REGION>"
ENV_SUFFIX="stg1"
DATASCAN_ID="froyo-data-${ENV_SUFFIX}"
BUCKET_NAME="<BUCKET_NAME>"
# 2. Set this to the Name of the connection you created in Step 7
CONNECTION_ID="<CONNECTION_ID_NAME>"
# 3. Define the API Endpoint
DATAPLEX_API="dataplex.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}"
# 4. Create the DataScan via CURL
echo "Creating Dataplex DataScan: ${DATASCAN_ID}..."
curl -X POST "https://$DATAPLEX_API/dataScans?dataScanId=${DATASCAN_ID}" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"data": {
"resource": "//storage.googleapis.com/projects/'"${PROJECT_ID}"'/buckets/'"${BUCKET_NAME}"'"
},
"executionSpec": {
"trigger": {
"on_demand": {}
}
},
"dataDiscoverySpec": {
"bigqueryPublishingConfig": {
"tableType": "BIGLAKE",
"connection": "projects/'"${PROJECT_ID}"'/locations/'"${REGION}"'/connections/'"${CONNECTION_ID}"'"
},
"storageConfig": {
"unstructuredDataOptions": {
"entity_inference_enabled": true
}
}
}
}'
استبدِل قيم المتغيّرات النائبة أعلاه لكي يتم تشغيل الأمر بنجاح. تذكَّر أنّ هذا الإجراء ينشئ المهمة فقط، ولا ينفّذها.
- بعد دقيقة أو دقيقتَين، انتقِل إلى صفحة تنظيم البيانات الوصفية في Google Cloud Console.
- في علامة التبويب "استكشاف مساحة التخزين في السحابة الإلكترونية"، انقر على "اسم عنصر فحص الاستكشاف" (تذكَّر عدم النقر على رابط المصدر الذي قد يكون خيارًا مغريًا، ولكنّه سيفتح مساحة التخزين).

- الخطوة الحرجة:
عدِّل المهمة وتأكَّد من وضع علامة في مربّع الاختيار "تفعيل الاستدلال الدلالي". إذا لم يكن الأمر كذلك، ضَع علامة في المربّع وأدخِل رقم تعريف المشروع والمنطقة، ثم انقر على "حفظ".

بعد الانتهاء، يمكنك إما تنفيذ الأمر التالي من "وحدة Cloud Shell الطرفية" أو النقر على الزر "التشغيل الآن" في صفحة "استكشاف Cloud Storage":
gcloud dataplex datascans run $DATASCAN_ID --location=$REGION
- سيستغرق إكمال مهمة البحث بعض الوقت. بعد انتهاء المهمة، تحقَّق ممّا إذا كانت مجموعة البيانات المنشورة متوفّرة. للاطّلاع على حالة المهمة، يمكنك الانتقال إلى صفحة تنظيم البيانات الوصفية، ثم النقر على اسم عمليات البحث الأخيرة في علامة التبويب "استكشاف Cloud Storage". من المفترض أن تظهر لك مجموعة البيانات المنشورة كما هو موضّح أدناه:

ملاحظة: إذا واجهت أخطاء في خطوة الفحص، ما عليك سوى الانتظار لبعض الوقت ثم إعادة المحاولة (يستغرق إنشاء المهمة وإكمال تنفيذها بضع دقائق).
يمكنك عرض الجدول في BigQuery من خلال النقر على مجموعة بيانات froyo_data والانتقال إليها. انقر على معرّف الجدول في BigQuery ونفِّذ الاستعلام أدناه في علامة التبويب "محرّر الطلبات":
SELECT count(*) FROM `agent-data-cloud.froyo_data.froyo_data` LIMIT 1000;
سيؤدي ذلك إلى ظهور الرمز 400 (إذا لم يظهر، يمكنك الرجوع وتشغيل مهمة Datascan مرة أخرى).
7. استخراج البيانات الدلالية
رائع!! لنستخرِج الآن الاستنتاج الخاص بهذه العناصر غير المنظَّمة باستخدام "كتالوج المعارف".
سنستخدم ميزة "الإحصاءات" لإنشاء عبارات SQL لاستخراج البيانات المنظَّمة من الجدول غير المنظَّم.
- في Google Cloud Console، انتقِل إلى صفحة بحث في "كتالوج المعرفة".
- ابحث عن جدول مجموعة البيانات الذي تريد الاطّلاع على الإحصاءات الخاصة به. في شريط البحث، أدخِل اسم مجموعة البيانات أو الجدول من الخطوة السابقة: "froyo_data" واضغط على مفتاح Enter.
- من قائمة النتائج، انقر على إدخال الجدول (وليس مجموعة البيانات).
- من المفترض أن تظهر لك علامة التبويب الإحصاءات. انقر على ذلك (إذا كان يتطلّب منك تفعيل أي واجهة برمجة تطبيقات، اتّبِع التعليمات وفعِّل واجهات برمجة التطبيقات).
إذا انتهى بك الأمر بتفعيل واجهات برمجة التطبيقات في هذه المرحلة، عليك إعادة تشغيل مهمة الفحص مرة أخرى.
- في علامة التبويب "الإحصاءات"، ستظهر القائمة المنسدلة للزر "استخراج". انقر على ذلك الخيار وحدِّد الخيار "استخراج باستخدام SQL".

في مربّع الحوار المنبثق استخراج باستخدام SQL، اضبط مجموعة بيانات الوجهة على المجموعة التي رأيتها في نتيجة مهمة Datascan. ابدأ بكتابة اسمه وسيظهر في ميزة الإكمال التلقائي. انقر على الزر استخراج. يمكنك بدلاً من ذلك إنشاء مجموعة بيانات جديدة في هذه المرحلة واستخراجها.
من المفترض أن يؤدي ذلك إلى فتح "أداة تحرير الطلبات" في BigQuery مع فتح علامة تبويب تتضمّن لغة SQL المستخرَجة من استنتاج فحص البيانات.
8. التحقّق من صحة SQL وإنشاء المخطط
إذا بدا طلب البحث الذي تم إنشاؤه جيدًا ومناسبًا من الناحية الدلالية لبياناتك غير المنظَّمة، يمكنك المتابعة وتشغيله من خلال النقر على الزر "تشغيل" في محرّر طلب البحث. سيستغرق إنشاء المخطط المطلوب للتخزين المنظَّم للوسائط غير المنظَّمة بضع دقائق.
بعد الانتهاء، يجب أن تتمكّن من التحقّق من المخطط عن طريق توسيع مجموعة البيانات في جزء المستكشف في BigQuery Studio كما هو موضّح أدناه:

حسنًا!!! كان من الرائع أن نتمكّن من تنفيذ كل عمليات قاعدة البيانات هذه بسرعة كبيرة. حان الوقت الآن للاختبار النهائي.
9- الاختبار النهائي!!!
لنفترض أنّني أريد أن يردّ الوكيل على أسئلة المستخدم بمعلومات حقيقية وكاملة ومنظَّمة بشكل جيد تستند إلى الحقائق. سأطرح سؤالاً لا يمكن للوكيل الإجابة عنه إلا بالرجوع إلى ملفات وسائط ومراجع متعددة من المصدر.
في ما يلي سؤال المستخدم:
I'm really interested in your Midnight Swirl froyo. Are there any allergens in it?
سيظهر الآن "لا تتضمّن أي مكوّنات" عند إجراء عملية بحث عامة أو بحث باستخدام نموذج لغوي كبير. لكنّنا أنشأنا استنتاجًا دلاليًا كاملاً يحوّل جميع الوسائط غير المنظَّمة إلى بيانات منظَّمة. إليك مثال على ذلك باستخدام طلب بحث بسيط بلغة SQL سيجلب هذه المعلومات:
SELECT p.product_name, i.ingredient_name, a.allergen_name, category, stability
FROM froyo_data.consistsof c
INNER JOIN froyo_data.product p
ON c.product_id = p.product_id
INNER JOIN froyo_data.ingredient i
ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN froyo_data.containsallergen a
ON i.ingredient_id = a.ingredient_id
WHERE
UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
AND allergen_name IS NOT NULL;
رائع! اطّلِع على النتيجة:

10. تَنظيم
بعد الانتهاء من هذا الدرس العملي، لا تنسَ حذف مهمة الفحص وجداول BigQuery التي أنشأتها المهمة.
انتقِل إلى https://console.cloud.google.com/bigquery/governance/metadata-curation/cloud-storage-discovery. اختَر الوظيفة التي تريد حذفها من خلال النقر على علامة الحذف بجانبها، ثم انقر على "حذف".

من المفترض أن يؤدي ذلك إلى تنظيف الوظيفة.
11. تهانينا
تمكّنت عملية التنفيذ بنجاح من تحديد مادة مسبّبة للحساسية مخفية. لا مزيد من البيانات غير المرئية، أيها الناس!!! في الجزء 2، سنوحّد بيانات BigQuery هذه في نظام معاملات مع AlloyDB لتلبية احتياجات البيانات في تطبيقنا المستند إلى الوكلاء.