Aracılığıyla paylaş


Vektör dizini 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 veya Güncelleştir API'si vektör deposunu oluşturur.

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

  • Dizin oluşturma ve arama için vektör algoritmalarıyla şema tanımlama
  • Vektör alanları 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 makalede iş akışı açıklanır ve her adımı göstermek için REST kullanılır. REST API'nin son sürümleri yeni işlevler ekler. Temel iş akışını ve her API sürümünün neler sağladığını anladıktan sonra, test ve üretim kodunda bu özellikleri kullanma yönergeleri için azure-search-vector-samples deposundaki Azure SDK kod örnekleriyle devam edin.

İpucu

Vektör dizini oluşturmak ve tümleşik vektörleştirmeyi denemek için Azure portalını kullanın.

Ö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 dizini oluşturabilen küçük bir alt küme vardır. Bu durumda yeni bir hizmet oluşturulmalıdır.

  • Azure SDK'ları ve REST API'lerinin genel kullanıma sunulan sürümünü kullanıyorsanız, kaynak belgelerinizde önceden var olan vektör eklemeleri. Daha fazla bilgi için bkz . Ekleme oluşturma. Alternatif olarak tümleşik vektörleştirme (önizleme) kullanılabilir.

  • 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ışmıyor: 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.

2023-11-01 genel kullanıma sunulmuştur. Aşağıdakilere sahip bir vektör yapılandırmasını destekler:

  • vectorSearch.algorithms dizin oluşturma ve puanlama parametreleriyle birlikte.
  • vectorSearch.profiles 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 kodlama için beceriler veya 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ı, veri türleri, vektörlerin çıktısını almak için kullanılan ekleme modelini temel alan bir dimensions özellik ve bir vektör profili ile karakterize edilir.

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 bu API sürümünde 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 ve nonvector verilerini bir dizine yüklemek için Belgeler - Dizin'i kullanın. Dizin oluşturma için anında iletme API'leri tüm kararlı ve önizleme sürümlerinde aynıdır. Belgeleri yüklemek için aşağıdaki API'lerden birini 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.