Eğitim
Öğrenme yolu
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Bu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Öbeklenmiş belgeler içeren dizinler için dizin projeksiyonu, üst-alt içeriğin bire çok dizin oluşturma için arama dizinindeki alanlara nasıl eşlendiğini belirtir. Dizin projeksiyonu aracılığıyla içeriği şu kişilere gönderebilirsiniz:
Üst alanların her öbek için yinelendiği ancak dizinin diliminin öbek düzeyinde olduğu tek bir dizin. RAG öğreticisi bu yaklaşımın bir örneğidir.
Üst dizinin üst belgeyle ilgili alanları olduğu ve alt dizinin öbekler etrafında düzenlendiği iki veya daha fazla dizin. Alt dizin birincil arama corpus'dur, ancak belirli bir öbekte üst alanları almak istediğinizde veya bağımsız sorgular için arama sorguları için üst dizin kullanılabilir.
Çoğu uygulama, her öbek için yinelenen, belge dosya adı gibi üst alanları olan öbekler etrafında düzenlenmiş tek bir dizindir. Ancak sistem, gereksiniminiz buysa ayrı ve birden çok alt dizini destekleyecek şekilde tasarlanmıştır. Azure AI Search dizin birleştirmelerini desteklemediğinden uygulama kodunuzun hangi dizini kullanacağınızı işlemesi gerekir.
Bir beceri kümesinde dizin projeksiyonu tanımlanır. Her öbekle ilişkili üst içerikle birlikte bir arama dizinine içerik öbekleri gönderen dizin oluşturma işlemini koordine etmek sorumludur. Ana-alt içeriğin dizine nasıl eklendiğini denetlemek için daha fazla seçenek sunarak yerel veri öbeklemenin nasıl çalıştığını geliştirir.
Bu makalede, bire çok dizin oluşturma için dizin şeması ve dizin oluşturucu projeksiyon desenlerinin nasıl oluşturulacağı açıklanmaktadır.
Dizin oluşturucu işlem hattının çıkışını kabul eden bir dizin (bir veya daha fazla).
Öbeklemesini istediğiniz içeriğe sahip desteklenen bir veri kaynağı . Vektör veya nonvector içeriği olabilir.
Metin Bölme becerisi veya eşdeğer işlevsellik sağlayan özel bir beceri olan içeriği öbeklere bölen beceri.
Beceri kümesi, bire çok dizin oluşturma için verileri şekillendiren dizin oluşturucu projeksiyonunu içerir. Bir beceri kümesinin, senaryonuz tümleşik vektörleştirme içeriyorsa AzureOpenAIEmbedding gibi ekleme becerileri gibi başka becerileri de olabilir.
Bire çok dizin oluşturma, aşağıdaki dört bileşeni içeren beceri kümelerine ve dizin oluşturucu tabanlı dizin oluşturmaya bağımlıdır:
Verileriniz desteklenen herhangi bir veri kaynağından kaynaklanabilir, ancak içeriğin öbeklemesini istediğiniz kadar büyük olduğu ve öbeklemenin nedeni, sohbet modeline topraklama verileri sağlayan bir RAG deseni uyguladığınızdır. Veya vektör araması uyguluyorsunuz ve modelleri ekleme işleminin daha küçük giriş boyutu gereksinimlerini karşılamanız gerekiyor.
Dizin oluşturucular önceden tanımlanmış bir dizine dizinlenmiş verileri yükler. Şemayı nasıl tanımlayacağınız ve bire çok dizin oluşturma senaryosunda ilk karar bir veya daha fazla dizin kullanıp kullanmayacağınızdır. Sonraki bölüm dizin tasarımını kapsar.
İster üst değerleri yineleyen öbekler için bir dizin, ister üst-alt alan yerleşimi için ayrı dizinler oluşturun, arama için kullanılan birincil dizin veri öbekleri etrafında tasarlanmıştır. Aşağıdaki alanlara sahip olmalıdır:
Her belgeyi benzersiz olarak tanımlayan bir belge anahtarı alanı. Çözümleyici ile keyword
tür Edm.String
olarak tanımlanmalıdır.
Her öbekle üst öğeyle ilişkilendiren bir alan. türünde Edm.String
olmalıdır. Belge anahtarı alanı olamaz ve true olarak ayarlanmış olmalıdır filterable
. Örneklerde parent_id ve bu makalede öngörülen anahtar değeri olarak adlandırılır.
İçerik için metin veya vektörleştirilmiş öbek alanları gibi diğer alanlar.
Beceri kümesini oluşturmadan veya dizin oluşturucuyu çalıştırmadan önce arama hizmetinde bir dizin bulunmalıdır.
Her öbek için üst içerik yinelenen öbekler etrafında tasarlanan tek bir dizin, RAG ve vektör arama senaryoları için baskın desendir. Her öbekle doğru üst içeriği ilişkilendirme özelliği dizin projeksiyonları aracılığıyla etkinleştirilir.
Aşağıdaki şema, dizin projeksiyonları gereksinimlerini karşılayan bir örnektir. Bu örnekte, üst alanlar parent_id ve başlıktır. Alt alanlar vektör ve nonvector vektör öbekleridir. chunk_id bu dizinin belge kimliğidir. parent_id ve başlık, dizindeki her öbek için yineler.
Dizin oluşturmak için Azure portalı, REST API'leri veya Azure SDK'sını kullanabilirsiniz.
{
"name": "my_consolidated_index",
"fields": [
{"name": "chunk_id", "type": "Edm.String", "key": true, "filterable": true, "analyzer": "keyword"},
{"name": "parent_id", "type": "Edm.String", "filterable": true},
{"name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "retrievable": true},
{"name": "chunk", "type": "Edm.String","searchable": true,"retrievable": true},
{"name": "chunk_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": false, "stored": false, "dimensions": 1536, "vectorSearchProfile": "hnsw"}
],
"vectorSearch": {
"algorithms": [{"name": "hsnw", "kind": "hnsw", "hnswParameters": {}}],
"profiles": [{"name": "hsnw", "algorithm": "hnsw"}]
}
}
Dizin projeksiyonları bir beceri kümesi tanımı içinde tanımlanır ve öncelikle her seçicinin selectors
arama hizmetindeki farklı bir hedef dizine karşılık geldiği dizisi olarak tanımlanır. Bu bölüm söz dizimi ve bağlam örnekleri ve ardından parametre başvurusu ile başlar.
Çeşitli API söz dizimi için bir sekme seçin. Şu anda, beceri kümesi JSON tanımını düzenlemek dışında projeksiyonları ayarlamak için portal desteği yoktur. JSON için REST örneğine bakın.
Dizin projeksiyonları genel olarak kullanılabilir. En son kararlı API'yi öneririz:
Aşağıda, metin bölme becerisine göre tek tek sayfaların çıkışını arama dizininde kendi belgeleri olarak yansıtmak için kullanabileceğiniz bir dizin projeksiyonları tanımı için örnek bir yük verilmiştir.
"indexProjections": {
"selectors": [
{
"targetIndexName": "my_consolidated_index",
"parentKeyFieldName": "parent_id",
"sourceContext": "/document/pages/*",
"mappings": [
{
"name": "chunk",
"source": "/document/pages/*",
"sourceContext": null,
"inputs": []
},
{
"name": "chunk_vector",
"source": "/document/pages/*/chunk_vector",
"sourceContext": null,
"inputs": []
},
{
"name": "title",
"source": "/document/title",
"sourceContext": null,
"inputs": []
}
]
}
],
"parameters": {
"projectionMode": "skipIndexingParentDocuments"
}
}
Dizin projeksiyon parametreleri | Tanım |
---|---|
selectors |
Genellikle öbekler etrafında tasarlanan ana arama corpus parametreleri. |
projectionMode |
Dizin oluşturucuya yönergeler sağlayan isteğe bağlı bir parametre. Bu parametre için tek geçerli değer olan skipIndexingParentDocuments ve öbek dizini birincil arama corpus olduğunda kullanılır ve üst alanların öbekli dizin içinde ek arama belgeleri olarak dizine eklenip dizinlenmeyeceğini belirtmeniz gerekir. ayarlamazsanız skipIndexingParentDocuments , dizininizde öbekler için null olan ancak yalnızca üst alanlarla doldurulmuş ek arama belgeleri alırsınız. Örneğin, beş belge dizine 100 öbek katkıda bulunursa, dizindeki belge sayısı 105'tir. Oluşturulan beş belgenin veya üst alanların öbek (alt) alanları için null değerleri vardır ve bu da bunları dizindeki belgelerin toplu halinden önemli ölçüde farklı hale getirir. değerini olarak skipIndexingParentDocument ayarlamanızı öneririzprojectionMode . |
Seçiciler tanımlarının bir parçası olarak aşağıdaki parametrelere sahiptir.
Seçici parametreleri | Tanım |
---|---|
targetIndexName |
Dizin verilerinin yansıtıldığı dizinin adı. Yinelenen üst alanları olan tek bir öbekli dizin veya üst-alt içerik için ayrı dizinler kullanıyorsanız alt dizindir. |
parentKeyFieldName |
Üst belgenin anahtarını sağlayan alanın adı. |
sourceContext |
Verilerin tek tek arama belgelerine eşlendiği ayrıntı düzeyini tanımlayan zenginleştirme ek açıklaması. Daha fazla bilgi için bkz . Beceri bağlamı ve giriş ek açıklaması dili. |
mappings |
Zenginleştirilmiş verilerin arama dizinindeki alanlarla eşleme dizisi. Her eşleme şunlardan oluşur: name : Arama dizinindeki verilerin dizine alınması gereken alanın adı. source : Verilerin çekilmesi gereken zenginleştirme ek açıklaması yolu. Her mapping bir kullanıcı, bilgi deposuna veya Şekillendirici Becerisine benzer şekilde isteğe bağlı sourceContext ve inputs alanla özyinelemeli olarak veri tanımlayabilir. Uygulamanıza bağlı olarak, bu parametreler verileri arama dizininde türündeki Edm.ComplexType alanlara şekillendirmenize olanak sağlar. Bazı LLM'ler arama sonuçlarında karmaşık bir türü kabul etmediğinden, kullandığınız LLM karmaşık tür eşlemesinin yararlı olup olmadığını belirler. |
mappings
parametresi önemlidir. Belge anahtarı ve üst kimlik gibi kimlik alanları dışında alt dizindeki her alanı açıkça eşlemeniz gerekir.
Bu gereksinim, Azure AI Search'teki diğer alan eşleme kurallarının aksinedir. Bazı veri kaynağı türleri için, dizin oluşturucu alanları benzer adlara veya bilinen özelliklere göre örtük olarak eşleyebilir (örneğin, blob dizin oluşturucuları varsayılan belge anahtarı olarak benzersiz meta veri depolama yolunu kullanır). Ancak, dizin oluşturucu projeksiyonları için ilişkinin "çok" tarafında her alan eşlemesini açıkça belirtmeniz gerekir.
Üst anahtar alanı için alan eşlemesi oluşturmayın. Bunun yapılması, değişiklik izlemeyi ve eşitlenmiş veri yenilemeyi kesintiye uğratır.
Bire çok dizin oluşturmalar için çeşitli desenler gördüğünüze göre, her seçenekle ilgili temel farkları karşılaştıralım. Dizin projeksiyonları, beceri kümesi aracılığıyla çalışan her "üst" belge için etkili bir şekilde "alt" belgeler oluşturur. "Üst" belgeleri işlemek için çeşitli seçenekleriniz vardır.
Üst ve alt belgeleri ayrı dizinlere göndermek için dizin targetIndexName
oluşturucu tanımınızın öğesini üst dizine ayarlayın ve dizin projeksiyon seçicisindeki öğesini alt dizine ayarlayın targetIndexName
.
Üst ve alt belgeleri aynı dizinde tutmak için dizin oluşturucuyu targetIndexName
ve dizin projeksiyonunu targetIndexName
aynı dizine ayarlayın.
Üst arama belgeleri oluşturmaktan ve dizinin yalnızca tekdüzen bir tanecik içeren alt belgeler içerdiğinden emin olmak için, hem dizin oluşturucu tanımı hem de seçici için öğesini aynı dizine ayarlayıntargetIndexName
, ancak ardından anahtar olarak ayarlanmış skipIndexingParentDocuments
bir parameters
projectionMode
ek nesne selectors
ekleyin. Burada gösterildiği gibi:
"indexProjections": {
"selectors": [
...
],
"parameters": {
"projectionMode": "skipIndexingParentDocuments"
}
}
Dizin oluşturucular üç farklı tür alan eşlemesiyle ilişkilidir. Dizin oluşturucuyu çalıştırmadan önce alan eşlemelerinizi denetleyin ve her türün ne zaman kullanılacağını bilin.
Alan eşlemeleri bir dizin oluşturucuda tanımlanır ve kaynak alanı dizin alanıyla eşlemek için kullanılır. Alan eşlemeleri, verileri kaynaktan kaldıran ve dizin oluşturma için geçiren veri yolları için kullanılır ve ara beceri işleme adımı yoktur. Dizin oluşturucu genellikle aynı ada ve türe sahip alanları otomatik olarak eşleyebilir. Açık alan eşlemeleri yalnızca tutarsızlıklar olduğunda gereklidir. Bire çok dizin oluşturmada ve şimdiye kadar açıklanan desenlerde alan eşlemelerine ihtiyacınız olmayabilir.
Çıktı alanı eşlemeleri bir dizin oluşturucuda tanımlanır ve beceri kümesi tarafından oluşturulan zenginleştirilmiş içeriği bir alanla ana dizine eşlemek için kullanılır. Bu makalede ele alınan bire çok desenlerinde bu, iki dizinli bir çözümdeki üst dizindir. Bu makalede gösterilen örneklerde üst dizin seyrektir ve yalnızca başlık alanı vardır ve bu alan beceri kümesi işleme içeriğiyle doldurulmadığından çıkış alanı eşlemesi gerçekleştirmeyiz.
Dizin oluşturucu projeksiyon alanı eşlemeleri, beceri kümesi tarafından oluşturulan içeriği alt dizindeki alanlarla eşlemek için kullanılır. Alt dizinin üst alanları da içerdiği durumlarda (birleştirilmiş dizin çözümünde olduğu gibi), başlığın öbeklenmiş her belgede gösterilmesini istediğinizi varsayarak, üst düzey başlık alanı da dahil olmak üzere içeriği olan her alan için alan eşlemeleri ayarlamanız gerekir. Ayrı üst ve alt dizinler kullanıyorsanız, dizin oluşturucu projeksiyonlarında yalnızca alt düzey alanlar için alan eşlemeleri olmalıdır.
Not
Hem çıkış alanı eşlemeleri hem de dizin oluşturucu projeksiyon alanı eşlemeleri zenginleştirilmiş belge ağacı düğümlerini kaynak giriş olarak kabul eder. Veri yolunu ayarlamak için her düğümün yolunun nasıl belirtileceğini bilmek önemlidir. Yol söz dizimi hakkında daha fazla bilgi edinmek için bkz . Örnekler için zenginleştirilmiş düğümlere ve beceri kümesi tanımına yönelik bir yola başvurma.
Bir veri kaynağı, dizinler ve beceri kümesi oluşturduktan sonra dizin oluşturucuyu oluşturmaya ve çalıştırmaya hazır olursunuz. Bu adım işlem hattını yürütmeye geçirir.
çözümünüzü test etmek için işlem tamamlandıktan sonra arama dizininizi sorgulayabilirsiniz.
Temel alınan veri kaynağına bağlı olarak, dizin oluşturucu genellikle sürekli değişiklik izleme ve silme algılaması sağlayabilir. Bu bölümde, veri yenilemeyle ilgili olarak bire çok dizin oluşturmanın içerik yaşam döngüsü açıklanmaktadır.
Değişiklik izleme ve silme algılaması sağlayan veri kaynakları için, dizin oluşturucu işlemi kaynak verilerinizdeki değişiklikleri alabilir. Dizin oluşturucuyu ve beceri kümesini her çalıştırdığınızda, beceri kümesi veya temel alınan kaynak veriler değiştiyse dizin projeksiyonları güncelleştirilir. Dizin oluşturucu tarafından alınan tüm değişiklikler, zenginleştirme işlemi aracılığıyla dizindeki projeksiyonlara yayılır ve yansıtılan verilerinizin kaynak veri kaynağındaki içeriğin geçerli bir gösterimi olduğundan emin olur. Veri yenileme etkinliği, her öbek için öngörülen anahtar değerinde yakalanır. Temel alınan veriler değiştiğinde bu değer güncelleştirilir.
Not
Dizin gönderme API'sini kullanarak yansıtılan belgelerdeki verileri el ile düzenleyebilirsiniz ancak bunu yapmaktan kaçınmalısınız. Kaynak verilerdeki belgenin güncelleştirildiği ve veri kaynağında değişiklik izleme veya silme algılama özelliğinin etkinleştirildiği varsayılarak, bir sonraki işlem hattı çağrısında bir dizine yönelik el ile yapılan güncelleştirmelerin üzerine yazılır.
Veri kaynağınıza yeni içerik eklerseniz, sonraki dizin oluşturucu çalıştırmasının dizinine yeni öbekler veya alt belgeler eklenir.
Veri kaynağındaki mevcut içeriği değiştirirseniz, kullandığınız veri kaynağı değişiklik izleme ve silme algılamayı destekliyorsa öbekler arama dizininde artımlı olarak güncelleştirilir. Exammple için, belgede bir sözcük veya tümce değişirse, hedef dizinde söz konusu sözcük veya tümceyi içeren öbek bir sonraki dizin oluşturucu çalıştırmasında güncelleştirilir. Alan türünü ve bazı atıfları değiştirme gibi diğer güncelleştirme türleri mevcut alanlar için desteklenmez. İzin verilen güncelleştirmeler hakkında daha fazla bilgi için bkz . Dizin şemasını güncelleştirme.
Azure Depolama gibi bazı veri kaynakları, zaman damgasına göre varsayılan olarak değişiklik ve silme izlemeyi destekler. Değişiklik izleme için OneLake, Azure SQL veya Azure Cosmos DB gibi diğer veri kaynaklarının yapılandırılması gerekir.
Kaynak içerik artık yoksa (örneğin, metin daha az öbek olacak şekilde kısaltılmışsa), arama dizinindeki ilgili alt belge silinir. Kalan alt belgeler, içeriği başka bir şekilde değişmese bile anahtarını yeni bir karma değeri içerecek şekilde güncelleştirilir.
Bir üst belge veri kaynağından tamamen silinirse, ilgili alt belgeler yalnızca silme işlemi veri kaynağı tanımında tanımlanan bir dataDeletionDetectionPolicy
tarafından algılanırsa silinir. Yapılandırılmış bir dataDeletionDetectionPolicy
belgeniz yoksa ve veri kaynağından bir üst belgeyi silmeniz gerekiyorsa, artık istenmiyorsa alt belgeleri el ile silmeniz gerekir.
Güncelleştirilmiş ve silinmiş içerikte veri bütünlüğünü sağlamak için, bire çok dizin oluşturmada veri yenileme işlemi "çok" tarafındaki öngörülen anahtar değerine dayanır. Tümleşik vektörleştirme veya Verileri içeri aktarma ve vektörleştirme sihirbazı kullanıyorsanız, öngörülen anahtar değeri parent_id
dizinin öbekli veya "çok" tarafındaki alandır.
Yansıtılan anahtar değeri, dizin oluşturucunun her belge için oluşturduğu benzersiz bir tanımlayıcıdır. Benzersizlik sağlar ve değişiklik ve silme izlemenin düzgün çalışmasını sağlar. Bu anahtar aşağıdaki kesimleri içerir:
Örneğin, anahtar değeri "aa1b22c33" olan bir üst belgeyi dört sayfaya bölerseniz ve bu sayfaların her biri dizin projeksiyonları aracılığıyla kendi belgesi olarak yansıtılırsa:
Üst belge kaynak verilerde güncelleştirilirse ve bu da daha fazla öbeklenmiş sayfaya neden olursa, rastgele karma değişir, daha fazla sayfa eklenir ve her öbek içeriği kaynak belgedekiyle eşleşecek şekilde güncelleştirilir.
Bu bölümde, ayrı üst ve alt dizinlere yönelik örnekler gösterilmektedir. Bu yaygın olmayan bir desendir, ancak bu yaklaşım kullanılarak en iyi şekilde karşılanması gereken uygulama gereksinimleriniz olabilir. Bu senaryoda, üst-alt öğe içeriğini iki ayrı dizine yansıtıyorsunuz.
Her şemada, arama sorgusunda kullanılmak üzere her iki dizinde de ortak olan üst kimlik alanıyla birlikte belirli bir dilim için alanlar bulunur. Birincil arama corpus alt dizinidir, ancak sonuçtaki her eşleşmenin üst alanlarını almak için bir arama sorgusu oluşturun. Azure AI Search sorgu zamanında birleştirmeleri desteklemediğinden uygulama kodunuz veya düzenleme katmanınızın bir uygulamaya veya işleme geçirilebilen sonuçları birleştirmesi veya harmanlaması gerekir.
Üst dizinin parent_id alanı ve başlığı vardır. parent_id belge anahtarıdır. Alanları üst belge düzeyinde vektörleştirmek istemediğiniz sürece vektör arama yapılandırmasına ihtiyacınız yoktur.
{
"name": "my-parent-index",
"fields": [
{"name": "parent_id", "type": "Edm.String", "filterable": true},
{"name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "retrievable": true},
]
}
Alt dizinde öbeklenmiş alanlar ve parent_id alanı vardır. Tümleşik vektörleştirme, puanlama profilleri, anlam dereceleyici veya çözümleyiciler kullanıyorsanız bunları alt dizinde ayarlayabilirsiniz.
{
"name": "my-child-index",
"fields": [
{"name": "chunk_id", "type": "Edm.String", "key": true, "filterable": true, "analyzer": "keyword"},
{"name": "parent_id", "type": "Edm.String", "filterable": true},
{"name": "chunk", "type": "Edm.String","searchable": true,"retrievable": true},
{"name": "chunk_vector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": false, "stored": false, "dimensions": 1536, "vectorSearchProfile": "hnsw"}
],
"vectorSearch": {
"algorithms": [{"name": "hsnw", "kind": "hnsw", "hnswParameters": {}}],
"profiles": [{"name": "hsnw", "algorithm": "hnsw"}]
},
"scoringProfiles": [],
"semanticConfiguration": [],
"analyzers": []
}
Dizin oluşturucunun içeriği dizine almak için kullanması gereken veri yolunu belirten bir dizin projeksiyon tanımı örneği aşağıda verilmiştir. Dizin projeksiyon tanımında alt dizin adını ve her alt veya öbek düzeyindeki alanın eşlemelerini belirtir. Alt dizin adının belirtildiği tek yer burasıdır.
"indexProjections": {
"selectors": [
{
"targetIndexName": "my-child-index",
"parentKeyFieldName": "parent_id",
"sourceContext": "/document/pages/*",
"mappings": [
{
"name": "chunk",
"source": "/document/pages/*",
"sourceContext": null,
"inputs": []
},
{
"name": "chunk_vector",
"source": "/document/pages/*/chunk_vector",
"sourceContext": null,
"inputs": []
}
]
}
]
}
Dizin oluşturucu tanımı, işlem hattının bileşenlerini belirtir. Dizin oluşturucu tanımında, sağacak dizin adı üst dizindir. Üst düzey alanlar için alan eşlemelerine ihtiyacınız varsa, bunları outputFieldMappings içinde tanımlayın. Ayrı dizinler kullanan bire çok dizin oluşturma için dizin oluşturucu tanımı aşağıdaki örneğe benzer olabilir.
{
"name": "my-indexer",
"dataSourceName": "my-ds",
"targetIndexName": "my-parent-index",
"skillsetName" : "my-skillset"
"parameters": { },
"fieldMappings": (optional) Maps fields in the underlying data source to fields in an index,
"outputFieldMappings" : (required) Maps skill outputs to fields in an index,
}
Veri öbekleme ve bire çok dizin oluşturma, Azure AI Search'teki RAG deseninin bir parçasıdır. Bu konuda daha fazla bilgi edinmek için aşağıdaki öğreticiye ve kod örneğine geçin.
Eğitim
Öğrenme yolu
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization