مخزن المتجهات في Azure Cosmos DB ل MongoDB vCore
استخدم قاعدة بيانات المتجهات المتكاملة في Azure Cosmos DB ل MongoDB (vCore) لتوصيل التطبيقات المستندة إلى الذكاء الاصطناعي بسلاسة بالبيانات المخزنة في Azure Cosmos DB. يمكن أن يتضمن هذا التكامل التطبيقات التي أنشأتها باستخدام تضمينات Azure OpenAI. تمكنك قاعدة بيانات المتجهات المتكاملة أصلا من تخزين بيانات المتجهات عالية الأبعاد التي يتم تخزينها مباشرة في Azure Cosmos DB ل MongoDB (vCore) وفهرستها والاستعلام عنها بكفاءة، بالإضافة إلى البيانات الأصلية التي يتم إنشاء بيانات المتجه منها. فهو يلغي الحاجة إلى نقل بياناتك إلى مخازن ناقلات بديلة ويتحمل تكاليف إضافية.
ما هو مخزن المتجهات؟
مخزن المتجهات أو قاعدة بيانات المتجهات هي قاعدة بيانات مصممة لتخزين وإدارة تضمينات المتجهات، وهي تمثيلات رياضية للبيانات في مساحة عالية الأبعاد. في هذه المساحة، يتوافق كل بعد مع ميزة من البيانات، ويمكن استخدام عشرات الآلاف من الأبعاد لتمثيل البيانات المعقدة. يمثل موضع المتجه في هذه المساحة خصائصه. يمكن تحويل الكلمات والعبارات أو المستندات الكاملة والصور والصوت وأنواع أخرى من البيانات.
كيف يعمل مخزن المتجهات؟
في مخزن المتجهات، يتم استخدام خوارزميات بحث المتجهات للفهرسة والاستعلام عن تضمينات. تتضمن بعض خوارزميات البحث عن المتجهات المعروفة «Hierarchical Navigable Small World ( HNSW) و Inverted File (IVF) و DiskANN وما إلى ذلك. البحث عن المتجهات هو أسلوب يساعدك على العثور على عناصر مماثلة استنادا إلى خصائص البيانات الخاصة بها بدلا من التطابقات الدقيقة في حقل الخاصية. هذه التقنية مفيدة في التطبيقات مثل البحث عن نص مشابه أو العثور على الصور ذات الصلة أو تقديم التوصيات أو حتى اكتشاف الحالات الشاذة. يتم استخدامه للاستعلام عن تضمينات المتجهات (قوائم الأرقام) للبيانات التي قمت بإنشائها باستخدام نموذج التعلم الآلي باستخدام واجهة برمجة تطبيقات التضمينات. أمثلة على تضمين واجهات برمجة التطبيقات هي تضمينات Azure OpenAI أو عناق الوجه على Azure. يقيس بحث المتجه المسافة بين متجهات البيانات ومتجه الاستعلام. متجهات البيانات الأقرب إلى متجه الاستعلام هي تلك التي تم العثور عليها على أنها متشابهة دلاليا.
في قاعدة بيانات الخطوط المتجهة المتكاملة في Azure Cosmos DB ل MongoDB (vCore)، يمكن تخزين عمليات التضمين وفهرستها والاستفسار إليها جنبا إلى جنب مع البيانات الأصلية. يلغي هذا النهج التكلفة الإضافية لنسخ البيانات في قاعدة بيانات متجهات خالصة منفصلة. علاوة على ذلك، تحافظ هذه البنية على تضمينات المتجهات والبيانات الأصلية معا، ما يسهل عمليات البيانات متعددة الوسائط بشكل أفضل، ويتيح المزيد من تناسق البيانات وحجمها وأدائها.
إجراء بحث عن تشابه المتجهات
يوفر Azure Cosmos DB ل MongoDB (vCore) قدرات بحث متجهات قوية، ما يسمح لك بإجراء عمليات بحث تشابه عالية السرعة عبر مجموعات البيانات المعقدة. لإجراء بحث متجه في Azure Cosmos DB ل MongoDB، تحتاج أولا إلى إنشاء فهرس متجه. يدعم Cosmos DB حاليا ثلاثة أنواع من فهارس المتجهات:
- DiskANN (مستحسن): مثالي لمجموعات البيانات واسعة النطاق، والاستفادة من محركات الأقراص ذات الحالة الثابتة لاستخدام الذاكرة بكفاءة مع الحفاظ على الاستدعاء العالي في عمليات البحث التقريبية الأقرب إلى الجوار (ANN).
- HNSW: مناسب لمجموعات البيانات متوسطة الحجم التي تحتاج إلى استدعاء عال، مع بنية قائمة على الرسم البياني توازن بين الدقة وكفاءة الموارد.
- IVF: يستخدم التجميع لتحسين سرعة البحث في مجموعات البيانات الموسعة، مع التركيز على عمليات البحث داخل المجموعات المستهدفة لتسريع الأداء.
تتوفر فهارس DiskANN على مستويات M40 وما فوق. لإنشاء فهرس DiskANN، قم بتعيين المعلمة "kind"
إلى "vector-diskann"
اتباع القالب أدناه:
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"dimensions": <integer_value>,
"similarity": <string_value>,
"maxDegree" : <integer_value>,
"lBuild" : <integer_value>,
}
}
]
}
الحقل | نوع | الوصف |
---|---|---|
index_name |
سلسلة | اسم فريد للفهرس. |
path_to_property |
سلسلة | المسار إلى الخاصية التي تحتوي على المتجه. يمكن أن يكون هذا المسار خاصية من المستوى الأعلى أو مسار تدوين نقطة إلى الخاصية . يجب أن تكون المتجهات فهرسة number[] واستخدامها في نتائج البحث عن المتجهات. يؤدي استخدام نوع آخر، مثل double[] ، إلى منع فهرسة المستند. لن يتم إرجاع المستندات غير المفهرسة في نتيجة بحث متجه. |
kind |
سلسلة | نوع فهرس المتجهات المراد إنشاؤه. الخيارات هي vector-ivf و vector-hnsw و.vector-diskann |
dimensions |
integer | عدد الأبعاد لتشابه المتجهات. يدعم DiskANN ما يصل إلى 2000 بعد، مع دعم مستقبلي مخطط له ل 40000+. |
similarity |
سلسلة | مقياس التشابه لاستخدامه مع الفهرس. الخيارات المحتملة هي COS (مسافة جيب التمام)، L2 (مسافة الإقليديين)، و IP (المنتج الداخلي). |
maxDegree |
integer | الحد الأقصى لعدد الحواف لكل عقدة في الرسم البياني. تتراوح هذه المعلمة من 20 إلى 2048 (الافتراضي هو 32). maxDegree الأعلى مناسب لمجموعات البيانات ذات الأبعاد العالية و/أو متطلبات الدقة العالية. |
lBuild |
integer | تعيين عدد الجيران المرشحين الذين تم تقييمهم أثناء إنشاء فهرس DiskANN. هذه المعلمة، التي تتراوح من 10 إلى 500 (الافتراضي هو 50)، توازن الدقة والنفقات الحسابية: تعمل القيم الأعلى على تحسين جودة الفهرس ودقته ولكن زيادة وقت الإنشاء |
إجراء بحث متجه باستخدام DiskANN
لإجراء بحث متجه، استخدم $search
مرحلة البنية الأساسية لبرنامج ربط العمليات التجارية للتجميع، والاستعلام مع cosmosSearch
عامل التشغيل. يسمح DiskANN بعمليات البحث عالية الأداء عبر مجموعات البيانات الضخمة مع التصفية الاختيارية مثل عوامل التصفية الجغرافية المكانية أو القائمة على النص.
{
"$search": {
"cosmosSearch": {
"path": "<path_to_property>",
"query": "<query_vector>",
"k": <num_results_to_return>,
"filter": {"$and": [
{ "<attribute_1>": { "$eq": <value> } },
{"<location_attribute>": {"$geoWithin": {"$centerSphere":[[<longitude_integer_value>, <latitude_integer_value>], <radius>]}}}
]}
}
}
},
الحقل | نوع | الوصف |
---|---|---|
lSearch |
integer | تحديد حجم قائمة المرشحين الديناميكية للبحث. القيمة الافتراضية هي 40 ، مع نطاق قابل للتكوين من 10 إلى 1000 . تؤدي زيادة القيمة إلى تحسين الاسترجاع ولكنها قد تقلل من سرعة البحث. |
k |
integer | يحدد عدد نتائج البحث التي سيتم إرجاعها. k يجب أن تكون القيمة أقل من أو مساوية ل lSearch . |
تمكين DiskANN على نظام مجموعة جديد
لتمكين DiskANN Vector Index على نظام مجموعة Azure Cosmos DB ل MongoDB (vCore) الذي تم توفيره حديثا، اتبع هذه الخطوات لإجراء تسجيل على مستوى نظام المجموعة عبر Azure CLI:
- تسجيل الدخول إلى Azure CLI
az login
- استرداد الإعدادات الحالية لعلامات الميزات على نظام المجموعة. يضمن ذلك الاحتفاظ بأي علامات موجودة أثناء إضافة الميزة الجديدة.
az resource show --ids "/subscriptions/<sub id>/resourceGroups/<resource group name>/providers/Microsoft.DocumentDB/mongoClusters/<resource name of your Cosmos DB for MongoDB cluster>" --api-version <cluster's api version>
- أضف العلامة
DiskANNIndex
إلى قائمة ميزات المعاينة دون إزالة أي ميزات موجودة.
az resource patch --ids "/subscriptions/<sub id>/resourceGroups/<resource group name>/providers/Microsoft.DocumentDB/mongoClusters/<resource name of your Cosmos DB for MongoDB cluster>" --api-version <cluster's api version> --properties "{\"previewFeatures\": [\"GeoReplicas\", \"DiskANNIndex\"]}"
مثال على استخدام فهرس DiskANN مع التصفية
إضافة متجهات إلى قاعدة البيانات
لاستخدام البحث المتجه مع عوامل التصفية الجغرافية المكانية، أضف المستندات التي تتضمن تضمينات المتجهات وإحداثيات الموقع. يمكنك إنشاء التضمينات باستخدام النموذج الخاص بك، أو Azure OpenAI Embeddings، أو واجهة برمجة تطبيقات أخرى (مثل Hugging Face على Azure).
from pymongo import MongoClient
client = MongoClient("<your_connection_string>")
db = client["test"]
collection = db["testCollection"]
documents = [
{"name": "Eugenia Lopez", "bio": "CEO of AdventureWorks", "is_open": 1, "location": [-118.9865, 34.0145], "contentVector": [0.52, 0.20, 0.23]},
{"name": "Cameron Baker", "bio": "CFO of AdventureWorks", "is_open": 1, "location": [-0.1278, 51.5074], "contentVector": [0.55, 0.89, 0.44]},
{"name": "Jessie Irwin", "bio": "Director of Our Planet initiative", "is_open": 0, "location": [-118.9865, 33.9855], "contentVector": [0.13, 0.92, 0.85]},
{"name": "Rory Nguyen", "bio": "President of Our Planet initiative", "is_open": 1, "location": [-119.0000, 33.9855], "contentVector": [0.91, 0.76, 0.83]}
]
collection.insert_many(documents)
إنشاء فهرس متجه DiskANN
يوضح المثال التالي كيفية إعداد فهرس متجه DiskANN مع إمكانات التصفية. يتضمن ذلك إنشاء فهرس المتجه للبحث عن التشابه، وإضافة مستندات ذات خصائص متجهة وجيوفضائية، وحقول الفهرسة لتصفية إضافية.
db.command({
"createIndexes": "testCollection",
"indexes": [
{
"name": "DiskANNVectorIndex",
"key": {
"contentVector": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"dimensions": 3,
"similarity": "COS",
"maxDegree": 32,
"lBuild": 64
}
},
{
"name": "is_open",
"key": {
"is_open": 1
}
},
{
"name": "locationIndex",
"key": {
"location": 1
}
}
]
})
ينشئ هذا الأمر فهرس متجه DiskANN في contentVector
الحقل في exampleCollection
، مما يتيح عمليات البحث عن التشابه. كما يضيف:
- فهرس في
is_open
الحقل، مما يسمح لك بتصفية النتائج استنادا إلى ما إذا كانت الشركات مفتوحة. - فهرس جغرافي مكاني في
location
الحقل للتصفية حسب التقارب الجغرافي.
إجراء بحث متجه
للعثور على مستندات ذات خطوط متجهة مماثلة ضمن نصف قطر جغرافي معين، حدد للبحث عن queryVector
التشابه وقم بتضمين عامل تصفية جيوفضائي.
query_vector = [0.52, 0.28, 0.12]
pipeline = [
{
"$search": {
"cosmosSearch": {
"path": "contentVector",
"vector": query_vector,
"k": 5,
"filter": {
"$and": [
{"is_open": {"$eq": 1}},
{"location": {"$geoWithin": {"$centerSphere": [[-119.7192861804, 34.4102485028], 100 / 3963.2]}}}
]
}
}
}
}
]
results = list(collection.aggregate(pipeline))
for result in results:
print(result)
في هذا المثال، يرجع البحث عن تشابه المتجهات أعلى k
أقرب المتجهات استنادا إلى مقياس التشابه المحدد COS
، مع تصفية النتائج لتضمين الأعمال المفتوحة فقط ضمن نصف قطر 100 ميل.
[
{
similarityScore: 0.9745354109084544,
document: {
_id: ObjectId("645acb54413be5502badff94"),
name: 'Eugenia Lopez',
bio: 'CEO of AdventureWorks',
is_open: 1,
location: [-118.9865, 34.0145],
contentVector: [0.52, 0.20, 0.23]
}
},
{
similarityScore: 0.9006955671333992,
document: {
_id: ObjectId("645acb54413be5502badff97"),
name: 'Rory Nguyen',
bio: 'President of Our Planet initiative',
is_open: 1,
location: [-119.7302, 34.4005],
contentVector: [0.91, 0.76, 0.83]
}
}
]
تظهر هذه النتيجة أهم المستندات المشابهة ل queryVector
، المقيدة لنصف قطر 100 ميل والأعمال المفتوحة. تتضمن كل نتيجة درجة التشابه وبيانات التعريف، ما يوضح كيف يدعم DiskANN في Cosmos DB ل MongoDB الاستعلامات المتجهة والجيوفضائية المجمعة لتجارب البحث المحسنة والحساسة للموقع.
الحصول على تعريفات فهرس المتجهات
لاسترداد تعريف فهرس المتجهات من المجموعة، استخدم listIndexes
الأمر :
db.exampleCollection.getIndexes();
في هذا المثال، vectorIndex
يتم إرجاع مع كافة cosmosSearch
المعلمات التي تم استخدامها لإنشاء الفهرس:
[
{ v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
{
v: 2,
key: { vectorContent: 'cosmosSearch' },
name: 'vectorSearchIndex',
cosmosSearch: {
kind: <index_type>, // options are `vector-ivf`, `vector-hnsw`, and `vector-diskann`
numLists: 3,
similarity: 'COS',
dimensions: 3
},
ns: 'test.exampleCollection'
}
]
بحث متجه تمت تصفيته (معاينة)
يمكنك الآن تنفيذ عمليات البحث الموجهة باستخدام أي عامل تصفية استعلام معتمد مثل $lt
و$eq
$lte
$nin
$gte
$neq
$gt
$in
.$regex
قم بتمكين ميزة "تصفية البحث عن المتجهات" في علامة التبويب "ميزات المعاينة" في اشتراك Azure الخاص بك. تعرف على المزيد حول ميزات المعاينة هنا.
أولا، ستحتاج إلى تعريف فهرس لعامل التصفية بالإضافة إلى فهرس متجه. على سبيل المثال، يمكنك تعريف فهرس التصفية على خاصية
db.runCommand({
"createIndexes": "<collection_name",
"indexes": [ {
"key": {
"<property_to_filter>": 1
},
"name": "<name_of_filter_index>"
}
]
});
بعد ذلك، يمكنك إضافة "filter"
المصطلح إلى بحث المتجه كما هو موضح أدناه. في هذا المثال، يبحث عامل التصفية عن مستندات حيث لا تكون الخاصية "title"
["not in this text", "or this text"]
في قائمة .
db.exampleCollection.aggregate([
{
'$search': {
"cosmosSearch": {
"vector": "<query_vector>",
"path": <path_to_vector>,
"k": num_results,
"filter": {<property_to_filter>: {"$nin": ["not in this text", "or this text"]}}
},
"returnStoredSource": True }},
{'$project': { 'similarityScore': { '$meta': 'searchScore' }, 'document' : '$$ROOT' }
}
]);
هام
أثناء المعاينة، قد يتطلب منك البحث في المتجهات المصفاة ضبط معلمات فهرس المتجهات لتحقيق دقة أعلى. على سبيل المثال، قد تؤدي زيادة m
أو أو عند efSearch
استخدام HNSW أو numLists
أو nProbes
عند استخدام IVF efConstruction
إلى نتائج أفضل. يجب اختبار التكوين قبل الاستخدام للتأكد من أن النتائج مرضية.
استخدام أدوات تنسيق LLM
استخدم كقاعدة بيانات متجهة مع Kernel الدلالي
استخدم Kernel الدلالي لتنسيق استرداد المعلومات من Azure Cosmos DB ل MongoDB vCore و LLM الخاص بك. تعرف على المزيد من هنا.
استخدم كقاعدة بيانات متجهة مع LangChain
استخدم LangChain لتنسيق استرداد المعلومات من Azure Cosmos DB ل MongoDB vCore و LLM الخاص بك. تعرف على المزيد من هنا.
استخدم كذاكرة تخزين مؤقت دلالية مع LangChain
استخدم LangChain وAzure Cosmos DB ل MongoDB (vCore) لتنسيق التخزين المؤقت الدلالي، باستخدام استجابات LLM المسجلة مسبقا التي يمكن أن توفر لك تكاليف واجهة برمجة تطبيقات LLM وتقليل زمن الانتقال للاستجابات. تعرَّف على المزيد من هنا
الميزات والقيود
- مقاييس المسافة المدعومة: L2 (إقليديان)، والمنتج الداخلي، والجيب المشترك.
- أساليب الفهرسة المدعومة: IVFFLAT وHNSW و DiskANN (معاينة)
- فهرسة المتجهات حتى 2000 بعد في الحجم.
- تنطبق الفهرسة على متجه واحد فقط لكل مسار.
- يمكن إنشاء فهرس واحد فقط لكل مسار متجه.
الملخص
يوضح هذا الدليل كيفية إنشاء فهرس متجه وإضافة مستندات تحتوي على بيانات متجهات وإجراء بحث عن التشابه واسترداد تعريف الفهرس. باستخدام قاعدة بيانات المتجهات المتكاملة، يمكنك تخزين وفهرسة والاستعلام عن بيانات المتجهات عالية الأبعاد بكفاءة مباشرة في Azure Cosmos DB ل MongoDB vCore. تمكنك من فتح الإمكانات الكاملة لبياناتك عبر تضمينات المتجهات، وتمكنك من إنشاء تطبيقات أكثر دقة وكفاءة وقوة.
المحتوى ذو الصلة
- حل مرجع البيع بالتجزئة لنمط .NET RAG
- البرنامج التعليمي .NET - روبوت الدردشة الوصفة
- نمط C# RAG - دمج OpenAI Services مع Cosmos
- نمط Python RAG - روبوت دردشة منتج Azure
- البرنامج التعليمي لدفتر ملاحظات Python - تكامل قاعدة بيانات المتجهات من خلال LangChain
- البرنامج التعليمي لدفتر ملاحظات Python - تكامل التخزين المؤقت LLM من خلال LangChain
- Python - تكامل LlamaIndex
- Python - تكامل ذاكرة Kernel الدلالية