Az Azure AI Searchben a vektortároló indexsémával rendelkezik, amely vektor- és nemvektormezőket határoz meg, vektorkonfigurációt a beágyazási területet létrehozó algoritmusokhoz, valamint a lekérdezési kérelmekben használt vektormező-definíciók beállításait. Az Index létrehozása vagy frissítése API létrehozza a vektortárolót.
A vektoradatok indexeléséhez kövesse az alábbi lépéseket:
Séma definiálása vektoralgoritmusokkal indexeléshez és kereséshez
Vektormezők hozzáadása
Előre elkészített adatok betöltése külön lépésként, vagy integrált vektorizálás (előzetes verzió) használata az adatok adattömbözéséhez és kódolásához az indexelés során
Ez a cikk ismerteti a munkafolyamatot, és rest használatával szemlélteti az egyes lépéseket. A REST API minden újabb verziója új funkciókat ad hozzá. Miután megismerte az alapszintű munkafolyamatot és az egyes API-verziók nyújtotta lehetőségeket, folytassa az Azure SDK-kódmintákkal az azure-search-vector-samples adattárban, hogy útmutatást nyújtsunk ezeknek a funkcióknak a tesztelési és éles kódban való használatához.
Tipp.
Az Azure Portal használatával hozzon létre egy vektorindexet , és próbálja ki az integrált vektorizálást.
Előfeltételek
Azure AI Search, bármely régióban és bármilyen szinten. A legtöbb meglévő szolgáltatás támogatja a vektorkeresést. A 2019. január előtt létrehozott szolgáltatások esetében van egy kis részhalmaz, amely nem tud vektorindexet létrehozni. Ebben az esetben létre kell hozni egy új szolgáltatást.
Ha az Azure SDK-k és REST API-k általánosan elérhető verzióját használja, a forrásdokumentumokban már meglévő vektorbeágyazások. További információ: Beágyazások létrehozása. Egy másik lehetőség az integrált vektorizálás (előzetes verzió).
Ismernie kell a beágyazások létrehozásához használt modell méretkorlátját és a hasonlóság kiszámításának módját. Az Azure OpenAI-ban a text-embedding-ada-002 esetében a numerikus vektor hossza 1536. A hasonlóság kiszámítása a következővel cosinetörténik: . Az érvényes értékek 2–3072 dimenziók.
Ismernie kell az indexek létrehozását. A sémának tartalmaznia kell a dokumentumkulcs mezőit, a keresendő vagy szűrni kívánt egyéb mezőket, valamint az indexelés és lekérdezések során szükséges viselkedések egyéb konfigurációit.
Dokumentumok előkészítése indexeléshez
Az indexelés előtt állítson össze egy hasznos dokumentumot, amely vektor- és nem adatmezőket tartalmaz. A dokumentumszerkezetnek meg kell felelnie az indexsémának.
Győződjön meg arról, hogy a dokumentumok:
Adjon meg egy mezőt vagy metaadat-tulajdonságot, amely egyedileg azonosítja az egyes dokumentumokat. Minden keresési indexhez dokumentumkulcs szükséges. A dokumentumkulcs követelményeinek teljesítéséhez a forrásdokumentumnak egy olyan mezővel vagy tulajdonságsal kell rendelkeznie, amely egyedileg azonosíthatja azt az indexben. Ezt a forrásmezőt le kell képezni egy típusú Edm.String indexmezőre és key=true a keresési indexre.
Adjon meg vektoradatokat (egy pontosságú lebegőpontos számok tömbje) a forrásmezőkben.
A vektormezők modellek beágyazásával generált numerikus adatokat tartalmaznak, amelyek mezőnként egy beágyazással jönnek létre. Javasoljuk, hogy az Azure OpenAI-ban beágyazási modelleket hozzon létre, például szövegbeágyazási-ada-002 szöveges dokumentumokhoz, vagy a képek képlekérési REST API-jának használatát. Csak az index legfelső szintű vektormezői támogatottak: A vektor almezői jelenleg nem támogatottak.
Adjon meg más mezőknek emberileg olvasható alfanumerikus tartalmat a lekérdezési válaszhoz, valamint olyan hibrid lekérdezési forgatókönyvekhez, amelyek teljes szöveges keresést vagy szemantikai rangsorolást tartalmaznak ugyanabban a kérésben.
A keresési indexnek tartalmaznia kell a támogatni kívánt lekérdezési forgatókönyvek mezőit és tartalmát. Tegyük fel, hogy termékneveket, verziókat, metaadatokat vagy címeket szeretne keresni vagy szűrni. Ebben az esetben a hasonlósági keresés nem különösen hasznos. A kulcsszókeresés, a geokeresés vagy a szűrők jobb választás lenne. A vektor- és nemvektoradatok átfogó mezőgyűjteményét tartalmazó keresési index maximális rugalmasságot biztosít a lekérdezések felépítéséhez és a válaszok összetételéhez.
Ha egy mezőben a HNSW értéket választja, a lekérdezési időpontban teljes KNN-t választhat. A másik irány azonban nem működik: ha a teljesség igénye mellett dönt, később nem kérhet HNSW-keresést, mert a hozzávetőleges keresést lehetővé tevő további adatstruktúrák nem léteznek.
Előzetes verzióról stabil verzióra történő migrálási útmutatót keres? A lépésekért tekintse meg a REST API-k frissítését.
A konfiguráció neve. A névnek egyedinek kell lennie az indexen belül.
profiles absztrakciós réteg hozzáadása a gazdagabb definíciókhoz. A rendszer definiál egy vectorSearchprofilt, majd név alapján hivatkozik az egyes vektormezőkre.
"hnsw" és "exhaustiveKnn" az indexelés során a vektortartalmak rendszerezésére használt közelítő szomszédok (ANN) algoritmusok.
"m" A (kétirányú kapcsolatszám) alapértelmezett értéke 4. A tartomány 4 és 10 között van. Az alacsonyabb értékek kevesebb zajt adnak vissza az eredményekben.
"efConstruction" alapértelmezett értéke 400. A tartomány 100 és 1000 között van. Az indexelés során használt legközelebbi szomszédok száma.
"efSearch" alapértelmezett értéke 500. A tartomány 100 és 1000 között van. A keresés során használt legközelebbi szomszédok száma.
"metric" Az Azure OpenAI használata esetén "koszinusznak" kell lennie, ellenkező esetben használja a használt beágyazási modellhez társított hasonlósági metrikát. A támogatott értékek a következőkcosine: , dotProducteuclidean.
2024-05-01-Preview a legújabb verzió. További kódolási lehetőségeket ad hozzá, de a vektorkeresési konfiguráció (vectorSearch struktúra) többnyire megegyezik a 2024-03-01 előzetes verzióval.
Metrikaként hozzáadja hamming a távolságot a legközelebbi szomszédkereséshez bináris adatokon keresztül. További információ: Bináris adatok indexelése vektorkereséshez.
Kibővíti az integrált vektorizálást a beágyazási modell választási lehetőségeivel. Ha ki szeretné használni ezt a képességet, függőséget kell vállalnia egy indexelőtől és egy készségkészlettől. Az új beágyazási képességek listáját a Vektoradatok betöltése és a Lekérési API-k című szakaszban találja.
Adjon hozzá egy szakaszt vectorSearch az indexben, amely meghatározza a tömörítési beállításokat és a beágyazási terület létrehozásához használt keresési algoritmusokat. További információ: Vektorkvantálás és csökkentett tárterület konfigurálása.
vectorSearch.compressions.kind kell lennie scalarQuantization.
rerankWithOriginalVectors Az eredeti, tömörítetlen vektorokkal újraszámítja a hasonlóságot, és újraszámítja a kezdeti keresési lekérdezés által visszaadott felső eredményeket. A tömörítetlen vektorok akkor is léteznek a keresési indexben, ha stored hamisak. Ez a tulajdonság opcionális. Alapértelmezett érték: true (igaz).
defaultOversampling a lehetséges eredmények szélesebb halmazát veszi figyelembe, hogy ellensúlyozza a kvantálásból származó információk csökkenését. A lehetséges eredmények képlete a k lekérdezésben található, túlbélyegző szorzóval. Ha például a lekérdezés 5-et ad meg k , és a túlhasználat 20, akkor a lekérdezés 100 dokumentumot kér le az újrabontáshoz, az eredeti tömörítetlen vektor használatával erre a célra. A rendszer csak a legjobban k rerankedt eredményeket adja vissza. Ez a tulajdonság opcionális. Az alapértelmezett érték 4.
quantizedDataType beállításnak a következőre kell állítania: int8. Jelenleg ez az egyetlen primitív adattípus, amely támogatott. Ez a tulajdonság opcionális. Az alapértelmezett szint a int8.
A konfiguráció neve. A névnek egyedinek kell lennie az indexen belül.
profiles újak ebben az előzetes verzióban. Absztrakciós réteget adnak hozzá a gazdagabb definíciókhoz. A profilok definiálva lesznek az vectorSearchegyes vektormezőkben, majd tulajdonságként.
hnsw és "exhaustiveKnn" az indexelés során a vektortartalmak rendszerezésére használt közelítő szomszédok (ANN) algoritmusok.
m A (kétirányú kapcsolatszám) alapértelmezett értéke 4. A tartomány 4 és 10 között van. Az alacsonyabb értékek kevesebb zajt adnak vissza az eredményekben.
efConstruction alapértelmezett értéke 400. A tartomány 100 és 1000 között van. Az indexelés során használt legközelebbi szomszédok száma.
efSearch alapértelmezett értéke 500. A tartomány 100 és 1000 között van. A keresés során használt legközelebbi szomszédok száma.
metric Az Azure OpenAI használata esetén "koszinusznak" kell lennie, ellenkező esetben használja a használt beágyazási modellhez társított hasonlósági metrikát. A támogatott értékek a következőkcosine: , dotProducteuclidean.
Fontos
2023-07-01-Preview volt az első REST API-verzió, amely támogatja a vektorokat. Az újabb előzetes verziókban lecserélt elavult struktúrákat használ. Javasoljuk , hogy migráljon egy újabb REST API-ba.
Ez az előzetes verzió hozzáadva:
vectorSearch.algorithmConfigurations a HNSW-algoritmus megadásához.
hnsw a legközelebbi szomszéd algoritmus a vektortartalom indexelésével.
A konfiguráció neve. A névnek egyedinek kell lennie az indexen belül.
hnsw a közelségi gráf indexelés közbeni létrehozásához használt közelségi gráf (KÖZEL LEGKÖZELEBBI SZOMSZÉDOK) (ANN) algoritmusa. Ebben az API-verzióban csak a Hierarchical Navigable Small World (HNSW) támogatott.
m A (kétirányú kapcsolatszám) alapértelmezett értéke 4. A tartomány 4 és 10 között van. Az alacsonyabb értékek kevesebb zajt adnak vissza az eredményekben.
efConstruction alapértelmezett értéke 400. A tartomány 100 és 1000 között van. Az indexelés során használt legközelebbi szomszédok száma.
efSearch alapértelmezett értéke 500. A tartomány 100 és 1000 között van. A keresés során használt legközelebbi szomszédok száma.
metric Az Azure OpenAI használata esetén "koszinusznak" kell lennie, ellenkező esetben használja a használt beágyazási modellhez társított hasonlósági metrikát. A támogatott értékek a következőkcosine: , dotProducteuclidean.
Vektormező hozzáadása a mezők gyűjteményéhez
A mezőgyűjteménynek tartalmaznia kell egy mezőt a dokumentumkulcshoz, a vektormezőkhöz és a hibrid keresési forgatókönyvekhez szükséges egyéb mezőkhöz.
Adjon meg egy vektormezőt az alábbi attribútumokkal. Mezőnként egy generált beágyazást tárolhat. Minden vektormezőhöz:
type Ebben az API-verzióban kell lennie Collection(Edm.Single) .
dimensions a beágyazási modell által létrehozott dimenziók száma. A text-embedding-ada-002 esetében ez 1536.
vectorSearchProfile az index más részén definiált profil neve.
searchable igaznak kell lennie.
retrievable lehet igaz vagy hamis. A True a nyers vektorokat (1536)egyszerű szövegként adja vissza, és tárhelyet használ fel. Állítsa igaz értékre, ha vektoreredményt ad át egy alsóbb rétegbeli alkalmazásnak.
filterable, facetablehamisnak sortable kell lennie.
Adjon hozzá más mezőket, amelyek meghatározzák az indexelt szöveges tartalom tartalmát és szerkezetét. Legalább egy dokumentumkulcsra van szüksége.
Olyan mezőket is hozzá kell adnia, amelyek hasznosak a lekérdezésben vagy a válaszában. Az alábbi példa a cím és a tartalom vektormezőit ("titleVector", "contentVector") mutatja be, amelyek a vektorokkal egyenértékűek. A keresési eredmények rendezéséhez, szűréséhez és olvasásához is hasznos mezőket biztosít az egyenértékű szöveges tartalomhoz ("title", "content").
A vektormező-definíciók megegyeznek a 2024-03-01 előzetes verzióval, az új bináris adattípus kivételével. További információ: Bináris adatok indexelése vektorkereséshez.
dimensions a beágyazási modell által létrehozott dimenziók száma. A text-embedding-ada-002 esetében ez 1536.
vectorSearchProfile az index más részén definiált profil neve.
searchable igaznak kell lennie.
retrievable lehet igaz vagy hamis. A True a nyers vektorokat (1536)egyszerű szövegként adja vissza, és tárhelyet használ fel. Állítsa igaz értékre, ha vektoreredményt ad át egy alsóbb rétegbeli alkalmazásnak. Hamis érték megadása kötelező, ha stored hamis.
stored egy új logikai tulajdonság, amely csak a vektormezőkre vonatkozik. A True a keresési eredményekben visszaadott vektorok másolatát tárolja. Az indexelés során másolt hamis elvetések. Kereshet vektorokon, de nem adhat vissza vektorokat az eredményekben.
filterable, facetablehamisnak sortable kell lennie.
A következő REST API-példában a "title" és a "content" a teljes szöveges keresésben és szemantikai rangsorolásban használt szöveges tartalmat, míg a "titleVector" és a "contentVector" vektoradatokat tartalmaz. Ebben az API-verzióban indexelőkkel és képességkészletekkel feltöltheti a vektormezőt integrált vektorizálással. Az indexdefiníció nem változik, de indexelőket és készségeket adhat hozzá a megoldáshoz a mezők kitöltéséhez.
Vektormezők hozzáadása a mezők gyűjteményéhez. Dokumentummezőnként egy generált beágyazást tárolhat. Minden vektormezőhöz:
type kell lennie Collection(Edm.Single).
dimensions a beágyazási modell által létrehozott dimenziók száma. A text-embedding-ada-002 esetében ez 1536.
vectorSearchProfile az index más részén definiált profil neve.
searchable igaznak kell lennie.
retrievable lehet igaz vagy hamis. A True a nyers vektorokat (1536)egyszerű szövegként adja vissza, és tárhelyet használ fel. Állítsa igaz értékre, ha vektoreredményt ad át egy alsóbb rétegbeli alkalmazásnak.
filterable, facetablehamisnak sortable kell lennie.
Szűrhető, nem megadó mezőket adhat hozzá a gyűjteményhez, például a "title" értéket igaz értékre filterable állítva, ha előszűrést vagy utólagos szűrést szeretne meghívni a [vektoros lekérdezésen](vector-search-how-to-query.md
Adjon hozzá más mezőket, amelyek meghatározzák az indexelt szöveges tartalom tartalmát és szerkezetét. Legalább egy dokumentumkulcsra van szüksége.
Olyan mezőket is hozzá kell adnia, amelyek hasznosak a lekérdezésben vagy a válaszában. Az alábbi példa a cím és a tartalom vektormezőit ("titleVector", "contentVector") mutatja be, amelyek a vektorokkal egyenértékűek. A keresési eredmények rendezéséhez, szűréséhez és olvasásához is hasznos mezőket biztosít az egyenértékű szöveges tartalomhoz ("title", "content").
2023-07-01-Preview volt az első REST API-verzió, amely támogatja a vektoros forgatókönyveket.
A következő REST API-példában a "title" és a "content" a teljes szöveges keresésben és szemantikai rangsorolásban használt szöveges tartalmat tartalmazza, míg a "titleVector" és a "contentVector" külsőleg generált vektoradatokat tartalmaz.
Vektormezők hozzáadása a mezők gyűjteményéhez. Dokumentummezőnként egy generált beágyazást tárolhat. Minden vektormezőhöz:
Rendelje hozzá az Collection(Edm.Single) adattípust.
Adja meg a vektorkeresési algoritmus konfigurációjának nevét.
Adja meg a beágyazási modell által létrehozott dimenziók számát.
Attribútumok beállítása:
A "kereshető" kifejezésnek "igaz" értékűnek kell lennie.
A "beolvasható" érték "true" (igaz) értékre állítása lehetővé teszi a nyers vektorok megjelenítését (például ellenőrzési lépésként), de ezzel növeli a tárterületet. Ha nem kell nyers vektorokat visszaadnia, állítsa "false" (hamis) értékre. Nem kell vektorokat visszaadnia egy lekérdezéshez, de ha vektoreredményt ad át egy alsóbb rétegbeli alkalmazásnak, akkor állítsa a "beolvasható" értéket "igaz" értékre.
A "szűrhető", "facetable", "rendezhető" attribútumoknak "hamisnak" kell lenniük. Ne állítsa őket "igaz" értékre, mert ezek a viselkedések nem érvényesek a vektormezők környezetében, és a kérés sikertelen lesz.
Adjon hozzá más mezőket, amelyek meghatározzák az indexelt szöveges tartalom tartalmát és szerkezetét. Legalább egy dokumentumkulcsra van szüksége.
Olyan mezőket is hozzá kell adnia, amelyek hasznosak a lekérdezésben vagy a válaszában. Az alábbi példa a cím és a tartalom vektormezőit ("titleVector", "contentVector") mutatja be, amelyek a vektorokkal egyenértékűek. A keresési eredmények rendezéséhez, szűréséhez és olvasásához is hasznos mezőket biztosít az egyenértékű szöveges tartalomhoz ("title", "content").
A leírt elemekkel rendelkező indexdefiníciók a következőképpen néznek ki:
Az indexeléshez megadott tartalomnak meg kell felelnie az indexsémának, és tartalmaznia kell egy egyedi sztringértéket a dokumentumkulcshoz. Az előre elkészített adatok egy vagy több vektormezőbe vannak betöltve, amelyek együtt létezhetnek más alfanumerikus tartalmakat tartalmazó mezőkkel.
Dokumentumok – Index használata vektor- és nem adatmegjelenítési adatok indexbe való betöltéséhez. Az indexelés leküldéses API-i minden stabil és előzetes verzióban azonosak. A dokumentumok betöltéséhez használja az alábbi API-k bármelyikét:
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"
}
. . .
]
}
Az összes újabb előzetes kiadás lekéréses API-kat (indexelőket és képességkészleteket) használ az integrált vektorizáláshoz az indexelés és a lekérdezési idő során.
Az indexelők lekérhetik és indexelhetik a vektormezőket a forrásdokumentumokban, feltéve, hogy egy olyan indexséma felel meg a vektormezők követelményeinek és az előzetes REST API-nak. Az adatforrások az adatforrás által támogatott formátumtól függetlenül biztosítják a vektorokat (például a JSON-sztringeket). Az indexelő feltételezi, hogy a beírt Collection(Edm.Single) mezők vektorokat tartalmaznak, és vektorindexekként indexelik a tartalmat.
Nincs változás a mezőleképezés viselkedésében vagy a vektorok változásészlelésében. A szövegindexelés viselkedése a vektorokra is vonatkozik.
Ha a vektoradatok fájlokban találhatók, javasoljuk, hogy egy nem megfelelő parsingMode , például json, jsonLinesvagy csv az adatok alakja alapján.
Az Azure SQL nem biztosít módot a gyűjtemények natív tárolására egyetlen SQL-oszlopként. Egy megkerülő megoldás jelenleg nem azonosítható.
Az adatforrás összes vektorának dimenziójának azonosnak kell lennie, és meg kell egyeznie a megfeleltetett mező indexdefiníciójának. Az indexelő hibát jelez minden olyan dokumentumon, amely nem egyezik.
A képességek és vektorizálók beágyazások létrehozására szolgálnak. Az indexelés során történő vektorizáláshoz válasszon a következő képességek közül:
Érvényesítési célokból lekérdezheti az indexet a Search Explorer használatával az Azure Portalon vagy egy REST API-hívással. Mivel az Azure AI Search nem tud vektorokat emberi olvasásra alkalmas szöveggé alakítani, próbáljon meg ugyanabból a dokumentumból olyan mezőket visszaadni, amelyek bizonyítják az egyezést. Ha például a vektoros lekérdezés a "titleVector" mezőt célozza meg, a keresési eredményekhez kiválaszthatja a "cím" lehetőséget.
A mezőket "lekérdezhetőként" kell hozzárendelni az eredményekhez.
Használja az alapértelmezett Lekérdezés nézetet annak gyors megerősítéséhez, hogy az index vektorokat tartalmaz. A lekérdezési nézet teljes szöveges keresésre használható. Bár nem használhatja vektoros lekérdezésekhez, üres keresést (search=*) küldhet a tartalom kereséséhez. A program az összes mező tartalmát, beleértve a vektormezőket is, egyszerű szövegként adja vissza.
A következő REST API-példa egy vektoros lekérdezés, de csak a nem megadó mezőket adja vissza (cím, tartalom, kategória). A keresési eredményekben csak a "beolvashatóként" megjelölt mezők adhatók vissza.
Vektortároló frissítéséhez módosítsa a sémát, és szükség esetén töltse be újra a dokumentumokat az új mezők feltöltéséhez. A sémafrissítésekhez használható API-k közé tartozik a Create or Update Index (REST), a CreateOrUpdateIndex az Azure SDK for .NET-ben, create_or_update_index az Azure SDK for Pythonban, és hasonló módszerek más Azure SDK-kban.
Az indexek frissítésére vonatkozó általános útmutatót a Drop és az index újraépítése ismerteti.
A legfontosabb pontok a következők:
A meglévő mezők frissítéséhez és törléséhez gyakran szükség van az elvetésére és újraépítésére.
A meglévő sémákat azonban az alábbi módosításokkal frissítheti, és nincs szükség újraépítésre:
Új mezők hozzáadása egy mezőcsoporthoz.
Adjon hozzá új vektorkonfigurációkat, amelyek új mezőkhöz vannak rendelve, de a már vektorizált mezőket nem.
Módosítsa a "beolvasható" értéket (az értékek igaz vagy hamisak) egy meglévő mezőben. A vektormezőknek kereshetőnek és lekérdezhetőnek kell lenniük, de ha olyan helyzetekben szeretné letiltani a vektormezőkhöz való hozzáférést, ahol az elvetés és az újraépítés nem lehetséges, akkor a beolvasható értéket hamis értékre állíthatja.
Az azure-search-vector adattárban található kódminták a sémadefiníciót, vektorizálást, indexelést és lekérdezéseket tartalmazó, végpontok közötti munkafolyamatokat mutatják be.
A Python, a C# és a JavaScript demókódja is létezik.