Vektör deposu oluşturma

Azure AI Search'te vektör deposu vektör ve nonvector alanlarını tanımlayan bir dizin şemasına, ekleme alanını oluşturan algoritmalar için vektör yapılandırmasına ve sorgu isteklerinde kullanılan vektör alanı tanımlarındaki ayarlara sahiptir. Dizin Oluştur API'si vektör deposunu oluşturur.

Vektör verilerini dizine almak için şu adımları izleyin:

  • Dizin oluşturma ve arama algoritmalarını belirten bir veya daha fazla vektör yapılandırmasıyla şema tanımlama
  • Bir veya daha fazla vektör alanı ekleme
  • Önceden belirlenmiş verileri ayrı bir adım olarak yükleyin veya dizin oluşturma sırasında veri öbekleme ve kodlama için tümleşik vektörleştirme (önizleme) kullanın.

Bu makale, uygulama kodunuzun öbekleme ve kodlama için dış kaynakları çağırdığı varsayılarak vektör aramasının genel kullanıma sunulan önizleme dışı sürümü için geçerlidir.

Not

2023-07-01-preview geçiş kılavuzu mu arıyorsunuz? Bkz . REST API'lerini yükseltme.

Önkoşullar

  • Azure AI Search, herhangi bir bölgede ve herhangi bir katmanda. Mevcut hizmetlerin çoğu vektör arama desteği sunar. Ocak 2019'den önce oluşturulan hizmetler için vektör aramasını desteklemeyebilen küçük bir alt küme vardır. Vektör alanlarını içeren bir dizin oluşturulamıyor veya güncelleştirilemiyorsa, bu bir göstergedir. Bu durumda yeni bir hizmet oluşturulmalıdır.

  • Kaynak belgelerinize önceden var olan vektör eklemeleri. Azure AI Search, Azure SDK'larının ve REST API'lerinin genel kullanıma sunulan sürümünde vektör oluşturmaz. Azure OpenAI ekleme modellerini öneririz, ancak vektörleştirme için herhangi bir modeli kullanabilirsiniz. Daha fazla bilgi için bkz . Ekleme oluşturma.

  • Eklemeleri oluşturmak için kullanılan modelin boyut sınırını ve benzerliğin nasıl hesaplanmış olduğunu bilmeniz gerekir. Azure OpenAI'de text-embedding-ada-002 için sayısal vektör uzunluğu 1536'dır. Benzerlik kullanılarak cosinehesaplanır. Geçerli değerler 2 ile 3072 arasında boyutlardır.

  • Dizin oluşturma konusunda bilgi sahibi olmanız gerekir. Şemada belge anahtarı için bir alan, aramak veya filtrelemek istediğiniz diğer alanlar ve dizin oluşturma ve sorgular sırasında gereken davranışlar için diğer yapılandırmalar bulunmalıdır.

Belgeleri dizin oluşturma için hazırlama

Dizin oluşturmadan önce vektör ve seçici olmayan veri alanlarını içeren bir belge yükü oluşturun. Belge yapısı dizin şemasına uygun olmalıdır.

Belgelerinizi emin olun:

  1. Her belgeyi benzersiz olarak tanımlayan bir alan veya meta veri özelliği sağlayın. Tüm arama dizinleri bir belge anahtarı gerektirir. Belge anahtarı gereksinimlerini karşılamak için, kaynak belgenin dizinde benzersiz olarak tanımlayabilen bir alanı veya özelliği olmalıdır. Bu kaynak alan, türündeki Edm.String ve key=true arama dizinindeki bir dizin alanına eşlenmelidir.

  2. Kaynak alanlarda vektör verileri (tek duyarlıklı kayan nokta sayıları dizisi) sağlayın.

    Vektör alanları, alan başına bir ekleme olan modellerin katıştırılmasıyla oluşturulan sayısal verileri içerir. Azure OpenAI'ye metin belgeleri için text-embedding-ada-002 veya görüntüler için Görüntü Alma REST API'si gibi ekleme modellerini öneririz. Yalnızca dizin üst düzey vektör alanları desteklenir: Vektör alt alanları şu anda desteklenmemektedir.

  3. Sorgu yanıtı için ve aynı istekte tam metin araması veya semantik derecelendirme içeren karma sorgu senaryoları için diğer alanlara insan tarafından okunabilir alfasayısal içerik sağlayın.

