Aracılığıyla paylaş


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 , 2maksimum 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 , 4en 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 exampleCollectiondepolanan 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 textkullanabilirsiniztext.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]},
]);

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 kburada 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.

numLists 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=3değ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, exampleCollectionbelirtilen 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 textkullanabilirsiniztext.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.

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 kburada 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$inve $regexgibi $ltdesteklenen 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, , efConstructionveya efSearch HNSW veya kullanırken ya da numListsnProbes 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.

https://github.com/microsoft/semantic-kernel/tree/main/python/semantic_kernel/connectors/memory/azure_cosmosdb

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.

Sonraki adım