مرحبًا بك في ميزة "البحث عن التشابه في المتجهات" في Firebase Data Connect، وهي ميزة يوفّرها Firebase لتطبيق البحث الدلالي الذي يتكامل مع Google Vertex AI.
تعتمد هذه الميزة بشكل أساسي على عمليات إدراج المتجهات، وهي صفائف من الأرقام المتغيرة النقطة التي تمثّل المعنى الدلالي للنص أو الوسائط. من خلال إجراء عملية
بحث عن أقرب العناصر باستخدام إدراج متجه الإدخال، يمكنك العثور على كل المحتوى الذي يشبه المحتوى الحالي من الناحية الدلالية. يستخدم Data Connect إضافة
pgvector
في PostgreSQL للحصول على هذه الميزة.
يمكن أن يؤدي هذا البحث الدلالي القوي إلى زيادة حالات الاستخدام، مثل محرّكات الاقتراحات ومحرّكات البحث. وهو أيضًا مكوّن رئيسي في الإنشاء المعزّز بالاسترجاع في عمليات الذكاء الاصطناعي التوليدي. يمكنك الاطّلاع على مستندات Vertex AI للحصول على مزيد من المعلومات.
يمكنك الاعتماد على ميزة Data Connect المضمّنة لإنشاء embeddings المتجهة تلقائيًا باستخدام واجهة برمجة التطبيقات Embeddings API من Vertex AI، أو استخدام واجهة برمجة التطبيقات هذه لإنشاءها يدويًا.
المتطلبات الأساسية
إعداد أداة "ربط البيانات" لمشروعك
الإعداد
يمكنك الاختيار بين عملية تطوير على الجهاز (إذا كنت مطوّر تطبيقات ويب أو Kotlin Android أو iOS) أو عملية تطوير باستخدام IDX (لمطوّري تطبيقات الويب). يمكنك استخدام قاعدة بيانات محلية أو مشروع Data Connect في مرحلة الإنتاج و مثيل "Cloud SQL لنظام PostgreSQL" لتطوير التطبيقات.
تفترض هذه التعليمات أنّك أنشأت مشروع Data Connect باتّباع دليل البدء السريع.
الدمج مع PostgreSQL المحلي
- إعداد مثيل PostgreSQL محلي
- امنح نفسك دور إدارة الهوية وإمكانية الوصول لمستخدم Vertex AI.
- إعداد بيانات الاعتماد التلقائية لتطبيقات Google Cloud في بيئتك
- ثبِّت إضافة
pgvector
في مثيل PostgreSQL المحلي. - فعِّل الإضافة باستخدام
CREATE EXTENSION vector
وفقًا لتعليماتpgvector
المستودع.
الدمج مع IDX
- إعداد مساحة عمل IDX باستخدام نموذج "ربط البيانات"
- امنح نفسك دور إدارة الهوية وإمكانية الوصول لمستخدم Vertex AI.
- فعِّل الإضافة باستخدام
CREATE EXTENSION vector
وفقًا لتعليماتpgvector
المستودع.
تصميم المخطّط
لإجراء بحث متجه، أضِف حقلًا جديدًا من النوع Vector
في مخطّطك. على سبيل المثال، إذا كنت تريد إجراء بحث دلالي باستخدام أوصاف الأفلام، أضِف حقلًا لحفظ عمليات إدراج المتجهات المرتبطة بوصف الفيلم. في
هذا المخطّط، تتم إضافة descriptionEmbedding
لتخزين عمليات إدراج المتجهات في
حقل description
.
type Movie @table {
id: ID! @col(name: "movie_id") @default(id: ID! @col(name: "movie_id") @default(expr: "uuidV4()")
title: String!
description: String
descriptionEmbedding: Vector! @col(size:768)
// ...
}
إنشاء البيانات المضمّنة واستردادها
توفّر الدالة Data Connect ميزة مدمجة لاستخدام إدراجات المتجهات مع قيمة خادم _embed
. يوجّه هذا الإجراء Data Connect إلى إنشاء
إدخالات متجهات من خلال طلب واجهات برمجة تطبيقات Embedding في Vertex AI داخليًا. يمكن استخدام قيمة _embed
server في كلّ من طلبات التعديل والاستعلامات.
الطفرات
إنشاء رمز مضمّن وتخزينه من خلال Data Connect
في تطبيق البحث بالاستناد إلى المتجهات، من المرجّح أن تطلب إنشاء الحِزم عند إضافة سجلّات إلى قاعدة بياناتك. في ما يلي createMovie
تحوُّل يضيف سجلّ فيلم إلى جدول Movie
ويُرسِل أيضًا وصفًا
للفيلم مع تضمين model
محدّد.
mutation createMovie($movieData: Movie_Data! @pick(fields: ["title", "genre", "description"])) {
movie_insert(data: {
...movieData,
descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: $movieData.description}
})
}
في بعض الحالات، قد تحتاج إلى تعديل وصف الفيلم وتضمينه.
mutation updateDescription($id: String!, $description: String!) {
movie_update(id: $id, data: {
description: $description,
descriptionEmbedding_embed: {model: "textembedding-gecko@003", text: $description}
})
}
لاستدعاء عملية التحويل الأخيرة من عميل:
import { updateMovieDescriptionWithEmbed } from 'lib/dataconnect-sdk/';
await updateMovieDescriptionWithEmbed({ id: movieId, description: description});
// Use the response
طلبات البحث
يمكنك جلب عمليات إدراج المتجهات باستخدام طلب بحث مثل ما يلي. يُرجى العِلم أنّ القيمة
descriptionEmbedding
التي يعرضها الطلب هي صفيف من الأعداد العشرية، وهي قيمة
لا يمكن لشخص عادي قراءتها عادةً. وبالتالي، لا تتيح حِزم SDK التي تم إنشاؤها باستخدام Data Connect
إرجاعها مباشرةً.
يمكنك استخدام عمليات إدراج المتجهات المعروضة لإجراء بحث التشابه، كما هو موضّح في القسم التالي.
query getMovieDescription($id: String!) @auth(is: PUBLIC) {
movie(id: $id)
id
description
descriptionEmbedding
}
إجراء بحث تشابه
يمكننا الآن إجراء بحث التشابه.
لكل حقل Vector
، ينشئ Data Connect دالة GraphQL
تنفِّذ البحث عن التشابه. اسم هذه الدالة التي تم إنشاؤها هو
${pluralType}_${vectorFieldName}_similarity
. وهو يتيح استخدام بعض المَعلمات
كما هو موضّح في الأمثلة التالية وفي قائمة المراجع.
يمكنك تحديد دالة GraphQL تستدعي البحث عن التشابه. كما ذكرنا أعلاه، توجّه قيمة خادم _embed
العنصر Data Connect لإنشاء نماذج مضمّنة للأشكال باستخدام واجهات برمجة تطبيقات Embedding API في Vertex AI، وفي هذه الحالة لإنشاء نماذج مضمّنة لسلاسل البحث المستخدَمة للمقارنة بنماذج مضمّنة لوصف الفيلم.
في هذا المثال، سيعرض البحث عن التشابه ما يصل إلى 5 أفلام يكون وصفها الأقرب من الناحية الدلالية إلى طلب البحث الذي أدخلته. يتم ترتيب مجموعة النتائج بالترتيب التصاعدي للمسافة، بدءًا من الأقرب إلى الأبعد.
query searchMovieDescriptionUsingL2Similarity ($query: String!) @auth(level: PUBLIC) {
movies_descriptionEmbedding_similarity(
compare_embed: {model: "textembedding-gecko@003", text: $query},
method: L2,
within: 2,
where: {content: {ne: "No info available for this movie."}}, limit: 5)
{
id
title
description
}
}
استدعاء طلب التشابه
لاستدعاء بحث التشابه من رمز العميل:
import { searchMovieDescriptionUsingL2similarity} from 'lib/dataconnect-sdk';
const response = await searchMovieDescriptionUsingL2similarity({ query });
// Use the response
استخدام عمليات التضمين المخصّصة
تتيح لك Data Connect أيضًا العمل مع عمليات التضمين مباشرةً كعناصر Vector
بدلاً من استخدام قيمة خادم _embed
لإنشاءها.
تخزين تضمين مخصّص
باستخدام Vertex Embeddings API، حدِّد نموذجًا مطابقًا واطلِب نتائج التضمين للسمة الصحيحة.
بعد ذلك، عليك تحويل الصفيف الذي تم إرجاعه من الأعداد العشرية إلى Vector
لتمرير عملية التحديث
للتخزين.
mutation updateDescription($id: String!, $description: String!, $descriptionEmbedding: Vector!) {
movie_update(id: $id, data: {
// title, genre...
description: $description,
descriptionEmbedding: $descriptionEmbedding
})
}
إجراء بحث تشابه باستخدام عمليات التضمين المخصّصة
نفِّذ العملية نفسها لاسترداد عمليات التضمين الخاصة بعبارات البحث وتحويلها
إلى Vectors
.
بعد ذلك، استخدِم طلب البحث _similarity
لإجراء كل عملية بحث.
query searchMovieDescriptionUsingL2Similarity($compare: Vector!, $within: Float, $excludesContent: String, $limit: Int) @auth(level: PUBLIC) {
movies_descriptionEmbedding_similarity(
compare: $compare,
method: L2,
within: $within,
where: {content: {ne: $excludesContent}}, limit: $limit)
{
id
title
description
}
}
النشر في قناة الإصدار العلني
نشر المخطّط والموصّل
الخطوة الأخيرة في دورة Data Connect نموذجية هي نشر مواد العرض في قناة الإصدار العلني.
عند نشر المخطّط الذي يحتوي على أنواع Vector
في CloudSQL باستخدام الأمر
firebase deploy
، تتّخذ أداة Firebase CLI الخطوات اللازمة ل
تفعيل إنشاء العناصر المضمّنة المستندة إلى Vertex AI في مثيل CloudSQL.
firebase deploy --only dataconnect
إذا كنت تريد تفعيل ميزة التضمين في مثيل CloudSQL يدويًا، أو إذا صادفت خطأ في واجهة برمجة التطبيقات، اتّبِع هذه التعليمات.
بنية البحث في "الأشكال الهندسية"
إضافات المخطط
يتم ربط نوع البيانات Vector
في Data Connect بنوع vector
في PostgreSQL
على النحو المحدّد من خلال إضافة pgvector
.
يتم تخزين نوع vector
في pgvector كصفيف من الأرقام المتغيرة
بدقة واحدة في PostgreSQL.
في Data Connect، يتم تمثيل نوع Vector
كصفيف من أرقام
JSON. يتم تحويل الإدخالات إلى صفيف من قيم float32
. إذا تعذّر
الإجبار، يتم طرح خطأ.
استخدِم مَعلمة size للتوجيه @col
لضبط أبعاد الvector.
type Question @table {
text: String!
category: String!
textEmbedding: Vector! @col(size: 768)
}
لا تتوفّر السمة size
إلا لأنواع Vector
. تتطلّب عمليات Vector
،
مثل البحث عن التشابه، أن يكون لكل Vector
العدد نفسه من السمات.
directive @col(
# … existing args
"""
Defines a fixed column size for certain scalar types.
- For Vector, size is required.
- For all other types, size is currently unsupported and hence supplying it will result in a schema error.
"""
size: Int
) on FIELD_DEFINITION
قيمة خادم _embed
للطلبات وعمليات التحويل
_embed
توجّه قيمة الخادم هذه خدمة Data Connect لإنشاء وحفظ البيانات المضمّنة باستخدام واجهات برمجة تطبيقات Embedding API في Vertex AI. يمكن استخدام قيمة الخادم هذه في كلّ من طلبات البحث والطفرات.
المَعلمات لميزة "البحث عن المحتوى المشابه"
method: COSINE|INNER_PRODUCT|L2
دالة المسافة المستخدَمة للبحث عن المنازل المجاورة إنّ الخوارزميات المتاحة حاليًا هي مجموعة فرعية من خوارزميات البحث في pgvector.
within: float
قيد على المسافة التي يتم فيها تنفيذ عملية البحث عن الجار الأقرب
where: FDC filter condition
اطّلِع على دليل المخططات وطلبات البحث والطفرات.
limit: int
عدد النتائج المطلوب عرضها.