Arama dizininiz, desteklemek istediğiniz tüm sorgu senaryoları için alanlar ve içerik içermelidir. Ürün adlarını, sürümlerini, meta verilerini veya adreslerini aramak veya filtrelemek istediğinizi varsayalım. Bu durumda benzerlik araması özellikle yararlı olmaz. Anahtar sözcük arama, coğrafi arama veya filtreler daha iyi bir seçim olacaktır. Vektör ve nonvector verilerinden oluşan kapsamlı bir alan koleksiyonu içeren arama dizini, sorgu oluşturma ve yanıt oluşturma için maksimum esneklik sağlar.

Vektör ve seçici olmayan alanları içeren belge yüküne kısa bir örnek, bu makalenin yük vektör verileri bölümünde verilmiştir.

Vektör arama yapılandırması ekleme

Vektör yapılandırması, vektör düğümleri arasında "en yakın komşu" bilgileri oluşturmak için dizin oluşturma sırasında kullanılan vektör arama algoritmasını ve parametreleri belirtir:

  • Hiyerarşik Gezinilebilir Küçük Dünya (HNSW)
  • Kapsamlı KNN

Bir alanda HNSW'yi seçerseniz sorgu zamanında kapsamlı KNN'yi seçebilirsiniz. Ancak diğer yön çalışmaz: Kapsamlı'yı seçerseniz, yaklaşık aramayı etkinleştiren ek veri yapıları mevcut olmadığından daha sonra HNSW araması isteyemezsiniz.

Önizlemeden kararlı sürüme geçiş kılavuzu mu arıyorsunuz? Adımlar için bkz . REST API'lerini yükseltme.

REST API sürüm 2023-11-01 aşağıdakilere sahip bir vektör yapılandırmasını destekler:

  • vectorSearch algoritmalar hnsw ve exhaustiveKnn en yakın komşular, dizin oluşturma ve puanlama parametreleri.
  • vectorProfiles algoritma yapılandırmalarının birden çok bileşimi için.

İçeriğinizi vektörleştirmeye yönelik bir stratejiniz olduğundan emin olun. Kararlı sürüm, yerleşik ekleme için vektörleştiriciler sağlamaz.

  1. Dizini oluşturmak için Dizin Oluştur veya Güncelleştir API'sini kullanın.

  2. Dizinde, ekleme alanını oluşturmak için kullanılan arama algoritmalarını belirten bir vectorSearch bölüm ekleyin.

     "vectorSearch": {
         "algorithms": [
             {
                 "name": "my-hnsw-config-1",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 4,
                     "efConstruction": 400,
                     "efSearch": 500,
                     "metric": "cosine"
                 }
             },
             {
                 "name": "my-hnsw-config-2",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 8,
                     "efConstruction": 800,
                     "efSearch": 800,
                     "metric": "cosine"
                 }
             },
             {
                 "name": "my-eknn-config",
                 "kind": "exhaustiveKnn",
                 "exhaustiveKnnParameters": {
                     "metric": "cosine"
                 }
             }
    
         ],
         "profiles": [
           {
             "name": "my-default-vector-profile",
             "algorithm": "my-hnsw-config-2"
           }
         ]
     }
    

    Önemli noktalar:

    • Yapılandırmanın adı. Adın dizin içinde benzersiz olması gerekir.
    • profiles daha zengin tanımları kabul etmek için bir soyutlama katmanı ekleyin. Bir profil içinde vectorSearchtanımlanır ve her vektör alanında ada göre başvurulur.
    • "hnsw" ve "exhaustiveKnn" dizin oluşturma sırasında vektör içeriğini düzenlemek için kullanılan En Yakın Yaklaşık Komşular (ANN) algoritmalarıdır.
    • "m" (çift yönlü bağlantı sayısı) varsayılan değeri 4'tür. Aralık 4 ile 10 arasındadır. Düşük değerler sonuçlarda daha az kirlilik döndürmelidir.
    • "efConstruction" varsayılan değer 400'dür. Aralık 100 ile 1.000 arasındadır. Dizin oluşturma sırasında kullanılan en yakın komşu sayısıdır.
    • "efSearch" varsayılan değer 500'dür. Aralık 100 ile 1.000 arasındadır. Arama sırasında kullanılan en yakın komşu sayısıdır.
    • "metric" Azure OpenAI kullanıyorsanız "kosinüs" olmalıdır, aksi takdirde kullandığınız ekleme modeliyle ilişkili benzerlik ölçümünü kullanın. Desteklenen değerler , cosine, dotProducteuclidean.

Alanlar koleksiyonuna vektör alanı ekleme

