مليون متّجه، بدون تكرار: إنشاء تضمينات على نطاق واسع باستخدام AlloyDB

1. نظرة عامة

في هذا الدرس التطبيقي حول الترميز، ستنشئ تطبيقًا قابلاً للتوسّع للبحث في قاعدة المعرفة. بدلاً من إدارة مسار ETL معقّد باستخدام نصوص برمجية وحلقات تكرار بلغة Python لإنشاء تضمينات المتّجهات، ستستخدم AlloyDB AI لمعالجة إنشاء التضمينات بشكلٍ أصلي داخل قاعدة البيانات باستخدام أمر SQL واحد.

d4324260c68d4a70.png

ما ستقوم بإنشائه

تطبيق قاعدة بيانات "قابل للبحث" عالي الأداء.

أهداف الدورة التعليمية

ستتعرّف على كيفية:

  • توفير مجموعة AlloyDB وتفعيل إضافات الذكاء الاصطناعي
  • إنشاء بيانات اصطناعية (أكثر من 50,000 صف) باستخدام SQL
  • تعبئة تضمينات المتجهات لمجموعة البيانات بأكملها باستخدام المعالجة على دفعات
  • إعداد مشغّلات تزايدية في الوقت الفعلي لتضمين البيانات الجديدة تلقائيًا
  • أجرِ بحثًا مختلطًا (فلاتر المتجهات وفلاتر SQL) عن "Flexing Context".

المتطلبات

  • متصفّح، مثل Chrome أو Firefox
  • مشروع على Google Cloud تم تفعيل الفوترة فيه
  • معرفة أساسية بلغة SQL

2. قبل البدء

إنشاء مشروع

  1. في Google Cloud Console، في صفحة "أداة اختيار المشاريع"، اختَر مشروعًا على Google Cloud أو أنشِئه.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. كيفية التحقّق من تفعيل الفوترة في مشروع
  3. ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud. انقر على "تفعيل Cloud Shell" في أعلى وحدة تحكّم Google Cloud.

صورة زر تفعيل Cloud Shell

  1. بعد الاتصال بـ Cloud Shell، تأكَّد من أنّه تمت مصادقتك وأنّ المشروع مضبوط على رقم تعريف مشروعك باستخدام الأمر التالي:
gcloud auth list
  1. نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يتعرّف على مشروعك.
gcloud config list project
  1. إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <YOUR_PROJECT_ID>
  1. تفعيل واجهات برمجة التطبيقات المطلوبة: اتّبِع الرابط وفعِّل واجهات برمجة التطبيقات.

يمكنك بدلاً من ذلك استخدام أمر gcloud لإجراء ذلك. يُرجى الرجوع إلى المستندات للاطّلاع على أوامر gcloud واستخدامها.

gcloud services enable \
  alloydb.googleapis.com \
  compute.googleapis.com \
  cloudresourcemanager.googleapis.com \
  servicenetworking.googleapis.com \
  aiplatform.googleapis.com

المشاكل الشائعة وتحديد المشاكل وحلّها

متلازمة "المشروع الشبح"

لقد شغّلت gcloud config set project، ولكنّك تنظر في الواقع إلى مشروع مختلف في واجهة مستخدم وحدة التحكّم. تحقَّق من رقم تعريف المشروع في القائمة المنسدلة في أعلى يمين الصفحة.

The Billing Barricade

لقد فعّلت المشروع، ولكن نسيت حساب الفوترة. ‫AlloyDB هو محرّك عالي الأداء، ولن يبدأ العمل إذا كان "خزان الوقود" (الفوترة) فارغًا.

تأخّر انتشار واجهة برمجة التطبيقات

لقد نقرت على "تفعيل واجهات برمجة التطبيقات"، ولكن لا يزال سطر الأوامر يعرض Service Not Enabled. يُرجى الانتظار لمدة 60 ثانية. تحتاج السحابة الإلكترونية إلى بعض الوقت لتنشيط خلاياها العصبية.

Quota Quags

إذا كنت تستخدم حسابًا تجريبيًا جديدًا، قد تبلغ حصة إقليمية لمثيلات AlloyDB. إذا تعذّر تنفيذ "us-central1"، جرِّب "us-east1".

وكيل خدمة "مخفي"

في بعض الأحيان، لا يتم منح وكيل خدمة AlloyDB دور aiplatform.user تلقائيًا. إذا لم تتمكّن طلبات بحث SQL من التواصل مع Gemini لاحقًا، يكون هذا هو السبب عادةً.

