Azure AI Search'te vektör depolama

Azure AI Search, vektör araması ve karma arama için vektör depolama ve yapılandırmalar sağlar. Destek alan düzeyinde uygulanır, yani vektör ve nonvector alanlarını aynı arama grubunda birleştirebilirsiniz.

Vektörler bir arama dizininde depolanır. Vektör deposunu oluşturmak için Dizin Oluştur REST API'sini veya eşdeğer bir Azure SDK yöntemini kullanın.

Vektör depolama ile ilgili dikkat edilmesi gerekenler şunlardır:

  • Amaçlanan vektör alma desenine göre kullanım örneğinize uyacak bir şema tasarlar.
  • Dizin boyutunu tahmin edin ve arama hizmeti kapasitesini denetleyin.
  • Vektör depolarını yönetme
  • Vektör deposu güvenliğini sağlama

Vektör alma desenleri

Azure AI Search'te arama sonuçlarıyla çalışmaya yönelik iki desen vardır.

  • Oluşturmalı arama. Dil modelleri, Azure AI Search'ten alınan verileri kullanarak kullanıcının sorgusuna bir yanıt oluşturur. Bu desen, istemleri koordine etmek ve bağlamı korumak için bir düzenleme katmanı içerir. Bu düzende arama sonuçları, GPT ve Text-Davinci gibi sohbet modelleri tarafından alınan istem akışlarına aktarılır. Bu yaklaşım, arama dizininin topraklama verilerini sağladığı Alma artırılmış oluşturma (RAG) mimarisini temel alır.

  • Arama çubuğu, sorgu giriş dizesi ve işlenmiş sonuçlar kullanan klasik arama. Arama altyapısı vektör sorgusunu kabul eder ve yürütür, bir yanıt formüle eder ve bu sonuçları bir istemci uygulamasında işlersiniz. Azure AI Search'te sonuçlar düzleştirilmiş bir satır kümesinde döndürülür ve arama sonuçlarının eklendiği alanları seçebilirsiniz. Sohbet modeli olmadığından, vektör deponuzu (arama dizini) yanıtınızda insan tarafından okunabilen görsel olmayan içerikle doldurmanız beklenir. Arama altyapısı vektörlerle eşleşse de, arama sonuçlarını doldurmak için nonvector değerlerini kullanmanız gerekir. Vektör sorguları ve karma sorgular , klasik arama senaryoları için formüle edebilirsiniz sorgu isteği türlerini kapsar.

Dizin şemanız birincil kullanım örneğinizi yansıtmalıdır. Aşağıdaki bölümde, üretken yapay zeka veya klasik arama için oluşturulan çözümler için alan oluşturma farklılıkları vurgulanmıştır.

Vektör deposu şeması

Vektör deposu için dizin şeması bir ad, anahtar alanı (dize), bir veya daha fazla vektör alanı ve vektör yapılandırması gerektirir. Karma sorgular veya bir dil modeline geçmesi gerekmeyen ayrıntılı okunabilir içerik döndürmek için, görsel olmayan alanlar önerilir. Vektör yapılandırması hakkında yönergeler için bkz . Vektör deposu oluşturma.

Temel vektör alanı yapılandırması

Vektör alanları, veri türleri ve vektöre özgü özelliklerle ayırt edilir. Alan koleksiyonunda vektör alanı şöyle görünür:

{
    "name": "content_vector",
    "type": "Collection(Edm.Single)",
    "searchable": true,
    "retrievable": true,
    "dimensions": 1536,
    "vectorSearchProfile": "my-vector-profile"
}

Vektör alanları türündedir Collection(Edm.Single).

Vektör alanlarının aranabilir ve alınabilir olması gerekir, ancak bunlar filtrelenebilir, modellenebilir veya sıralanabilir olamaz ya da çözümleyiciler, normalleştiriciler veya eş anlamlı eşleme atamaları olamaz.

Vektör alanlarının dimensions , ekleme modeli tarafından oluşturulan ekleme sayısı olarak ayarlanmış olması gerekir. Örneğin, text-embedding-ada-002, her metin öbeği için 1.536 ekleme oluşturur.

Vektör alanları, dizinin başka bir yerinde tanımlanan ve bu nedenle örnekte gösterilmeyen bir vektör arama profili tarafından belirtilen algoritmalar kullanılarak dizine alınır. Daha fazla bilgi için bkz . vektör arama yapılandırması.

