MongoDB sanal çekirdeği için Azure Cosmos DB'de Vektör Deposu
ŞUNLAR IÇIN GEÇERLIDIR: MongoDB sanal çekirdeği
Yapay zeka tabanlı uygulamalarınızı Azure Cosmos DB'de depolanan verilerinize sorunsuz bir şekilde bağlamak için MongoDB için Azure Cosmos DB sanal çekirdeğinde Tümleşik Vektör Veritabanı'nı kullanın. Bu tümleştirme, Azure OpenAI eklemelerini kullanarak oluşturduğunuz uygulamaları içerebilir. Yerel olarak tümleştirilmiş vektör veritabanı, doğrudan MongoDB sanal çekirdeği için Azure Cosmos DB'de depolanan yüksek boyutlu vektör verilerini ve vektör verilerinin oluşturulduğu özgün verileri verimli bir şekilde depolamanızı, dizinlemenizi ve sorgulamanızı sağlar. Verilerinizi alternatif vektör depolarına aktarma gereksinimini ortadan kaldırır ve ek maliyetler doğurabilir.
Vektör deposu nedir?
Vektör deposu veya vektör veritabanı , yüksek boyutlu bir alanda verilerin matematiksel temsilleri olan vektör eklemelerini depolamak ve yönetmek için tasarlanmış bir veritabanıdır. Bu alanda, her boyut verilerin bir özelliğine karşılık gelir ve gelişmiş verileri temsil etmek için on binlerce boyut kullanılabilir. Vektörlerin bu boşluktaki konumu, özelliklerini temsil eder. Sözcükler, tümcecikler veya belgelerin tamamı, görüntüler, ses ve diğer veri türlerinin tümü vektörleştirilebilir.
Vektör deposu nasıl çalışır?
Vektör deposunda, eklemeleri dizine almak ve sorgulamak için vektör arama algoritmaları kullanılır. Bazı iyi bilinen vektör arama algoritmaları Hiyerarşik Gezinilebilir Küçük Dünya (HNSW), Ters Dosya (IVF), DiskANN vb. içerir. Vektör arama, bir özellik alanında tam eşleşmeler yerine veri özelliklerine göre benzer öğeleri bulmanıza yardımcı olan bir yöntemdir. Bu teknik, benzer metin arama, ilgili görüntüleri bulma, önerilerde bulunma ve hatta anomalileri algılama gibi uygulamalarda kullanışlıdır. EklemeLER API'sini kullanarak makine öğrenmesi modeli kullanarak oluşturduğunuz verilerinizin vektör eklemelerini (sayı listeleri) sorgulamak için kullanılır. Ekleme API'lerine örnek olarak Azure OpenAI Eklemeleri veya Azure'da Yüz Tanımayı Kucaklama verilebilir. Vektör araması, veri vektörleri ile sorgu vektörünüzün arasındaki mesafeyi ölçer. Sorgu vektörünüzün en yakın veri vektörleri, en benzer olduğu saptanan vektörlerdir.
MongoDB sanal çekirdeği için Azure Cosmos DB'deki Tümleşik Vektör Veritabanı'nda eklemeler özgün verilerin yanı sıra depolanabilir, dizinlenebilir ve sorgulanabilir. Bu yaklaşım, verileri ayrı bir saf vektör veritabanında çoğaltmanın ek maliyetini ortadan kaldırır. Ayrıca bu mimari, vektör eklemeleri ve özgün verileri bir arada tutarak çok modalı veri işlemlerini daha iyi kolaylaştırır ve daha fazla veri tutarlılığı, ölçeklendirme ve performans sağlar.
Vektör dizini oluşturma
Belgelerinizdeki vektör özellikleri üzerinde vektör benzerliği araması yapmak için önce bir vektör dizini oluşturmanız gerekir.
HNSW kullanarak vektör dizini oluşturma
M40 küme katmanlarında ve üzerinde (Hiyerarşik Gezinilebilir Küçük Dünya) dizinleri oluşturabilirsiniz. HSNW dizinini oluşturmak için parametresi aşağıdaki şablonu izleyerek ayarlanmış "vector-hnsw"
bir vektör dizini "kind"
oluşturmanız gerekir:
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-hnsw",
"m": <integer_value>,
"efConstruction": <integer_value>,
"similarity": "<string_value>",
"dimensions": <integer_value>
}
}
]
}
Alan | Tür | Veri Akışı Açıklaması |
---|---|---|
index_name |
Dize | Dizinin benzersiz adı. |
path_to_property |
Dize | Vektörünü içeren özelliğin yolu. Bu yol bir üst düzey özellik veya özelliğin noktalı bir gösterimi yolu olabilir. Noktalı bir notasyon yolu kullanılırsa, tümaf olmayan öğeler dizi olamaz. Vektörlerin dizine alınması ve vektör arama sonuçlarında döndürülmesi için bir number[] olması gerekir. |
kind |
Dize | Oluşturulacak vektör dizininin türü. Seçenekler ve vector-hnsw şeklindedirvector-ivf . Not vector-ivf , tüm küme katmanlarında vector-hnsw ve M40 küme katmanlarında ve üzeri sürümlerde kullanılabilir. |
m |
integer | Katman başına en fazla bağlantı sayısı (16 varsayılan olarak, en düşük değer , 2 maksimum değerdir 100 ). Yüksek m, yüksek boyutsallık ve/veya yüksek doğruluk gereksinimleri olan veri kümeleri için uygundur. |
efConstruction |
integer | grafiği oluşturmak için dinamik aday listesinin boyutu (64 varsayılan olarak, en düşük değer , 4 en büyük değerdir 1000 ). Daha yüksek efConstruction , daha iyi dizin kalitesi ve daha yüksek doğrulukla sonuçlanır, ancak dizini oluşturmak için gereken süreyi de artırır. efConstruction en az 2 * m |
similarity |
Dize | Dizinle kullanılacak benzerlik ölçümü. Olası seçenekler (kosinüs uzaklığı), L2 (Öklid uzaklığı) ve IP (iç ürün) olabilir COS . |
dimensions |
integer | Vektör benzerliği için boyut sayısı. Desteklenen boyut sayısı üst sınırıdır 2000 . |
HNSW ile vektör araması yapma
Vektör araması yapmak için toplama işlem hattını kullanarak $search
sorguyu işleçle birlikte hazırlayın cosmosSearch
.
{
"$search": {
"cosmosSearch": {
"vector": <query_vector>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"efSearch": <integer_value>
},
}
}
}
Alan | Tür | Açıklama |
---|---|---|
efSearch |
integer | Arama için dinamik aday listesinin boyutu (40 varsayılan olarak). Daha yüksek bir değer, hız maliyetinde daha iyi geri çağırma sağlar. |
k |
integer | Döndürülecek sonuç sayısı. küçük veya eşit olmalıdır efSearch |
Not
Büyük veri kümeleriyle bir HSNW dizini oluşturmak MongoDB için Azure Cosmos DB sanal çekirdek kaynağınızın belleğinin tükenmesine neden olabilir veya veritabanınızda çalışan diğer işlemlerin performansını sınırlayabilir. Bu tür sorunlarla karşılaşırsanız, kaynağınızı daha yüksek bir küme katmanına ölçeklendirerek veya veri kümesinin boyutunu azaltarak bunlar azaltılabilir.
IVF kullanarak vektör dizini oluşturma
IVF (Ters Dosya) algoritmasını kullanarak vektör dizini oluşturmak için aşağıdaki createIndexes
şablonu kullanın ve parametreyi "kind"
olarak "vector-ivf"
ayarlayın:
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-ivf",
"numLists": <integer_value>,
"similarity": "<string_value>",
"dimensions": <integer_value>
}
}
]
}
Alan | Tür | Veri Akışı Açıklaması |
---|---|---|
index_name |
Dize | Dizinin benzersiz adı. |
path_to_property |
Dize | Vektörünü içeren özelliğin yolu. Bu yol bir üst düzey özellik veya özelliğin noktalı bir gösterimi yolu olabilir. Noktalı bir notasyon yolu kullanılırsa, tümaf olmayan öğeler dizi olamaz. Vektörlerin dizine alınması ve vektör arama sonuçlarında döndürülmesi için bir number[] olması gerekir. |
kind |
Dize | Oluşturulacak vektör dizininin türü. Seçenekler ve vector-hnsw şeklindedirvector-ivf . Not vector-ivf , tüm küme katmanlarında vector-hnsw ve M40 küme katmanlarında ve üzeri sürümlerde kullanılabilir. |
numLists |
integer | Bu tamsayı, ters dosya (IVF) dizininin vektör verilerini gruplandırmak için kullandığı küme sayısıdır. Bunun en fazla 1 milyon belge için ve sqrt(documentCount) 1 milyondan fazla belge için olarak ayarlanması documentCount/1000 önerilirnumLists . numLists değerinin 1 kullanılması, performansı sınırlı olan deneme yanılma araması gerçekleştirmeye eşittir. |
similarity |
Dize | Dizinle kullanılacak benzerlik ölçümü. Olası seçenekler (kosinüs uzaklığı), L2 (Öklid uzaklığı) ve IP (iç ürün) olabilir COS . |
dimensions |
integer | Vektör benzerliği için boyut sayısı. Desteklenen boyut sayısı üst sınırıdır 2000 . |
Önemli
numLists parametresinin doğru ayarlanması, iyi doğruluk ve performans elde etmek için önemlidir. Bunun en fazla 1 milyon belge için ve sqrt(documentCount)
1 milyondan fazla belge için olarak ayarlanması documentCount/1000
önerilirnumLists
.
Veritabanınızdaki öğelerin sayısı arttıkça, vektör araması için iyi bir gecikme süresi performansı elde etmek için numLists'i daha büyük olacak şekilde ayarlamanız gerekir.
Yeni bir senaryoyla denemeler yapıyorsanız veya küçük bir tanıtım oluşturuyorsanız, tüm vektörlerde deneme yanılma araması yapmak için olarak ayarlanmış 1
olarak başlayabilirsiniznumLists
. Bu size vektör aramasından en doğru sonuçları sağlamalıdır, ancak arama hızının ve gecikme süresinin yavaş olacağını unutmayın. İlk kurulumdan sonra yukarıdaki yönergeleri kullanarak parametresini numLists
ayarlamanız gerekir.
IVF ile vektör araması yapma
Vektör araması yapmak için mongoDB sorgusunda $search
toplama işlem hattı aşamasını kullanın. Dizini kullanmak cosmosSearch
için yeni cosmosSearch
işlecini kullanın.
{
{
"$search": {
"cosmosSearch": {
"vector": <query_vector>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
},
"returnStoredSource": True }},
{
"$project": { "<custom_name_for_similarity_score>": {
"$meta": "searchScore" },
"document" : "$$ROOT"
}
}
}
Benzerlik puanını (searchScore
) vektör araması tarafından bulunan belgelerle birlikte almak için işlecini $project
kullanarak sonuçlara ekleyin searchScore
ve sonuçları olarak <custom_name_for_similarity_score>
yeniden adlandırın. Daha sonra belge de iç içe nesne olarak yansıtılır. Benzerlik puanının vektör dizininde tanımlanan ölçüm kullanılarak hesaplandığını unutmayın.
Önemli
Vektörlerin dizine alınması için bir number[]
olması gerekir. gibi double[]
başka bir tür kullanmak, belgenin dizine alınmasını engeller. Dizine alınamayan belgeler vektör araması sonucunda döndürülmeyecektir.
HNSW dizini kullanma örneği.
Aşağıdaki örneklerde vektörleri dizine alma, vektör özelliklerine sahip belgeler ekleme, vektör araması gerçekleştirme ve dizin yapılandırmasını alma işlemleri gösterilmektedir.
use test;
db.createCollection("exampleCollection");
db.runCommand({
"createIndexes": "exampleCollection",
"indexes": [
{
"name": "VectorSearchIndex",
"key": {
"contentVector": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-hnsw",
"m": 16,
"efConstruction": 64,
"similarity": "COS",
"dimensions": 3
}
}
]
});
Bu komut, belirtilen koleksiyonda exampleCollection
depolanan belgelerde özelliğine karşı contentVector
bir HNSW dizini oluşturur. özelliği, cosmosSearchOptions
HNSW vektör dizini için parametreleri belirtir. Belgenizde vektör iç içe bir özellikte depolanmışsa, noktalı bir gösterimi yolu kullanarak bu özelliği ayarlayabilirsiniz. Örneğin, öğesinin bir alt özelliğiyse contentVector
text
kullanabilirsiniztext.contentVector
.
Veritabanınıza vektör ekleme
Veritabanınızın koleksiyonuna vektör eklemek için önce kendi modelinizi, Azure OpenAI Embeddings'i veya başka bir API'yi (Azure'da Yüz Tanıma gibi) kullanarak eklemeler oluşturmanız gerekir. Bu örnekte, örnek eklemeler aracılığıyla yeni belgeler eklenir:
db.exampleCollection.insertMany([
{name: "Eugenia Lopez", bio: "Eugenia is the CEO of AdvenureWorks.", vectorContent: [0.51, 0.12, 0.23]},
{name: "Cameron Baker", bio: "Cameron Baker CFO of AdvenureWorks.", vectorContent: [0.55, 0.89, 0.44]},
{name: "Jessie Irwin", bio: "Jessie Irwin is the former CEO of AdventureWorks and now the director of the Our Planet initiative.", vectorContent: [0.13, 0.92, 0.85]},
{name: "Rory Nguyen", bio: "Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.", vectorContent: [0.91, 0.76, 0.83]},
]);
Vektör araması yapma
Son örnekle devam ederek başka bir vektör oluşturun: queryVector
. Vektör araması, belgelerinizin yolundaki vektörlerle arasındaki queryVector
mesafeyi contentVector
ölçer. Aramanın döndürdüğü sonuç sayısını, parametresini k
burada olarak ayarlayarak ayarlayabilirsiniz 2
. Ayrıca, aday vektör listesinin boyutunu denetleyen bir tamsayı olan değerini de ayarlayabilirsiniz efSearch
. Daha yüksek bir değer doğruluğu artırabilir, ancak sonuç olarak arama daha yavaş olacaktır. Bu, varsayılan değeri 40 olan isteğe bağlı bir parametredir.
const queryVector = [0.52, 0.28, 0.12];
db.exampleCollection.aggregate([
{
"$search": {
"cosmosSearch": {
"vector": "queryVector",
"path": "contentVector",
"k": 2,
"efSearch": 40
},
}
}
}
]);
Bu örnekte, Mongo kabuğu aracılığıyla giriş olarak kullanılarak queryVector
bir vektör araması gerçekleştirilir. Arama sonucu, benzerlik puanlarına göre sıralanmış, sorgu vektörine en çok benzeyen iki öğenin listesidir.
[
{
similarityScore: 0.9465376,
document: {
_id: ObjectId("645acb54413be5502badff94"),
name: 'Eugenia Lopez',
bio: 'Eugenia is the CEO of AdvenureWorks.',
vectorContent: [ 0.51, 0.12, 0.23 ]
}
},
{
similarityScore: 0.9006955,
document: {
_id: ObjectId("645acb54413be5502badff97"),
name: 'Rory Nguyen',
bio: 'Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.',
vectorContent: [ 0.91, 0.76, 0.83 ]
}
}
]
Vektör dizini tanımlarını alma
Vektör dizini tanımınızı koleksiyondan almak için komutunu listIndexes
kullanın:
db.exampleCollection.getIndexes();
Bu örnekte, vectorIndex
dizini oluşturmak için kullanılan tüm cosmosSearch
parametrelerle döndürülür:
[
{ v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
{
v: 2,
key: { contentVector: 'cosmosSearch' },
name: 'vectorSearchIndex',
cosmosSearch: {
kind: 'vector-hnsw',
m: 40,
efConstruction: 64,
similarity: 'COS',
dimensions: 3
},
ns: 'test.exampleCollection'
}
]
IVF Dizini kullanma örneği
Ters Dosya (IVF) Dizin oluşturma, vektörleri kümeler halinde düzenleyen bir yöntemdir. Vektör araması sırasında, sorgu vektöru ilk olarak bu kümelerin merkezleriyle karşılaştırılır. Daha sonra arama, merkezi sorgu vektörine en yakın olan küme içinde yapılır.
numList
s parametresi, oluşturulacak küme sayısını belirler. Tek bir küme, aramanın bir deneme yanılma veya kNN aramasına karşılık gelen veritabanındaki tüm vektörlere karşı yürütüldüğünü gösterir. Bu ayar en yüksek doğruluğu sağlarken aynı zamanda en yüksek gecikme süresini de sağlar.
Değerin numLists
artırılması, her birinin daha az vektör içeren daha fazla kümeye neden olur. Örneğin, if ise numLists=2
, her küme if numLists=3
değerinden daha fazla vektör içerir ve bu şekilde devam eder. Küme başına daha az vektör aramayı hızlandırıyor (daha düşük gecikme süresi, saniyede daha yüksek sorgu sayısı). Ancak bu, veritabanınızda sorgu vektörünün en benzer vektörünün eksik olma olasılığını artırır. Bunun nedeni, gerçek "en yakın" vektör farklı bir kümede yer alırken aramanın bir kümeye odaklanabileceği kümelemenin kusurlu doğasıdır.
nProbes
parametresi aranacak küme sayısını denetler. Varsayılan olarak, 1 olarak ayarlanır, yani yalnızca sorgu vektöre en yakın merkezi olan kümede arama gerçekleştirir. Bu değerin artırılması, aramanın daha fazla kümeyi kapsamasına olanak tanır ve daha fazla küme ve vektör arandıkça doğruluğu artırır, ancak gecikme süresini artırır (böylece saniye başına sorgu sayısını azaltır).
Aşağıdaki örneklerde vektörleri dizine alma, vektör özelliklerine sahip belgeler ekleme, vektör araması gerçekleştirme ve dizin yapılandırmasını alma işlemleri gösterilmektedir.
Vektör dizini oluşturma
use test;
db.createCollection("exampleCollection");
db.runCommand({
createIndexes: 'exampleCollection',
indexes: [
{
name: 'vectorSearchIndex',
key: {
"vectorContent": "cosmosSearch"
},
cosmosSearchOptions: {
kind: 'vector-ivf',
numLists: 3,
similarity: 'COS',
dimensions: 3
}
}
]
});
Bu komut, exampleCollection
belirtilen koleksiyonda depolanan belgelerde özelliğine karşı vectorContent
bir vector-ivf
dizin oluşturur. özelliği, cosmosSearchOptions
IVF vektör dizini için parametreleri belirtir. Belgenizde vektör iç içe bir özellikte depolanmışsa, noktalı bir gösterimi yolu kullanarak bu özelliği ayarlayabilirsiniz. Örneğin, öğesinin bir alt özelliğiyse vectorContent
text
kullanabilirsiniztext.vectorContent
.
Veritabanınıza vektör ekleme
Veritabanınızın koleksiyonuna vektör eklemek için önce kendi modelinizi, Azure OpenAI Embeddings'i veya başka bir API'yi (Azure'da Yüz Tanıma gibi) kullanarak eklemeler oluşturmanız gerekir. Bu örnekte, örnek eklemeler aracılığıyla yeni belgeler eklenir:
db.exampleCollection.insertMany([
{name: "Eugenia Lopez", bio: "Eugenia is the CEO of AdvenureWorks.", vectorContent: [0.51, 0.12, 0.23]},
{name: "Cameron Baker", bio: "Cameron Baker CFO of AdvenureWorks.", vectorContent: [0.55, 0.89, 0.44]},
{name: "Jessie Irwin", bio: "Jessie Irwin is the former CEO of AdventureWorks and now the director of the Our Planet initiative.", vectorContent: [0.13, 0.92, 0.85]},
{name: "Rory Nguyen", bio: "Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.", vectorContent: [0.91, 0.76, 0.83]},
]);
Vektör araması yapma
Vektör araması yapmak için mongoDB sorgusunda $search
toplama işlem hattı aşamasını kullanın. Dizini kullanmak cosmosSearch
için yeni cosmosSearch
işlecini kullanın.
{
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
},
"returnStoredSource": True }},
{
"$project": { "<custom_name_for_similarity_score>": {
"$meta": "searchScore" },
"document" : "$$ROOT"
}
}
}
Benzerlik puanını (searchScore
) vektör araması tarafından bulunan belgelerle birlikte almak için işlecini $project
kullanarak sonuçlara ekleyin searchScore
ve sonuçları olarak <custom_name_for_similarity_score>
yeniden adlandırın. Daha sonra belge de iç içe nesne olarak yansıtılır. Benzerlik puanının vektör dizininde tanımlanan ölçüm kullanılarak hesaplandığını unutmayın.
$search kullanarak vektörleri ve vektör uzaklıklarını (benzerlik puanları) sorgula"
Son örnekle devam ederek başka bir vektör oluşturun: queryVector
. Vektör araması, belgelerinizin yolundaki vektörlerle arasındaki queryVector
mesafeyi vectorContent
ölçer. Aramanın döndürdüğü sonuç sayısını, parametresini k
burada olarak ayarlayarak ayarlayabilirsiniz 2
. Ayrıca, her aramada incelenen yakındaki kümelerin sayısını denetleyen bir tamsayı olan değerini de ayarlayabilirsiniz nProbes
. Daha yüksek bir değer doğruluğu artırabilir, ancak sonuç olarak arama daha yavaş olacaktır. Bu, varsayılan değeri 1 olan isteğe bağlı bir parametredir ve vektör dizininde belirtilen değerden numLists
büyük olamaz.
const queryVector = [0.52, 0.28, 0.12];
db.exampleCollection.aggregate([
{
$search: {
"cosmosSearch": {
"vector": queryVector,
"path": "vectorContent",
"k": 2
},
"returnStoredSource": true }},
{
"$project": { "similarityScore": {
"$meta": "searchScore" },
"document" : "$$ROOT"
}
}
]);
Bu örnekte, Mongo kabuğu aracılığıyla giriş olarak kullanılarak queryVector
bir vektör araması gerçekleştirilir. Arama sonucu, benzerlik puanlarına göre sıralanmış, sorgu vektörine en çok benzeyen iki öğenin listesidir.
[
{
similarityScore: 0.9465376,
document: {
_id: ObjectId("645acb54413be5502badff94"),
name: 'Eugenia Lopez',
bio: 'Eugenia is the CEO of AdvenureWorks.',
vectorContent: [ 0.51, 0.12, 0.23 ]
}
},
{
similarityScore: 0.9006955,
document: {
_id: ObjectId("645acb54413be5502badff97"),
name: 'Rory Nguyen',
bio: 'Rory Nguyen is the founder of AdventureWorks and the president of the Our Planet initiative.',
vectorContent: [ 0.91, 0.76, 0.83 ]
}
}
]
Vektör dizini tanımlarını alma
Vektör dizini tanımınızı koleksiyondan almak için komutunu listIndexes
kullanın:
db.exampleCollection.getIndexes();
Bu örnekte, vectorIndex
dizini oluşturmak için kullanılan tüm cosmosSearch
parametrelerle döndürülür:
[
{ v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
{
v: 2,
key: { vectorContent: 'cosmosSearch' },
name: 'vectorSearchIndex',
cosmosSearch: {
kind: 'vector-ivf',
numLists: 3,
similarity: 'COS',
dimensions: 3
},
ns: 'test.exampleCollection'
}
]
Filtrelenmiş vektör araması (önizleme)
Artık , , , , $eq
, $gte
$gt
$neq
$nin
$in
ve $regex
gibi $lt
desteklenen herhangi bir sorgu filtresiyle vektör aramaları yürütebilirsiniz. $lte
Azure Aboneliğinizin "Önizleme Özellikleri" sekmesinde "vektör aramasını filtreleme" özelliğini etkinleştirin. Önizleme özellikleri hakkında daha fazla bilgiyi burada bulabilirsiniz.
İlk olarak, vektör dizinine ek olarak filtreniz için bir dizin tanımlamanız gerekir. Örneğin, bir özellikte filtre dizinini tanımlayabilirsiniz
db.runCommand({
"createIndexes": "<collection_name",
"indexes": [ {
"key": {
"<property_to_filter>": 1
},
"name": "<name_of_filter_index>"
}
]
});
Ardından, aşağıda gösterildiği gibi terimi vektör aramanıza ekleyebilirsiniz "filter"
. Bu örnekte filtre, özelliğinin "title"
listesinde ["not in this text", "or this text"]
olmadığı belgeleri arıyor.
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' }
}
]);
Önemli
Önizleme aşamasındayken, filtrelenmiş vektör araması daha yüksek doğruluk elde etmek için vektör dizini parametrelerinizi ayarlamanızı gerektirebilir. Örneğin, m
, , efConstruction
veya efSearch
HNSW veya kullanırken ya da numLists
nProbes
IVF kullanırken daha iyi sonuçlara yol açabilir. Sonuçların tatmin edici olduğundan emin olmak için kullanmadan önce yapılandırmanızı test etmelisiniz.
LLM Düzenleme araçlarını kullanma
Anlam Çekirdeği ile vektör veritabanı olarak kullanma
MongoDB sanal çekirdeği ve LLM'niz için Azure Cosmos DB'den bilgi alma işleminizi yönetmek için Anlam Çekirdeği'ni kullanın. Buradan daha fazla bilgi edinin.
LangChain ile vektör veritabanı olarak kullanma
MongoDB sanal çekirdeği ve LLM'niz için Azure Cosmos DB'den bilgi alma işleminizi yönetmek için LangChain'i kullanın. Buradan daha fazla bilgi edinin.
LangChain ile anlamsal önbellek olarak kullanma
Daha önce yeniden kodlanmış LLM depolarını kullanarak LLM API maliyetlerinizi düşürebilen ve yanıt gecikme süresini azaltabilen AnlamSal Önbelleğe Alma'yı yönetmek için LangChain ve MongoDB için Azure Cosmos DB 'yi (sanal çekirdek) kullanın. Daha fazla bilgi edinmek için buraya bakın.
Özellikler ve sınırlamalar
- Desteklenen uzaklık ölçümleri: L2 (Öklid), iç ürün ve kosinüs.
- Desteklenen dizin oluşturma yöntemleri: IVFFLAT (GA) ve HSNW (önizleme)
- 2.000 boyuta kadar dizin vektörleri.
- Dizin oluşturma, yol başına yalnızca bir vektör için geçerlidir.
- Vektör yolu başına yalnızca bir dizin oluşturulabilir.
Özet
Bu kılavuzda vektör dizini oluşturma, vektör verileri içeren belgeler ekleme, benzerlik araması yapma ve dizin tanımını alma işlemleri gösterilmektedir. Tümleşik vektör veritabanımızı kullanarak yüksek boyutlu vektör verilerini doğrudan MongoDB için Azure Cosmos DB sanal çekirdeğinde verimli bir şekilde depolayabilir, dizinleyebilir ve sorgulayabilirsiniz. Vektör eklemeleri aracılığıyla verilerinizin tüm potansiyelini ortaya çıkarmanızı sağlar ve daha doğru, verimli ve güçlü uygulamalar oluşturmanıza olanak tanır.
İlgili içerik
- .NET RAG Deseni perakende başvuru çözümü
- .NET öğreticisi - tarif sohbet botu
- C# RAG deseni - Open AI Services'i Cosmos ile tümleştirme
- Python RAG deseni - Azure ürün sohbet botu
- Python not defteri öğreticisi - LangChain aracılığıyla vektör veritabanı tümleştirmesi
- Python not defteri öğreticisi - LangChain aracılığıyla LLM Önbelleğe Alma tümleştirmesi
- Python - LlamaIndex tümleştirmesi
- Python - Anlam Çekirdeği bellek tümleştirmesi