3- إعداد قاعدة البيانات

في هذا التمرين المعملي، سنستخدم AlloyDB كقاعدة بيانات لبيانات الاختبار. ويستخدم مجموعات للاحتفاظ بجميع الموارد، مثل قواعد البيانات والسجلّات. تحتوي كل مجموعة على مثيل أساسي يوفّر نقطة وصول إلى البيانات. ستحتوي الجداول على البيانات الفعلية.

لننشئ مجموعة ومثيل وجدول في AlloyDB حيث سيتم تحميل مجموعة البيانات الاختبارية.

  1. انقر على الزر أو انسخ الرابط أدناه إلى المتصفّح الذي سجّلت الدخول من خلاله إلى حساب مستخدم Google Cloud Console.

  1. بعد اكتمال هذه الخطوة، سيتم استنساخ المستودع إلى محرِّر Cloud Shell على جهازك وستتمكّن من تنفيذ الأمر أدناه من مجلد المشروع (من المهم التأكّد من أنّك في دليل المشروع):
sh run.sh
  1. الآن، استخدِم واجهة المستخدم (بالنقر على الرابط في الوحدة الطرفية أو النقر على رابط "المعاينة على الويب" في الوحدة الطرفية).
  2. أدخِل تفاصيل رقم تعريف المشروع وأسماء المجموعات والمثيلات للبدء.
  3. يمكنك تناول القهوة أثناء ظهور السجلّات، ويمكنك الاطّلاع على كيفية تنفيذ ذلك وراء الكواليس هنا. قد يستغرق ذلك من 10 إلى 15 دقيقة تقريبًا.

المشاكل الشائعة وتحديد المشاكل وحلّها

مشكلة "الصبر"

مجموعات قواعد البيانات هي بنية أساسية ثقيلة. إذا أعدت تحميل الصفحة أو أنهيت جلسة Cloud Shell لأنّها "تبدو عالقة"، قد ينتهي بك الأمر مع مثيل "شبح" تم توفيره جزئيًا ويستحيل حذفه بدون تدخّل يدوي.

عدم تطابق المنطقة

إذا فعّلت واجهات برمجة التطبيقات في us-central1 ولكن حاولت توفير المجموعة في asia-south1، قد تواجه مشاكل في الحصة أو تأخيرات في أذونات حساب الخدمة. التزم بمنطقة واحدة طوال فترة التمرين المعملي.

مجموعات Zombie

إذا سبق لك استخدام الاسم نفسه لمجموعة ولم تحذفها، قد يشير النص البرمجي إلى أنّ اسم المجموعة متوفّر حاليًا. يجب أن تكون أسماء المجموعات فريدة داخل المشروع.

مهلة Cloud Shell

إذا استغرقت استراحة القهوة 30 دقيقة، قد ينتقل Cloud Shell إلى وضع السكون ويقطع عملية sh run.sh. يُرجى إبقاء علامة التبويب نشطة.

4. توفير المخطط

في هذه الخطوة، سنتناول ما يلي:

879263c907f3cac6.png

بعد تشغيل مجموعة AlloyDB ومثيلها، انتقِل إلى محرِّر SQL في AlloyDB Studio لتفعيل إضافات الذكاء الاصطناعي وتوفير المخطّط.

1e3ac974b18a8113.png

قد تحتاج إلى الانتظار حتى يكتمل إنشاء المثيل. بعد ذلك، سجِّل الدخول إلى AlloyDB باستخدام بيانات الاعتماد التي أنشأتها عند إنشاء المجموعة. استخدِم البيانات التالية للمصادقة على PostgreSQL:

  • اسم المستخدم : "postgres"
  • قاعدة البيانات : "postgres"
  • كلمة المرور : "alloydb" (أو أي كلمة مرور تم ضبطها في وقت الإنشاء)

بعد المصادقة بنجاح في AlloyDB Studio، يتم إدخال أوامر SQL في "المحرِّر". يمكنك إضافة نوافذ متعددة في "محرِّر الإعلانات" باستخدام علامة الجمع على يسار النافذة الأخيرة.

28cb9a8b6aa0789f.png

ستُدخل أوامر AlloyDB في نوافذ المحرِّر، باستخدام خيارات "تشغيل" (Run) و"تنسيق" (Format) و"محو" (Clear) حسب الحاجة.