Temel vektör iş yükleri için alanlar koleksiyonu

Vektör depoları, vektör alanlarının yanı sıra daha fazla alan gerektirir. Örneğin, anahtar alanı ("id" bu örnekte) bir dizin gereksinimidir.

"name": "example-basic-vector-idx",
"fields": [
  { "name": "id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "key": true },
  { "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": null },
  { "name": "content", "type": "Edm.String", "searchable": true, "retrievable": true, "analyzer": null },
  { "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true }
]

Alan gibi "content" diğer alanlar, alanın okunabilir eşdeğerini "content_vector" sağlar. Dil modellerini yalnızca yanıt formülasyonu için kullanıyorsanız, nonvector içerik alanlarını atlayabilirsiniz, ancak arama sonuçlarını doğrudan istemci uygulamalarına gönderebilen çözümlerin, nonvector içeriği olmalıdır.

Meta veri alanları, özellikle meta veriler kaynak belgeyle ilgili kaynak bilgileri içeriyorsa filtreler için kullanışlıdır. Vektör alanını doğrudan filtreleyemezsiniz, ancak ön filtre veya postfilter modlarını vektör sorgusu yürütmeden önce veya sonra filtrelemek üzere ayarlayabilirsiniz.

Verileri içeri aktarma ve vektörleştirme sihirbazı tarafından oluşturulan şema

Değerlendirme ve kavram kanıtı testi için Verileri içeri aktarma ve vektörleştirme sihirbazını öneririz. Sihirbaz bu bölümde örnek şemayı oluşturur.

Bu şemanın yanlısı, arama belgelerinin veri öbekleri etrafında derlenmiş olmasıdır. Yanıtı, RAG uygulamalarında olduğu gibi bir dil modeli formüle ederse, veri öbekleri etrafında tasarlanmış bir şema istersiniz.

Veri öbekleme, dil modellerinin giriş sınırları içinde kalmak için gereklidir, ancak sorguların birden çok üst belgeden çekilen daha küçük içerik öbekleriyle eşleştirilebildiği durumlarda benzerlik aramasında duyarlığı artırır. Son olarak, semantik derecelendirme kullanıyorsanız, semantik dereceleyicinin belirteç sınırları da vardır ve bu sınır, veri öbekleme yaklaşımınızın bir parçasıysa daha kolay karşılanır.

Aşağıdaki örnekte, her arama belgesi için bir öbek kimliği, öbek, başlık ve vektör alanı vardır. ChunkID ve üst kimlik, blob meta verilerinin (yol) temel 64 kodlaması kullanılarak sihirbaz tarafından doldurulur. Öbek ve başlık blob içeriğinden ve blob adından türetilir. Yalnızca vektör alanı tam olarak oluşturulur. Öbek alanının vektörleştirilmiş sürümüdür. Eklemeler, sağladığınız bir Azure OpenAI ekleme modeli çağrılarak oluşturulur.

"name": "example-index-from-import-wizard",
"fields": [
  {"name": "chunk_id",  "type": "Edm.String", "key": true, "searchable": true, "filterable": true, "retrievable": true, "sortable": true, "facetable": true, "analyzer": "keyword"},
  { "name": "parent_id", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": true},
  { "name": "chunk", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false},
  { "name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "sortable": false},
  { "name": "vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-1707768500058-profile"}
]

RAG ve sohbet stili uygulamalar için şema

Oluşturmalı arama için depolama alanı tasarlarsanız, dizine ekleyip vektörleştirdiğiniz statik içerik için ayrı dizinler ve istem akışlarında kullanılabilecek konuşmalar için ikinci bir dizin oluşturabilirsiniz. Aşağıdaki dizinler, chat-with-your-data-solution-accelerator hızlandırıcısından oluşturulur.

Hızlandırıcı tarafından oluşturulan dizinlerin ekran görüntüsü.

Sohbet dizininden, üretken arama deneyimini destekleyen alanlar:

"name": "example-index-from-accelerator",
"fields": [
  { "name": "id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true },
  { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
  { "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "my-vector-profile"},
  { "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
  { "name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true, "facetable": true },
  { "name": "source", "type": "Edm.String", "searchable": true, "filterable": true, "retrievable": true  },
  { "name": "chunk", "type": "Edm.Int32", "searchable": false, "filterable": true, "retrievable": true },
  { "name": "offset", "type": "Edm.Int32", "searchable": false, "filterable": true, "retrievable": true }
]

Konuşma dizininden düzenlemeyi ve sohbet geçmişini destekleyen alanlar:

"fields": [
    { "name": "id", "type": "Edm.String", "key": true, "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": false },
    { "name": "conversation_id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
    { "name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "default-profile" },
    { "name": "metadata", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true },
    { "name": "type", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "user_id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "sources", "type": "Collection(Edm.String)", "searchable": false, "filterable": true, "retrievable": true, "sortable": false, "facetable": true },
    { "name": "created_at", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": true, "retrievable": true },
    { "name": "updated_at", "type": "Edm.DateTimeOffset", "searchable": false, "filterable": true, "retrievable": true }
]

Arama Gezgini'nde konuşma dizini için arama sonuçlarını gösteren ekran görüntüsü aşağıdadır. Arama nitelenmemiş olduğundan arama puanı 1,00'dır. Düzenleme ve istem akışlarını desteklemek için var olan alanlara dikkat edin. Konuşma kimliği belirli bir sohbeti tanımlar. "type" , içeriğin kullanıcıdan mı yoksa yardımcıdan mı olduğunu gösterir. Tarihler, geçmişteki sohbetleri eskitmek için kullanılır.

RAG uygulamaları için tasarlanmış bir dizinin sonuçlarını içeren Arama Gezgini'nin ekran görüntüsü.

Fiziksel yapı ve boyut

Azure AI Search'te bir dizinin fiziksel yapısı büyük ölçüde bir iç uygulamadır. Şemasına erişebilir, içeriğini yükleyip sorgulayabilir, boyutunu izleyebilir ve kapasiteyi yönetebilirsiniz, ancak kümelerin kendileri (ters ve vektör dizinleri) ve diğer dosya ve klasörler Microsoft tarafından dahili olarak yönetilir.

Bir dizinin boyutu ve maddesi aşağıdakiler tarafından belirlenir:

  • Belgelerinizin miktarı ve bileşimi
  • Tek tek alanlardaki öznitelikler. Örneğin, filtrelenebilir alanlar için daha fazla depolama alanı gerekir.
  • Dizin yapılandırması, benzerlik araması için HNSW veya kapsamlı KNN seçmenize bağlı olarak iç gezinti yapılarının nasıl oluşturulduğunu belirten vektör yapılandırması da dahil olmak üzere.

Azure AI Search, vektör depolamaya sınırlar getirerek tüm iş yükleri için dengeli ve kararlı bir sistem sağlamaya yardımcı olur. Sınırların altında kalmanıza yardımcı olmak için vektör kullanımı Azure portalında ayrı olarak ve hizmet ve dizin istatistikleri aracılığıyla program aracılığıyla izlenir ve bildirilir.

Aşağıdaki ekran görüntüsünde, bir bölüm ve bir çoğaltma ile yapılandırılmış bir S1 hizmeti gösterilmektedir. Bu hizmette ortalama olarak bir vektör alanı olan 24 küçük dizin vardır ve her alan 1536 eklemeden oluşur. İkinci kutucuk, vektör dizinleri için kotayı ve kullanımı gösterir. Vektör dizini, her vektör alanı için oluşturulan bir iç veri yapısıdır. Bu nedenle, vektör dizinleri için depolama her zaman dizin tarafından genel olarak kullanılan depolamanın bir bölümüdür. Diğer nonvector alanları ve veri yapıları gerisini tüketir.

Depolama, vektör dizini ve dizin sayısını gösteren kullanım kutucuklarının ekran görüntüsü.

Vektör dizini sınırları ve tahminleri başka bir makalede ele alınmıştır, ancak en fazla depolama alanının hizmet katmanına ve arama hizmetinin oluşturulduğu tarihe göre değişmesi öne çıkarılır. Daha yeni aynı katmanlı hizmetler vektör dizinleri için önemli ölçüde daha fazla kapasiteye sahiptir. Bu nedenlerden dolayı aşağıdaki eylemleri gerçekleştirin:

Temel işlemler ve etkileşim

Bu bölümde, tek bir dizine bağlanma ve dizinin güvenliğini sağlama dahil olmak üzere vektör çalışma zamanı işlemleri tanıtılır.

Not

Bir dizini yönetirken, bir dizini taşımak veya kopyalamak için portal veya API desteği olmadığını unutmayın. Bunun yerine, müşteriler genellikle uygulama dağıtım çözümünü farklı bir arama hizmetine yönlendirir (aynı dizin adını kullanıyorsa) veya geçerli arama hizmetinde bir kopya oluşturmak için adı düzeltip oluşturun.

Sürekli kullanılabilir

dizin, ilk belge dizine eklendiğinde sorgular için hemen kullanılabilir, ancak tüm belgeler dizine alınana kadar tam olarak çalışmaz. Dahili olarak, bir dizin bölümler arasında dağıtılır ve çoğaltmalarda yürütülür. Fiziksel dizin dahili olarak yönetilir. Mantıksal dizin sizin tarafınızdan yönetilir.

Dizin, duraklatma veya çevrimdışı duruma getirme özelliği olmadan sürekli olarak kullanılabilir. Sürekli işlem için tasarlandığından içeriğindeki tüm güncelleştirmeler veya dizinin kendisine yapılan eklemeler gerçek zamanlı olarak gerçekleşir. Sonuç olarak, bir istek belge güncelleştirmesi ile çakışırsa sorgular geçici olarak tamamlanmamış sonuçlar döndürebilir.

Belge işlemleri (yenileme veya silme) ve geçerli dizinin mevcut yapısını ve bütünlüğünü (yeni alanlar ekleme gibi) etkilemeyen değişiklikler için sorgu sürekliliğinin mevcut olduğuna dikkat edin. Yapısal güncelleştirmeler yapmanız gerekiyorsa (var olan alanları değiştirme), bunlar genellikle geliştirme ortamında bir bırakma ve yeniden oluşturma iş akışı kullanılarak veya üretim hizmetinde dizinin yeni bir sürümü oluşturularak yönetilir.

Dizin yeniden derlemesini önlemek için, küçük değişiklikler yapan bazı müşteriler önceki sürümle birlikte bir arada bulunan yeni bir alan oluşturarak bir alanı "sürüm" olarak seçer. Zaman içinde bu, özellikle çoğaltması pahalı olan bir üretim dizininde eski alanlar veya eski özel çözümleyici tanımları biçiminde yalnız bırakılmış içeriğe yol açar. Dizin yaşam döngüsü yönetiminin bir parçası olarak dizine yönelik planlı güncelleştirmelerde bu sorunları çözebilirsiniz.

Uç nokta bağlantısı

Tüm vektör dizin oluşturma ve sorgu istekleri bir dizini hedefler. Uç noktalar genellikle aşağıdakilerden biridir:

Uç nokta Bağlan ve erişim denetimi
<your-service>.search.windows.net/indexes Dizinler koleksiyonunu hedefler. Dizin oluştururken, listelerken veya silerken kullanılır. Bu işlemler için yönetici aracılığıyla kullanılabilen Yönetici hakları gereklidirAPI anahtarları veya Arama Katkıda Bulunanı rolü.
<your-service>.search.windows.net/indexes/<your-index>/docs Tek bir dizinin belge koleksiyonunu hedefler. Bir dizini veya veri yenilemeyi sorgularken kullanılır. Sorgular için okuma hakları yeterlidir ve sorgu API anahtarları veya veri okuyucu rolü aracılığıyla kullanılabilir. Veri yenileme için yönetici hakları gereklidir.
  1. İzinleriniz veya API erişim anahtarınız olduğundan emin olun. Mevcut bir dizini sorgulamadığınız sürece, bir arama hizmetindeki içeriği yönetmek ve görüntülemek için yönetici haklarına veya katkıda bulunan rol atamasına ihtiyacınız vardır.

  2. Azure portalı ile başlayın. Arama hizmetini oluşturan kişi, Erişim denetimi (IAM) sayfasından başkalarına erişim izni vermek de dahil olmak üzere arama hizmetini görüntüleyebilir ve yönetebilir.

  3. Programlı erişim için diğer istemcilere geçin. İlk adımlar için hızlı başlangıçları ve örnekleri öneririz:

Vektör verilerine güvenli erişim

Azure AI Search veri şifrelemesi, İnternet dışı senaryolar için özel bağlantılar ve Microsoft Entra Id aracılığıyla güvenli erişim için rol atamaları uygular. Tüm kurumsal güvenlik özellikleri, Azure AI Search'te Güvenlik bölümünde özetlenmiştir.

Vektör depolarını yönetme

Azure, tanılama günlüğü ve uyarı içeren bir izleme platformu sağlar. Aşağıdaki en iyi yöntemleri öneririz:

Ayrıca bkz.