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
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.
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:
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.
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.
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.
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.
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.
2024-05-01-Preview en yeni sürümdür. Daha fazla kodlama seçeneği ekler, ancak vektör arama yapılandırması (vectorSearch yapısı) çoğunlukla 2024-03-01-preview ile aynıdır.
İkili veriler üzerinde en yakın komşu araması için ölçüm olarak mesafe ekler hamming . Daha fazla bilgi için bkz . Vektör araması için ikili verileri dizine alma.
Daha fazla ekleme modeli seçeneğiyle tümleşik vektörleştirmeyi genişletir. Bu özellikten yararlanmak için dizin oluşturucuya ve beceri kümesine bağımlı olmanız gerekir. Yeni ekleme becerilerinin listesi için Vektör verilerini yükleme ve Çekme API'leri bölümüne bakın.
Dizinde sıkıştırma ayarlarını ve ekleme alanını oluşturmak için kullanılan arama algoritmalarını belirten bir vectorSearch bölüm ekleyin. Daha fazla bilgi için bkz . Vektör nicelemesini ve azaltılmış depolamayı yapılandırma.
rerankWithOriginalVectors özgün, sıkıştırılmamış vektörleri kullanarak benzerliği yeniden hesaplar ve ilk arama sorgusu tarafından döndürülen en iyi sonuçları yeniden hesaplar. Sıkıştırılmamış vektörler, false olsa stored bile arama dizininde bulunur. Bu özellik isteğe bağlıdır. Varsayılanı doğrudur
defaultOversampling , bilgilerdeki azalmayı nicelemeden dengelemek için daha geniş bir olası sonuç kümesini dikkate alır. Olası sonuçlara yönelik formül, sorgudaki formülden ve bir fazla örnekleme çarpanından oluşur k . Örneğin, sorgu 5'ini k belirtiyorsa ve fazla örnekleme 20 ise, sorgu bu amaç için özgün sıkıştırılmamış vektörü kullanarak yeniden boyutlandırmada kullanılmak üzere etkin bir şekilde 100 belge istemektedir. Yalnızca en üstteki k yeniden kaydedilen sonuçlar döndürülür. Bu özellik isteğe bağlıdır. Varsayılan değer 4'dür.
quantizedDataType olarak ayarlanmalıdır int8. Şu anda desteklenen tek temel veri türü budur. Bu özellik isteğe bağlıdır. Varsayılan int8 değeridir.
2023-10-01-Preview iç vektörleştirme ekler, ancak vektör arama yapılandırması (vectorSearchyapısı) çoğunlukla 2023-11-01 sürümüyle aynıdır.
Yapılandırmanın adı. Adın dizin içinde benzersiz olması gerekir.
profiles bu önizlemede yenidir. Daha zengin tanımları kabul etmek için bir soyutlama katmanı ekler. Profil, içinde vectorSearchve ardından her vektör alanında bir özellik olarak tanımlanır.
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.
2023-07-01-Preview, vektörleri destekleyen ilk REST API sürümüdür. Daha yeni önizlemelerde değiştirilmiş olan eski yapıları kullanır. Daha yeni bir REST API'ye geçiş yapmanızı öneririz.
Yapılandırmanın adı. Adın dizin içinde benzersiz olması gerekir.
hnsw , dizin oluşturma sırasında yakınlık grafiğini oluşturmak için kullanılan En Yakın Yaklaşık Komşular (ANN) algoritmasıdır. Bu API sürümünde yalnızca Hiyerarşik Gezinilebilir Küçük Dünya (HNSW) desteklenir.
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.
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.
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.
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:
Vektör alanı tanımları, yeni ikili veri türü dışında 2024-03-01-preview ile aynıdır. Daha fazla bilgi için bkz . Vektör araması için ikili verileri dizine alma.
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. False ise stored false gereklidir.
stored yalnızca vektör alanlarına uygulanan yeni bir boole özelliğidir. True, arama sonuçlarında döndürülen vektörlerin bir kopyasını depolar. False, dizin oluşturma sırasında bu kopyayı atar. Vektörlerde arama yapabilirsiniz, ancak sonuç olarak vektör döndüremezsiniz.
filterable, facetableyanlış sortable olmalıdır.
Aşağıdaki örnekte alanlar koleksiyonu gösterilmektedir:
Aşağıdaki REST API örneğinde ,"title" ve "content", tam metin aramasında ve anlamsal derecelendirmede kullanılan metin içeriğini, "titleVector" ve "contentVector" ise vektör verilerini içerir. Bu API sürümünde, tümleşik vektörleştirmeyi kullanarak vektör alanını doldurmak için dizin oluşturucuları ve beceri kümesini kullanabilirsiniz. Dizin tanımı değişmez, ancak alanları doldurmak için çözümünüzde dizin oluşturucular ve beceriler ekleyebilirsiniz.
Alanlar koleksiyonuna vektör alanları ekleyin. Belge alanı başına oluşturulan bir eklemeyi 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.
[vector query](vector-search-how-to-query.md üzerinde ön filtreleme veya postfiltering çağırmak istiyorsanız, koleksiyona "başlık" filterable gibi true olarak ayarlanmış filtrelenebilir nonvector alanları ekleyin
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:
Bu sürüm için vektör alanı tanımları sonraki sürümlerde kullanımdan kaldırılmış. Daha yeni bir REST API'ye geçiş yapmanızı öneririz.
2023-07-01-Preview , vektör senaryolarını destekleyen ilk REST API sürümüdür.
Aşağıdaki REST API örneğinde ,"title" ve "content", tam metin arama ve semantik derecelendirmede kullanılan metin içeriğini, "titleVector" ve "contentVector" ise harici olarak oluşturulan vektör verilerini içerir.
Alanlar koleksiyonuna vektör alanları ekleyin. Belge alanı başına oluşturulan bir eklemeyi depolayabilirsiniz. Her vektör alanı için:
Veri türünü atayın Collection(Edm.Single) .
Vektör arama algoritması yapılandırmasının adını belirtin.
Ekleme modeli tarafından oluşturulan boyut sayısını belirtin.
Öznitelikleri ayarla:
"aranabilir" "true" olmalıdır.
"alınabilir" ayarı "true" olarak ayarlanırsa ham vektörleri (örneğin doğrulama adımı olarak) görüntüleyebilirsiniz, ancak bunu yapmak depolama alanını artırır. Ham vektörler döndürmeniz gerekmiyorsa "false" olarak ayarlayın. Sorgu için vektör döndürmeniz gerekmez, ancak aşağı akış uygulamasına vektör sonucu geçiriyorsanız "alınabilir" değerini "true" olarak ayarlayın.
"filterable", "facetable", "sortable" öznitelikleri "false" olmalıdır. Bu davranışlar vektör alanları bağlamında geçerli olmadığından ve istek başarısız olacağı için bunları "true" olarak ayarlamayın.
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çıklanan öğeleri içeren bir dizin tanımı şöyle görünür:
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.
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"
}
. . .
]
}
Tüm yeni önizleme sürümleri, dizin oluşturma ve sorgu süresi sırasında tümleşik vektörleştirme için çekme API'lerini (dizin oluşturucular ve beceri kümeleri) kullanır.
Dizin oluşturucular, vektör alanı gereksinimlerini ve önizleme REST API'sini karşılayan bir dizin şeması varsayılarak kaynak belgelerde vektör alanlarını alabilir ve dizinleyebilir. Veri kaynakları, vektörleri veri kaynağının desteklediği biçimde (JSON'daki dizeler gibi) sağlar. Dizin oluşturucu, olarak Collection(Edm.Single) yazılan alanların vektör içerdiğini varsayar ve bu içeriği vektör dizinleri olarak dizinler.
Alan eşleme davranışında veya vektörler için değişiklik algılamada değişiklik yok. Metin dizin oluşturma davranışları vektörler için de geçerlidir.
Vektör verileri dosyalarda kaynaklanıyorsa, verilerin şekline bağlı olarak , jsonLinesveya csv gibi jsonbir parsingMode zaman uyumsuzluk öneririz.
Azure SQL, bir koleksiyonu tek bir SQL sütunu olarak yerel olarak depolamak için bir yol sağlamaz. Şu anda bir geçici çözüm tanımlanmamıştır.
Veri kaynağındaki tüm vektörlerin boyutları aynı olmalı ve eşledikleri alan için dizin tanımlarıyla eşleşmelidir. Dizin oluşturucu, eşleşmeyen belgelere hata oluşturur.
Eklemeler oluşturmak için beceriler ve vektörleştiriciler kullanılır. Dizin oluşturma sırasında vektörleştirme için aşağıdaki beceriler arasından seçim yapın:
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.
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.
Aşağıdaki REST API örneği bir vektör sorgusudur, ancak yalnızca görsel olmayan alanları (başlık, içerik, kategori) döndürür. Arama sonuçlarında yalnızca "alınabilir" olarak işaretlenmiş alanlar döndürülebilir.
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.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz. https://aka.ms/ContentUserFeedback.