Alanlar koleksiyonu belge anahtarı için bir alan, vektör alanları ve karma arama senaryoları için ihtiyacınız olan diğer alanları içermelidir.

Vektör alanları türü Collection(Edm.Single) ve tek duyarlıklı kayan nokta değerleridir. Bu tür bir alanın da bir dimensions özelliği vardır ve bir vektör yapılandırmasını belirtir.

Yalnızca genel kullanıma sunulan özellikler istiyorsanız bu sürümü kullanın.

  1. Dizini oluşturmak için Dizin Oluştur veya Güncelleştir'i kullanın.

  2. Aşağıdaki özniteliklere sahip bir vektör alanı tanımlayın. Alan başına oluşturulan bir ekleme depolayabilirsiniz. Her vektör alanı için:

    • type olmalıdır Collection(Edm.Single).
    • dimensions ekleme modeli tarafından oluşturulan boyut sayısıdır. Metin ekleme-ada-002 için 1536'dır.
    • vectorSearchProfile , dizinin başka bir yerinde tanımlanan bir profilin adıdır.
    • searchable doğru olmalıdır.
    • retrievable true veya false olabilir. True, ham vektörleri (bunların 1536'sı) düz metin olarak döndürür ve depolama alanı kullanır. Aşağı akış uygulamasına vektör sonucu geçiriyorsanız true olarak ayarlayın.
    • filterable, facetableyanlış sortable olmalıdır.
  3. Vektör sorgusunda ön filtrelemeyi veya postfiltering'içağırmak istiyorsanız, koleksiyona true olarak ayarlanmış "başlık" filterable gibi filtrelenebilir nonvector alanları ekleyin.

  4. Dizine eklediğiniz metin içeriğinin maddesini ve yapısını tanımlayan diğer alanları ekleyin. En azından bir belge anahtarına ihtiyacınız vardır.

    Sorguda veya yanıtında yararlı olan alanlar da eklemeniz gerekir. Aşağıdaki örnekte, başlık ve içerik için vektör alanları ("titleVector", "contentVector") vektörlerle eşdeğerdir. Ayrıca, bir arama sonucunda sıralama, filtreleme ve okuma için yararlı olan eşdeğer metin içeriği ("başlık", "içerik") için alanlar sağlar.

    Aşağıdaki örnekte alanlar koleksiyonu gösterilmektedir:

    PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2023-11-01&allowIndexDowntime=true
    Content-Type: application/json
    api-key: {{admin-api-key}}
    {
        "name": "{{index-name}}",
        "fields": [
            {
                "name": "id",
                "type": "Edm.String",
                "key": true,
                "filterable": true
            },
            {
                "name": "title",
                "type": "Edm.String",
                "searchable": true,
                "filterable": true,
                "sortable": true,
                "retrievable": true
            },
            {
                "name": "titleVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "dimensions": 1536,
                "vectorSearchProfile": "my-default-vector-profile"
            },
            {
                "name": "content",
                "type": "Edm.String",
                "searchable": true,
                "retrievable": true
            },
            {
                "name": "contentVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "dimensions": 1536,
                "vectorSearchProfile": "my-default-vector-profile"
            }
        ],
        "vectorSearch": {
            "algorithms": [
                {
                    "name": "my-hnsw-config-1",
                    "kind": "hnsw",
                    "hnswParameters": {
                        "m": 4,
                        "efConstruction": 400,
                        "efSearch": 500,
                        "metric": "cosine"
                    }
                }
            ],
            "profiles": [
                {
                    "name": "my-default-vector-profile",
                    "algorithm": "my-hnsw-config-1"
                }
            ]
        }
    }
    

Dizin oluşturma için vektör verilerini yükleme

Dizin oluşturma için sağladığınız içerik dizin şemasına uygun olmalı ve belge anahtarı için benzersiz bir dize değeri içermelidir. Önceden oluşturulmuş veriler, alfasayısal içerik içeren diğer alanlarla birlikte bulunabilen bir veya daha fazla vektör alanına yüklenir.

Veri alımı için gönderme veya çekme yöntemleri kullanabilirsiniz.

Vektör verileri içeren belgeleri göndermek için Dizin Belgeleri (2023-11-01), Dizin Belgeleri (2023-10-01-Preview) veya Belge Ekle, Güncelleştir veya Sil (2023-07-01-Preview) kullanın.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/index?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "value": [
        {
            "id": "1",
            "title": "Azure App Service",
            "content": "Azure App Service is a fully managed platform for building, deploying, and scaling web apps. You can host web apps, mobile app backends, and RESTful APIs. It supports a variety of programming languages and frameworks, such as .NET, Java, Node.js, Python, and PHP. The service offers built-in auto-scaling and load balancing capabilities. It also provides integration with other Azure services, such as Azure DevOps, GitHub, and Bitbucket.",
            "category": "Web",
            "titleVector": [
                -0.02250031754374504,
                 . . . 
                        ],
            "contentVector": [
                -0.024740582332015038,
                 . . .
            ],
            "@search.action": "upload"
        },
        {
            "id": "2",
            "title": "Azure Functions",
            "content": "Azure Functions is a serverless compute service that enables you to run code on-demand without having to manage infrastructure. It allows you to build and deploy event-driven applications that automatically scale with your workload. Functions support various languages, including C#, F#, Node.js, Python, and Java. It offers a variety of triggers and bindings to integrate with other Azure services and external services. You only pay for the compute time you consume.",
            "category": "Compute",
            "titleVector": [
                -0.020159931853413582,
                . . .
            ],
            "contentVector": [
                -0.02780858241021633,
                 . . .
            ],
            "@search.action": "upload"
        }
        . . .
    ]
}

