به جستجوی تشابه برداری Firebase Data Connect خوش آمدید - اجرای Firebase از جستجوی معنایی که با Google Vertex AI ادغام می شود.
در هسته این ویژگی تعبیههای برداری قرار دارند که آرایههایی از اعداد ممیز شناور هستند که معنای معنایی متن یا رسانه را نشان میدهند. با اجرای جستجوی نزدیکترین همسایه با استفاده از جاسازی بردار ورودی، می توانید تمام محتوای مشابه معنایی را پیدا کنید. Data Connect از پسوند pgvector
PostgreSQL برای این قابلیت استفاده می کند.
این جستجوی معنایی قدرتمند می تواند موارد استفاده مانند موتورهای توصیه و موتورهای جستجو را هدایت کند. همچنین یک جزء کلیدی در تولید افزوده بازیابی در جریانهای هوش مصنوعی مولد است. مستندات Vertex AI مکانی عالی برای کسب اطلاعات بیشتر است.
میتوانید به پشتیبانی داخلی Data Connect برای ایجاد خودکار جاسازیهای برداری با استفاده از Vertex AI Embeddings API تکیه کنید، یا از آن API برای تولید دستی آنها استفاده کنید.
پیش نیازها
راه اندازی
شما می توانید بین یک جریان توسعه محلی (اگر توسعه دهنده وب، Kotlin Android یا iOS هستید) یا یک جریان IDX (برای توسعه دهندگان وب) یکی را انتخاب کنید. می توانید از یک پایگاه داده محلی یا پروژه تولیدی Data Connect و Cloud SQL آن برای نمونه PostgreSQL برای توسعه استفاده کنید.
این دستورالعملها فرض میکنند که پروژه Data Connect خود را طبق راهنمای شروع سریع ایجاد کردهاید.
ادغام با PostgreSQL محلی
- یک نمونه محلی PostgreSQL را تنظیم کنید.
- به خود نقش IAM کاربر Vertex AI را بدهید .
- اعتبارنامه پیشفرض Google Cloud Application را در محیط خود تنظیم کنید.
- پسوند
pgvector
را در نمونه محلی PostgreSQL خود نصب کنید. - افزونه را با استفاده از
CREATE EXTENSION vector
در دستورالعمل های مخزنpgvector
فعال کنید.
ادغام با IDX
- با استفاده از الگوی Data Connect فضای کاری IDX خود را تنظیم کنید.
- به خود نقش IAM کاربر 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
ارائه می کند. با فراخوانی داخلی Vertex AI Embedding API ها، Data Connect هدایت می کند تا جاسازی های برداری را ایجاد کند. مقدار سرور _embed
را می توان هم در جهش و هم در پرس و جو استفاده کرد.
جهش ها
یک جاسازی از طریق 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 هدایت می کند تا جاسازی های برداری را با استفاده از API های Embedding 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 همچنین به شما امکان می دهد به جای استفاده از مقدار سرور _embed
برای تولید آنها، مستقیماً با جاسازی ها به عنوان Vector
کار کنید.
یک جاسازی سفارشی ذخیره کنید
با استفاده از 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 در نمونه CloudSQL انجام میدهد.
firebase deploy --only dataconnect
اگر می خواهید پشتیبانی جاسازی را در نمونه CloudSQL خود به صورت دستی فعال کنید یا با یک خطای CLI مواجه شدید، این دستورالعمل ها را دنبال کنید.
نحو جستجوی برداری
پسوند طرحواره
نوع داده Vector
's Data Connect به نوع vector
PostgreSQL همانطور که توسط پسوند pgvector
تعریف شده است، نگاشت می شود. نوع vector
pgvector به صورت آرایه ای از اعداد ممیز شناور دقیق در PostgreSQL ذخیره می شود.
در Data Connect ، نوع Vector
به صورت آرایه ای از اعداد JSON نشان داده می شود. ورودی ها به آرایه ای از مقادیر float32
منتقل می شوند. اگر اجبار ناموفق باشد، خطا مطرح می شود.
برای تنظیم ابعاد بردار از پارامتر اندازه دستور @col
استفاده کنید.
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 را برای تولید و ذخیره جاسازی ها با استفاده از API های Embedding Vertex AI هدایت می کند. این مقدار سرور را می توان در هر دو پرس و جو و جهش استفاده کرد.
پارامترهای جستجوی شباهت
method: COSINE|INNER_PRODUCT|L2
تابع فاصله برای جستجوی همسایگان نزدیک استفاده می شود. الگوریتمهای پشتیبانیشده در حال حاضر زیرمجموعهای از الگوریتمهای جستجوی pgvector هستند.
within: float
محدودیت در فاصله ای که جستجوی نزدیکترین همسایه در آن انجام می شود.
where: FDC filter condition
طرحواره ها، پرس و جوها و راهنمای جهش ها را ببینید.
limit: int
تعداد نتایج برای بازگشت.