Firebase Data Connect এর ভেক্টর সাদৃশ্য অনুসন্ধানে স্বাগতম — Firebase-এর শব্দার্থিক অনুসন্ধানের বাস্তবায়ন যা Google Vertex AI-এর সাথে একীভূত হয়৷
এই বৈশিষ্ট্যের মূলে রয়েছে ভেক্টর এমবেডিং, যা টেক্সট বা মিডিয়ার শব্দার্থিক অর্থকে উপস্থাপন করে ফ্লোটিং পয়েন্ট সংখ্যার অ্যারে। একটি ইনপুট ভেক্টর এম্বেডিং ব্যবহার করে একটি নিকটতম প্রতিবেশী অনুসন্ধান চালানোর মাধ্যমে, আপনি সমস্ত শব্দার্থগতভাবে অনুরূপ সামগ্রী খুঁজে পেতে পারেন। Data Connect এই ক্ষমতার জন্য PostgreSQL এর pgvector
এক্সটেনশন ব্যবহার করে।
এই শক্তিশালী শব্দার্থিক অনুসন্ধান সুপারিশ ইঞ্জিন এবং সার্চ ইঞ্জিনের মতো ব্যবহারের ক্ষেত্রে চালাতে পারে। এটি জেনারেটিভ এআই প্রবাহে পুনরুদ্ধার-বর্ধিত প্রজন্মের একটি মূল উপাদান। Vertex AI ডকুমেন্টেশন আরও জানার জন্য একটি দুর্দান্ত জায়গা।
Vertex AI এর এমবেডিং এপিআই ব্যবহার করে স্বয়ংক্রিয়ভাবে ভেক্টর এম্বেডিং তৈরি করার জন্য আপনি Data Connect অন্তর্নির্মিত সমর্থনের উপর নির্ভর করতে পারেন, অথবা সেগুলি ম্যানুয়ালি তৈরি করতে সেই API ব্যবহার করতে পারেন।
পূর্বশর্ত
আপনার প্রকল্পের জন্য ডেটা সংযোগ সেট আপ করুন ৷
Vertex AI APIs সক্ষম করুন৷
সেটআপ
আপনি স্থানীয় ডেভেলপমেন্ট ফ্লো (যদি আপনি একজন ওয়েব, কোটলিন অ্যান্ড্রয়েড বা iOS ডেভেলপার হন) অথবা একটি IDX ফ্লো (ওয়েব ডেভেলপারদের জন্য) এর মধ্যে বেছে নিতে পারেন। আপনি একটি স্থানীয় ডাটাবেস বা আপনার প্রোডাকশন Data Connect প্রজেক্ট এবং এর ক্লাউড এসকিউএল পোস্টগ্রেএসকিউএল ইনস্ট্যান্স ডেভেলপমেন্টের জন্য ব্যবহার করতে পারেন।
এই নির্দেশাবলী অনুমান করে যে আপনি কুইকস্টার্ট গাইড অনুসরণ করে আপনার Data Connect প্রকল্প তৈরি করেছেন।
স্থানীয় PostgreSQL এর সাথে একীভূত করুন
- একটি স্থানীয় PostgreSQL উদাহরণ সেট আপ করুন।
- নিজেকে Vertex AI ব্যবহারকারী IAM ভূমিকা প্রদান করুন ৷
- আপনার পরিবেশে Google ক্লাউড অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র সেট আপ করুন৷
- আপনার স্থানীয় PostgreSQL উদাহরণে
pgvector
এক্সটেনশন ইনস্টল করুন। -
pgvector
সংগ্রহস্থলের নির্দেশাবলী অনুযায়ীCREATE EXTENSION vector
ব্যবহার করে এক্সটেনশন সক্রিয় করুন।
IDX এর সাথে একীভূত করুন
- ডেটা কানেক্ট টেমপ্লেট ব্যবহার করে আপনার IDX ওয়ার্কস্পেস সেট আপ করুন।
- নিজেকে Vertex AI ব্যবহারকারী IAM ভূমিকা প্রদান করুন ৷
-
pgvector
সংগ্রহস্থলের নির্দেশাবলী অনুযায়ীCREATE EXTENSION vector
ব্যবহার করে এক্সটেনশন সক্রিয় করুন।
আপনার স্কিমা ডিজাইন করুন
ভেক্টর অনুসন্ধান করতে, আপনার স্কিমাতে Vector
ধরণের একটি নতুন ক্ষেত্র যোগ করুন। উদাহরণস্বরূপ, যদি আপনি চলচ্চিত্রের বর্ণনা ব্যবহার করে একটি শব্দার্থিক অনুসন্ধান করতে চান, তাহলে চলচ্চিত্রের বিবরণের সাথে যুক্ত ভেক্টর এম্বেডিংগুলিকে ধরে রাখতে একটি ক্ষেত্র যুক্ত করুন। এই স্কিমাতে, description
ক্ষেত্রের জন্য ভেক্টর এম্বেডিং সংরক্ষণ করতে descriptionEmbedding
যোগ করা হয়।
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 ভেক্টর এম্বেডিং তৈরি করতে নির্দেশ করে অভ্যন্তরীণভাবে Vertex AI-এর এমবেডিং API-কে কল করে। _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
হল ফ্লোটগুলির একটি অ্যারে, যা সাধারণত মানব-পঠনযোগ্য নয়। সুতরাং, Data Connect জেনারেট করা SDK গুলি সরাসরি ফেরত দেওয়া সমর্থন করে না৷
আপনি সাদৃশ্য অনুসন্ধান করতে ফেরত ভেক্টর এম্বেডিং ব্যবহার করতে পারেন, যেমনটি পরবর্তী বিভাগে বর্ণিত হয়েছে।
query getMovieDescription($id: String!) @auth(is: PUBLIC) {
movie(id: $id)
id
description
descriptionEmbedding
}
সাদৃশ্য অনুসন্ধান সঞ্চালন
এখন আমরা সাদৃশ্য অনুসন্ধান করতে পারি।
প্রতিটি Vector
ক্ষেত্রের জন্য, Data Connect একটি গ্রাফকিউএল ফাংশন তৈরি করে যা সাদৃশ্য অনুসন্ধান বাস্তবায়ন করে। এই উৎপন্ন ফাংশনের নাম হল ${pluralType}_${vectorFieldName}_similarity
। নিম্নলিখিত উদাহরণে এবং রেফারেন্স তালিকায় দেখানো হিসাবে এটি কয়েকটি পরামিতি সমর্থন করে।
আপনি একটি গ্রাফকিউএল ফাংশন সংজ্ঞায়িত করতে পারেন যা সাদৃশ্য অনুসন্ধানকে আহ্বান করে। উপরে উল্লিখিত হিসাবে, _embed
সার্ভার মান Vertex AI এর এমবেডিং এপিআই ব্যবহার করে ভেক্টর এম্বেডিং তৈরি করতে Data Connect নির্দেশ করে, এই ক্ষেত্রে মুভির বর্ণনা এম্বেডিংয়ের সাথে তুলনা করার জন্য ব্যবহৃত অনুসন্ধান স্ট্রিংয়ের জন্য এমবেডিং তৈরি করতে।
এই উদাহরণে, সাদৃশ্য অনুসন্ধান 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 পুনরাবৃত্তির শেষ ধাপ হল আপনার সম্পদ উৎপাদনে স্থাপন করা।
firebase deploy
কমান্ড ব্যবহার করে ক্লাউডএসকিউএল-এ Vector
ধরন সমন্বিত আপনার স্কিমা স্থাপন করার সময়, আপনার ক্লাউডএসকিউএল ইন্সট্যান্সে ভার্টেক্স এআই-ভিত্তিক এমবেডিং জেনারেশন সক্ষম করতে Firebase CLI প্রয়োজনীয় পদক্ষেপ নেয়।
firebase deploy --only dataconnect
আপনি যদি আপনার ক্লাউডএসকিউএল ইনস্ট্যান্সে এমবেডিং সমর্থন ম্যানুয়ালি সক্ষম করতে চান, বা একটি CLI ত্রুটির সম্মুখীন হন, তাহলে এই নির্দেশাবলী অনুসরণ করুন।
ভেক্টর অনুসন্ধান সিনট্যাক্স
স্কিমা এক্সটেনশন
Data Connect Vector
ডাটা টাইপ মানচিত্র পোস্টগ্রেএসকিউএল-এর vector
টাইপ যেমন pgvector
এক্সটেনশন দ্বারা সংজ্ঞায়িত করা হয়েছে। pgvector-এর vector
টাইপ 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
এই সার্ভার মান Vertex AI এর এমবেডিং API ব্যবহার করে এম্বেডিং তৈরি এবং সঞ্চয় করতে Data Connect পরিষেবাকে নির্দেশ করে৷ এই সার্ভার মান উভয় প্রশ্ন এবং মিউটেশন ব্যবহার করা যেতে পারে.
সাদৃশ্য অনুসন্ধানের জন্য পরামিতি
method: COSINE|INNER_PRODUCT|L2
দূরত্ব ফাংশন কাছাকাছি প্রতিবেশীদের জন্য অনুসন্ধান করতে ব্যবহৃত. বর্তমানে-সমর্থিত অ্যালগরিদম হল pgvector সার্চ অ্যালগরিদমের একটি উপসেট।
within: float
দূরত্বের একটি সীমাবদ্ধতা যার মধ্যে নিকটতম প্রতিবেশী অনুসন্ধান করা হয়।
where: FDC filter condition
স্কিমা, প্রশ্ন এবং মিউটেশন গাইড দেখুন।
limit: int
ফলাফলের সংখ্যা।