Dizininizde vektör içeriği olup olmadığını denetleyin

Doğrulama amacıyla, Azure portalında Arama Gezgini'ni veya REST API çağrısını kullanarak dizini sorgulayabilirsiniz. Azure AI Search vektörleri insan tarafından okunabilen metne dönüştüremediğinden, aynı belgedeki eşleşmenin kanıtını sağlayan alanları döndürmeyi deneyin. Örneğin, vektör sorgusu "titleVector" alanını hedefliyorsa, arama sonuçları için "title" öğesini seçebilirsiniz.

Alanların sonuçlara eklenmesi için "alınabilir" olarak ilişkilendirilmesi gerekir.

Bir dizini sorgulamak için Arama Gezgini'ni kullanabilirsiniz. Arama gezgininin iki görünümü vardır: Sorgu görünümü (varsayılan) ve JSON görünümü.

  • Yürütmek istediğiniz vektör sorgusunun JSON tanımını yapıştırarak vektör sorguları için JSON görünümünü kullanın.

  • Dizinin vektörler içerdiğine ilişkin hızlı bir onay için varsayılan Sorgu görünümünü kullanın. Sorgu görünümü tam metin araması içindir. Vektör sorguları için kullanamazsınız ancak içeriği denetlemek için boş bir arama (search=*) gönderebilirsiniz. Vektör alanları da dahil olmak üzere tüm alanların içeriği düz metin olarak döndürülür.

Vektör depolarını güncelleştirme

Vektör depolarını güncelleştirmek için şemayı değiştirin ve gerekirse belgeleri yeni alanları dolduracak şekilde yeniden yükleyin. Şema güncelleştirmeleri için API'ler arasında Oluşturma veya Güncelleştirme Dizini (REST), .NET için Azure SDK'da CreateOrUpdateIndex , Python için Azure SDK'da create_or_update_index ve diğer Azure SDK'larında benzer yöntemler bulunur.

Dizini güncelleştirmeye yönelik standart kılavuz, Dizini bırakma ve yeniden oluşturma bölümünde ele alınmıştır.

Önemli noktalar şunlardır:

  • Mevcut alanların güncelleştirilip silinmesi için genellikle bırakma ve yeniden oluşturma gerekir.

  • Ancak, var olan bir şemayı aşağıdaki değişikliklerle güncelleştirebilir ve yeniden derlemeye gerek kalmaz:

    • Alan koleksiyonuna yeni alanlar ekleyin.
    • Yeni alanlara atanan ancak vektörleştirilmemiş olan mevcut alanlara atanmamış yeni vektör yapılandırmaları ekleyin.
    • Var olan bir alanda "alınabilir" değerini (değerler true veya false) değiştirin. Vektör alanları aranabilir ve alınabilir olmalıdır, ancak bırakma ve yeniden oluşturmanın mümkün olmadığı durumlarda vektör alanına erişimi devre dışı bırakmak istiyorsanız, alınabilir değerini false olarak ayarlayabilirsiniz.

Sonraki adımlar

Sonraki adım olarak, arama dizinindeki Sorgu vektör verilerini öneririz.

azure-search-vector deposundaki kod örnekleri şema tanımı, vektörleştirme, dizin oluşturma ve sorgular içeren uçtan uca iş akışlarını gösterir.

Python, C# ve JavaScript için tanıtım kodu vardır.