تفعيل الإضافات

لإنشاء هذا التطبيق، سنستخدم الإضافتَين pgvector وgoogle_ml_integration. تتيح لك إضافة pgvector تخزين تضمينات المتّجهات والبحث فيها. توفّر الإضافة google_ml_integration دوال يمكنك استخدامها للوصول إلى نقاط نهاية التوقّعات في Vertex AI للحصول على توقّعات في SQL. فعِّل هذه الإضافات من خلال تشغيل لغات تعريف البيانات (DDL) التالية:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

إنشاء جدول

نحتاج إلى مجموعة بيانات لتوضيح المقياس. بدلاً من استيراد ملف CSV، سننشئ 50,000 صف من "مقالات المساعدة" الاصطناعية على الفور باستخدام SQL.

يمكنك إنشاء جدول باستخدام عبارة DDL التالية في AlloyDB Studio:

-- 1. Create the table
CREATE TABLE help_articles (
    id SERIAL PRIMARY KEY,
    title TEXT,
    category TEXT,
    product_version TEXT,
    content_body TEXT,
    embedding vector(768) -- Dimension for text-embedding-005
);

-- 2. Generate 50,000 rows of synthetic data
INSERT INTO help_articles (title, category, product_version, content_body)
SELECT
    'Help Article ' || i,
    CASE 
        WHEN i % 3 = 0 THEN 'Billing' 
        WHEN i % 3 = 1 THEN 'Technical' 
        ELSE 'General' 
    END,
    CASE 
        WHEN i % 2 = 0 THEN '2.0' 
        ELSE '1.0' 
    END,
    'This article covers common issues regarding ' || 
    CASE 
        WHEN i % 3 = 0 THEN 'payment failures, invoice disputes, and credit card updates.'
        WHEN i % 3 = 1 THEN 'connection timeouts, latency issues, and API errors.'
        ELSE 'account profile settings, password resets, and user roles.' 
    END
FROM generate_series(1, 50000) AS i;

سيسمح عمود item_vector بتخزين قيم المتجهات للنص.

التحقّق من البيانات:

SELECT count(*) FROM help_articles;
-- Output: 50000

تفعيل علامات قواعد البيانات

انتقِل إلى وحدة التحكّم في إعدادات المثيل، وانقر على "تعديل المثيل الأساسي"، ثم انتقِل إلى "الإعدادات المتقدّمة" وانقر على "إضافة علامات قاعدة البيانات".

  1. تأكَّد من ضبط العلامة google_ml_integration.enable_model_support على "تفعيل":

إذا لم تكن كذلك، أدخِلها في القائمة المنسدلة "العلامات" واضبطها على "تفعيل" وعدِّل المثيل.

  1. تأكَّد من تفعيل العلامة google_ml_integration.enable_faster_embedding_generation:

إذا لم تكن كذلك، أدخِلها في القائمة المنسدلة "العلامات" واضبطها على "تفعيل" وعدِّل المثيل.

خطوات ضبط علامات قواعد البيانات:

  1. في وحدة تحكّم Google Cloud، انتقِل إلى صفحة "المجموعات العنقودية".

الانتقال إلى "المجموعات"

  1. انقر على مجموعة في عمود اسم المورد.
  2. في صفحة نظرة عامة، انتقِل إلى المثيلات في المجموعة، واختَر مثيلاً، ثم انقر على تعديل.
  3. إضافة علامة قاعدة بيانات إلى مثيلك أو تعديلها أو حذفها:

إضافة علامة

  1. لإضافة علامة قاعدة بيانات إلى المثيل، انقر على "إضافة علامة".
  2. اختَر علامة من قائمة "علامة قاعدة بيانات جديدة".
  3. أدخِل قيمة للعَلم.
  4. انقر على "تم".
  5. انقر على تعديل المثيل.
  6. تأكَّد من أنّ إضافة google_ml_integration هي الإصدار 1.5.2 أو إصدار أحدث:

للتحقّق من إصدار الإضافة، استخدِم الأمر التالي:

SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';

إذا كنت بحاجة إلى تحديث الإضافة إلى إصدار أعلى، استخدِم الأمر:

ALTER EXTENSION google_ml_integration UPDATE;

منح الإذن

  1. للسماح لمستخدم بإدارة عملية إنشاء التضمينات تلقائيًا، امنحه أذونات INSERT وUPDATE وDELETE في الجدولَين google_ml.embed_gen_progress وgoogle_ml.embed_gen_settings:
GRANT INSERT, UPDATE, DELETE ON google_ml.embed_gen_progress TO postgres;

"postgres" هو USER_NAME الذي يتم منح الأذونات له.

  1. نفِّذ العبارة التالية لمنح إذن التنفيذ على دالة "التضمين":
GRANT EXECUTE ON FUNCTION embedding TO postgres;

منح دور مستخدم Vertex AI لحساب خدمة AlloyDB

من وحدة تحكّم Google Cloud IAM، امنح حساب خدمة AlloyDB (الذي يبدو على النحو التالي: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) إذن الوصول إلى الدور "مستخدم Vertex AI". سيحتوي PROJECT_NUMBER على رقم مشروعك.

بدلاً من ذلك، يمكنك تشغيل الأمر التالي من Cloud Shell Terminal:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

المشاكل الشائعة وتحديد المشاكل وحلّها

حلقة "نسيان كلمة المرور"

إذا استخدمت إعداد "One Click" (نقرة واحدة) ولم تتمكّن من تذكُّر كلمة المرور، انتقِل إلى صفحة المعلومات الأساسية للمثيل في وحدة التحكّم وانقر على "Edit" (تعديل) لإعادة ضبط كلمة مرور postgres.

خطأ "لم يتم العثور على الإضافة"

إذا تعذّر تنفيذ CREATE EXTENSION، يكون السبب غالبًا أنّ المثيل لا يزال في حالة "صيانة" أو "تحديث" من عملية الإعداد الأولية. انتقِل إلى خطوة إنشاء المثيل وتحقَّق من اكتمالها، وانتظِر بضع ثوانٍ إذا لزم الأمر.

5- إنشاء المتّجهات "بخطوة واحدة"

هذا هو جوهر التمرين العملي. بدلاً من كتابة حلقة Python لمعالجة هذه الصفوف البالغ عددها 50,000، سنستخدم الدالة ai.initialize_embeddings.

ينفّذ هذا الأمر الواحد إجراءَين:

  1. تعبئة جميع الصفوف الحالية.
  2. إنشاء مشغّل لتضمين الصفوف المستقبلية تلقائيًا

نفِّذ عبارة SQL التالية من محرِّر طلبات البحث في AlloyDB

CALL ai.initialize_embeddings(
  model_id => 'text-embedding-005',
  table_name => 'help_articles',
  content_column => 'content_body',
  embedding_column => 'embedding',
  incremental_refresh_mode => 'transactional'
);

التحقّق من التضمينات

تأكَّد من ملء عمود embedding الآن:

SELECT id, left(content_body, 30), substring(embedding::text, 1, 30) as vector_partial 
FROM help_articles;

من المفترض أن تظهر لك نتيجة مشابهة لما يلي:

a872b8926a164275.png

ما الذي حدث للتو؟

  1. التعبئة التلقائية على نطاق واسع: تفحص هذه الميزة تلقائيًا صفوفك الحالية البالغ عددها 50,000 صف وتنشئ عمليات تضمين من خلال Vertex AI.
  2. التشغيل الآلي: من خلال ضبط incremental_refresh_mode => 'transactional'، يضبط AlloyDB المشغّلات الداخلية تلقائيًا. سيتم إنشاء تضمين لأي صف جديد يتم إدراجه في help_articles على الفور.
  3. يمكنك اختياريًا ضبط incremental_refresh_mode => ‘None' حتى تتمكّن من الحصول على العبارة لإجراء تعديلات مجمّعة واستدعاء ai.refresh_embeddings() يدويًا لتعديل تضمينات جميع الصفوف.

لقد استبدلت للتو قائمة انتظار Kafka، وعامل Python، ونص نقل البيانات بـ 6 أسطر من SQL. في ما يلي المستندات الرسمية المفصّلة لجميع السمات.

اختبار المشغّلات في الوقت الفعلي

لنتأكّد من أنّ عملية التشغيل الآلي "Zero Loop" تعمل مع البيانات الجديدة.

  1. إدراج صف جديد:
INSERT INTO help_articles (title, category, product_version, content_body)
VALUES ('New Scaling Guide', 'Technical', '2.0', 'How to scale AlloyDB to millions of transactions.');
  1. التحقّق على الفور:
SELECT embedding FROM help_articles WHERE title = 'New Scaling Guide';

النتيجة:

من المفترض أن يظهر لك المتجه الذي تم إنشاؤه على الفور بدون تشغيل أي نص برمجي خارجي.

حجم دفعة الضبط

في الوقت الحالي، يضبط AlloyDB حجم الدفعة تلقائيًا على 50. على الرغم من أنّ الإعدادات التلقائية تعمل بشكل رائع، لا يزال AlloyDB يمنح المستخدمين إمكانية التحكّم في ضبط الإعدادات المثالية للنموذج ومجموعة البيانات الفريدة.

CALL ai.initialize_embeddings(
  model_id => 'text-embedding-005',
  table_name => 'help_articles',
  content_column => 'content_body',
  embedding_column => 'embedding',
  incremental_refresh_mode => 'transactional',
  batch_size => 20
);

ومع ذلك، يجب أن يكون المستخدمون على دراية بحدود الحصص التي يمكن أن تحدّ من الأداء. لمراجعة حصص AlloyDB المقترَحة، يُرجى الاطّلاع على قسم "قبل البدء" في المستندات.

المشاكل الشائعة وتحديد المشاكل وحلّها

فجوة نشر "إدارة الهوية وإمكانية الوصول"

لقد نفّذت أمر إدارة الهوية وإمكانية الوصول (IAM) في gcloud، ولكن لا يزال SQL CALL يتعذّر بسبب خطأ في الإذن. قد يستغرق تطبيق تغييرات "إدارة الهوية وإمكانية الوصول" بعض الوقت من خلال شبكة Google الأساسية. لا داعي لذلك.

عدم تطابق أبعاد المتّجهات

تم ضبط الجدول help_articles على VECTOR(768) في العمود content_body. إذا حاولت استخدام نموذج مختلف (مثل نموذج بأبعاد 1536) لاحقًا، ستتعطّل عمليات الإدراج. التزم بـ text-embedding-005.

6. البحث السياقي المرن

الآن، سنُجري بحثًا مختلطًا. نجمع بين الفهم الدلالي (المتّجه) ومنطق النشاط التجاري (فلاتر SQL).

يمكنك تنفيذ طلب البحث هذا للعثور على مشاكل الفوترة المتعلّقة بالإصدار 2.0 من المنتج تحديدًا:

SELECT
  title,
  left(content_body, 100) as content_snippet,
  1 - (embedding <=> embedding('text-embedding-005', 'Invoice did not go through')::vector) as relevance
FROM help_articles
WHERE category = 'Billing'  -- Hard SQL Filter
  AND product_version = '2.0' -- Hard SQL Filter
ORDER BY relevance DESC
LIMIT 5;

هذه لعبة "سياق مرن". يتم "تعديل" البحث لفهم قصد المستخدم ("مشاكل الفوترة") مع الالتزام بالقيود الصارمة للنشاط التجاري (الإصدار 2.0).

f0fdb50d6195c462.png

أهمية هذه الميزة للشركات الناشئة وعمليات نقل البيانات

  1. عدم تراكم ديون البنية الأساسية: لم يتم إنشاء قاعدة بيانات متّجهات منفصلة (Pinecone/Milvus). لم تكتب مهمة ETL منفصلة. كل ذلك في Postgres.
  2. التعديلات في الوقت الفعلي: باستخدام وضع "المعاملات"، لن يصبح فهرس "بحث Google" قديمًا أبدًا. بمجرد إدخال البيانات، تصبح جاهزة للاستخدام في المتجهات.
  3. قابلية التوسّع: يستند AlloyDB إلى بنية Google الأساسية. ويمكنه إنشاء ملايين المتجهات بشكل مجمّع بسرعة أكبر من أي وقت مضى باستخدام نص Python البرمجي.

المشاكل الشائعة وتحديد المشاكل وحلّها

مشكلة في أداء الإنتاج

المشكلة: سريع لـ 50,000 صف. بطيء جدًا لمليون صف إذا لم يكن فلتر الفئات انتقائيًا بما يكفي.الحل:أضِف فهرس متّجهات: بالنسبة إلى نطاق الإنتاج، يجب إنشاء فهرس:CREATE INDEX ON help_articles USING hnsw (embedding vector_cosine_ops);التحقّق من استخدام الفهرس: شغِّل EXPLAIN ANALYZE SELECT ... للتأكّد من أنّ قاعدة البيانات تستخدم الفهرس ولا تُجري فحصًا تسلسليًا.

كارثة "عدم تطابق النماذج"

المشكلة: تم إعداد العمود باستخدام text-embedding-005 في إجراء CALL. إذا استخدمت عن طريق الخطأ نموذجًا مختلفًا (مثل text-embedding-004 أو نموذج OSS) في دالة طلب البحث SELECT‏ embedding('model-name', ...)، قد تتطابق الأبعاد (768)، ولكن مساحة المتجه ستكون مختلفة تمامًا. يتم تنفيذ طلب البحث بدون خطأ، ولكن النتائج غير ذات صلة على الإطلاق (نتائج مدى الصلة بالموضوع غير صحيحة). تحديد المشاكل وحلّها:تأكَّد من أنّ model_id في ai.initialize_embeddings يتطابق مع model_id في طلب البحث SELECT تمامًا.

نتيجة "فارغة بدون إشعار" (الفلترة الزائدة)

المشكلة: البحث المختلط هو عملية "AND". يتطلّب ذلك مطابقة دلالية ومطابقة SQL.إذا بحث مستخدم عن "مساعدة بشأن الفوترة"، ولكنّ عمود product_version يحتوي على ‘2.0.1' بدلاً من ‘2.0'، ستكون النتيجة صفر صفوف، حتى إذا كانت مطابقة المتّجه %99. تحديد المشاكل وحلّها:

  • نفِّذ طلب البحث بدون ترتيب المتّجهات أولاً لمعرفة ما إذا كانت فلاتر SQL (WHERE category...) تعرض البيانات فعلاً.
  • تحقَّق من حساسية حالة الأحرف (Billing مقابل billing).

4. أخطاء الأذونات/الحصص (الخطأ 500)

المشكلة:تُجري الدالة embedding() في عبارة SELECT طلب شبكة في الوقت الفعلي إلى Vertex AI.إذا فقد حساب خدمة قاعدة البيانات دور مستخدم Vertex AI، أو إذا بلغت حصة Vertex AI API (عدد الطلبات في الدقيقة)، سيتعذّر تنفيذ طلب SQL بالكامل.تحديد المشاكل وحلّها:

  • تحقَّق من Cloud Logging في AlloyDB.
  • تأكَّد من أنّ دور "إدارة الهوية وإمكانية الوصول" لا يزال نشطًا.
  • يمكنك تضمين الدالة في كتلة TRY/CATCH في الإجراءات المخزَّنة إذا كنت بحاجة إلى مرونة عالية.

5- التضمينات الفارغة

المشكلة:إذا أدخلت بيانات قبل إعداد النموذج بالكامل أو إذا تعذّر على العامل في الخلفية إكمال العملية، قد تحتوي بعض الصفوف على NULL في العمود embedding. تعرض الدالة NULL <=> Vector القيمة NULL. وتختفي هذه الصفوف من نظام الترتيب.تحديد المشاكل وحلّها:

  • شغِّل SELECT count(*) FROM help_articles WHERE embedding IS NULL; للتحقّق من التغطية بنسبة %100.

7. تَنظيم

بعد الانتهاء من هذا التمرين، لا تنسَ حذف مجموعة AlloyDB ومثيلها.

من المفترض أن يؤدي ذلك إلى تنظيف المجموعة مع مثيلاتها.

8. تهانينا

لقد نجحت في إنشاء تطبيق بحث في قاعدة المعرفة قابل للتوسّع. بدلاً من إدارة مسار ETL معقّد باستخدام نصوص برمجية وحلقات تكرار في Python لإنشاء تضمينات المتّجهات، استخدمت AlloyDB AI لمعالجة إنشاء التضمينات بشكلٍ أصلي داخل قاعدة البيانات باستخدام أمر SQL واحد.

المواضيع التي تناولناها

  • لقد أوقفنا "حلقة Python For" لمعالجة البيانات.
  • لقد أنشأنا 50,000 متجه باستخدام أمر SQL واحد.
  • لقد جعلنا عملية إنشاء المتجهات المستقبلية تلقائية باستخدام المشغّلات.
  • أجرينا بحثًا مختلطًا.

الخطوات التالية

  • جرِّب ذلك باستخدام مجموعة البيانات الخاصة بك.
  • استكشِف مستندات AlloyDB AI.
  • يمكنك الاطّلاع على الموقع الإلكتروني Code Vipassana لمزيد من ورش العمل.