Vektoros tárolás az Azure AI Searchben
Az Azure AI Search vektoros tárolást és konfigurációkat biztosít a vektorkereséshez és a hibrid kereséshez. A támogatás a mezőszinten van megvalósítva, ami azt jelenti, hogy a vektor és a nem avektor mezőket kombinálhatja ugyanabban a keresési korpuszban.
A vektorok keresési indexben vannak tárolva. A vektortároló létrehozásához használja az Index létrehozása REST API-t vagy egy ezzel egyenértékű Azure SDK-metódust.
A vektoros tárolással kapcsolatos szempontok a következők:
- Tervezzen meg egy sémát, amely a kívánt vektorlekérési minta alapján illeszkedik a használati esethez.
- Az index méretének becslése és a keresési szolgáltatás kapacitásának ellenőrzése.
- Vektortároló kezelése
- Vektortároló védelme
Vektorlekérési minták
Az Azure AI Searchben két minta használható a keresési eredményekre.
Generatív keresés. A nyelvi modellek az Azure AI Search adataival választ alkotnak a felhasználó lekérdezésére. Ez a minta tartalmaz egy vezénylési réteget a parancssorok koordinálásához és a környezet fenntartásához. Ebben a mintában a keresési eredményeket a rendszer parancssori folyamatokba alakítja, amelyeket olyan csevegőmodellek fogadnak, mint a GPT és a Text-Davinci. Ez a megközelítés a retrieveal augmented generation (RAG) architektúrán alapul, ahol a keresési index biztosítja az alapadatokat.
Klasszikus keresés keresősáv, lekérdezési beviteli sztring és renderelt eredmények használatával. A keresőmotor elfogadja és végrehajtja a vektoros lekérdezést, megfogalmaz egy választ, és ezeket az eredményeket egy ügyfélalkalmazásban jeleníti meg. Az Azure AI Searchben az eredmények egy lapított sorkészletben jelennek meg, és kiválaszthatja, hogy mely mezők tartalmazzák a keresési eredményeket. Mivel nincs csevegőmodell, a vektortárolót (keresési indexet) várhatóan olyan, emberi tartalommal nem rendelkező tartalommal tölti fel, amely olvasható a válaszában. Bár a keresőmotor egyezik a vektorokkal, a találatok feltöltéséhez használjon nem adatfeltáró értékeket. A vektoros lekérdezések és a hibrid lekérdezések a klasszikus keresési forgatókönyvekhez kialakítható lekérdezési kérelmek típusait fedik le.
Az indexsémának tükröznie kell az elsődleges használati esetet. A következő szakasz a generatív AI-hoz vagy klasszikus kereséshez készült megoldások mezőösszetételének különbségeit mutatja be.
Vektortároló sémája
A vektortároló indexsémájához névre, kulcsmezőre (sztringre), egy vagy több vektormezőre és vektorkonfigurációra van szükség. A nem adatmegjelenítő mezők használata ajánlott hibrid lekérdezésekhez vagy olyan, szó szerint olvasható tartalom visszaadásához, amelyeknek nem kell egy nyelvi modellen keresztül haladnia. A vektorkonfigurációval kapcsolatos utasításokért lásd : Vektortároló létrehozása.
Alapszintű vektormező-konfiguráció
A vektormezőket az adattípusuk és a vektorspecifikus tulajdonságaik különböztetik meg. Így néz ki egy vektormező egy mezőgyűjteményben:
{
"name": "content_vector",
"type": "Collection(Edm.Single)",
"searchable": true,
"retrievable": true,
"dimensions": 1536,
"vectorSearchProfile": "my-vector-profile"
}
A vektormezők konkrét adattípusokkal rendelkeznek.
Collection(Edm.Single)
Jelenleg ez a leggyakoribb, de a szűk adattípusok használata menthető a tárterületen.
A vektormezőknek kereshetőnek és lekérdezhetőnek kell lenniük, de nem lehetnek szűrhetőek, facetablek vagy rendezhetőek, és nem rendelkezhetnek elemzőkkel, normalizálókkal vagy szinonimaleképezés-hozzárendelésekkel.
A vektormezőknek a beágyazási modell által létrehozott beágyazások számát kell dimensions
beállítaniuk. A text-embedding-ada-002 például 1536 beágyazást generál minden egyes szövegtömbhöz.
A vektormezők egy vektorkeresési profil által jelzett algoritmusokkal indexelhetők, amelyek az index más részén vannak definiálva, így nem jelennek meg a példában. További információkért lásd a vektorkeresés konfigurációját.
Mezők gyűjteménye alapvektor-számítási feladatokhoz
A vektortárolókban a vektormezők mellett további mezőkre is szükség van. Egy kulcsmező"id"
(ebben a példában) például indexkövetelmény.
"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 }
]
Más mezők, például a "content"
mező, a mező emberi olvasható megfelelője "content_vector"
. Ha kizárólag a válaszkészítéshez használ nyelvi modelleket, kihagyhatja a nem meg nem küldött tartalommezőket, de a keresési eredményeket közvetlenül az ügyfélalkalmazásoknak leküldő megoldásoknak nem megfelelő tartalommal kell rendelkezniük.
A metaadatmezők hasznosak a szűrőkhöz, különösen akkor, ha a metaadatok tartalmazzák a forrásdokumentum forrásadatait. A vektormezőkre közvetlenül nem lehet szűrni, de előreszűrési vagy postfilter módokat állíthat be a vektoros lekérdezés végrehajtása előtti vagy utáni szűréshez.
Az Adatok importálása és vektorizálása varázsló által létrehozott séma
Az adatok importálása és vektorizálása varázslót javasoljuk a kiértékeléshez és a megvalósíthatósági vizsgálathoz. A varázsló ebben a szakaszban hozza létre a példasémát.
A séma elfogultsága az, hogy a keresési dokumentumok adattömbök köré épülnek. Ha egy nyelvi modell a RAG-alkalmazásokhoz megszokott módon fogalmazza meg a választ, egy adattömbök köré tervezett sémát szeretne.
Az adattömbök a nyelvi modellek bemeneti korlátain belül maradnak, de a hasonlósági keresés pontosságát is javítja, ha a lekérdezések összehasonlíthatók több szülődokumentumból lekért tartalom kisebb darabjaival. Végül, ha szemantikai rangsorolót használ, a szemantikai rangsoroló tokenkorlátokkal is rendelkezik, amelyek könnyebben teljesülnek, ha az adattömb-készítés része a megközelítésnek.
Az alábbi példában minden keresési dokumentumhoz egy adattömb-azonosító, adattömb, cím és vektormező tartozik. A tömbazonosítót és a szülőazonosítót a varázsló tölti ki a blob metaadatainak (elérési útja) 64-es alapkódolásával. Az adattömb és a cím blobtartalomból és blobnévből származik. Csak a vektormező jön létre teljes mértékben. Ez az adattömb mező vektorizált verziója. A beágyazások egy Ön által megadott Azure OpenAI-beágyazási modell meghívásával jönnek létre.
"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- és csevegőstílusú alkalmazások sémája
Ha tárolót tervez a generatív kereséshez, külön indexeket hozhat létre az indexelt és vektorizált statikus tartalomhoz, valamint egy második indexet a parancssori folyamatokban használható beszélgetésekhez. A következő indexek a csevegő-with-your-data-solution-accelerator gyorsítóból jönnek létre.
A generatív keresési élményt támogató csevegőindex mezői:
"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 }
]
A beszélgetési index azon mezői, amelyek támogatják a vezénylést és a csevegési előzményeket:
"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 }
]
Az alábbi képernyőképen a keresési eredmények láthatók a Kereséskezelőben a beszélgetések indexében. A keresési pontszám 1,00, mert a keresés nem volt minősített. Figyelje meg azokat a mezőket, amelyek támogatják a vezénylést és a folyamatokat. A beszélgetés azonosítója azonosít egy adott csevegést.
"type"
jelzi, hogy a tartalom a felhasználótól vagy az asszisztenstől származik-e. A dátumok az előzményekből származó csevegések korosulására szolgálnak.
Fizikai struktúra és méret
Az Azure AI Searchben az index fizikai szerkezete nagyrészt belső megvalósítás. Hozzáférhet a sémához, betöltheti és lekérdezheti a tartalmát, monitorozhatja a méretét és kezelheti a kapacitást, de a fürtöket (invertált és vektorindexek) és más fájlokat és mappákat a Microsoft belsőleg kezeli.
Az index méretét és tartalmát a következő határozza meg:
- Dokumentumok mennyisége és összetétele
- Attribútumok az egyes mezőkön. A szűrhető mezőkhöz például több tárhelyre van szükség.
- Indexkonfiguráció, beleértve a vektorkonfigurációt is, amely meghatározza a belső navigációs struktúrák létrehozásának módját attól függően, hogy a HNSW-t vagy a teljes KNN-t választja-e a hasonlóság kereséséhez.
Az Azure AI Search korlátozza a vektoros tárolást, ami segít fenntartani a kiegyensúlyozott és stabil rendszert minden számítási feladathoz. Annak érdekében, hogy a korlátok alatt maradjon, a vektorhasználatot az Azure Portalon külön követi nyomon és jelenti, valamint programozott módon, szolgáltatás- és indexstatisztikákon keresztül.
Az alábbi képernyőképen egy egy partícióval és egy replikával konfigurált S1 szolgáltatás látható. Ez az adott szolgáltatás 24 kis indexet tartalmaz, átlagosan egy vektormezővel, mindegyik mező 1536 beágyazásból áll. A második csempe a vektorindexek kvótáit és használatát mutatja. A vektorindex az egyes vektormezőkhöz létrehozott belső adatstruktúra. Ezért a vektorindexek tárolása mindig az index által használt tárterület töredéke. Más nem adatmegjelenítő mezők és adatstruktúrák a többit is felhasználják.
A vektorindexek korlátait és becsléseit egy másik cikk ismerteti, de két szempont, amelyet érdemes kiemelni, az, hogy a maximális tárterület szolgáltatási szinttől és a keresési szolgáltatás létrehozásának időpontjától függően változik. Az újabb azonos szintű szolgáltatások jelentősen nagyobb kapacitással rendelkeznek a vektorindexekhez. Ezen okokból hajtsa végre a következő műveleteket:
Ellenőrizze a keresési szolgáltatás üzembehelyezési dátumát. Ha 2024. április 3. előtt hozták létre, fontolja meg egy új keresési szolgáltatás létrehozását a nagyobb kapacitás érdekében.
Válasszon skálázható szintet , ha a vektoros tárolás követelményeinek ingadozása várható. Az alapszintű szint egy partíción van javítva a régebbi keresési szolgáltatásokban. Fontolja meg a Standard 1 (S1) és újabb verziót a nagyobb rugalmasság és gyorsabb teljesítmény érdekében, vagy hozzon létre egy új keresési szolgáltatást, amely magasabb korlátokat és több partíciót használ minden nillable szinten.
Alapműveletek és interakciók
Ez a szakasz bemutatja a vektor futásidejű műveleteit, beleértve az egyetlen indexhez való csatlakozást és biztonságossá tételt.
Feljegyzés
Az indexek kezelésekor vegye figyelembe, hogy az indexek áthelyezéséhez vagy másolásához nincs portál- vagy API-támogatás. Ehelyett az ügyfelek általában egy másik keresési szolgáltatásra irányítják az alkalmazás üzembehelyezési megoldását (ha ugyanazt az indexnevet használják), vagy módosítsa a nevet úgy, hogy másolatot készítsen az aktuális keresési szolgáltatásról, majd hozza létre.
Folyamatosan elérhető
Az index azonnal elérhető a lekérdezésekhez az első dokumentum indexelése után, de nem lesz teljes mértékben működőképes, amíg az összes dokumentum indexel. A rendszer belsőleg elosztja az indexet a partíciók között, és replikákon hajtja végre. A fizikai index belsőleg van kezelve. A logikai indexet Ön kezeli.
Az indexek folyamatosan elérhetők, és nem tudják szüneteltetni vagy offline állapotba helyezni. Mivel folyamatos működésre lett tervezve, a tartalom bármilyen frissítése vagy maga az index hozzáadása valós időben történik. Emiatt előfordulhat, hogy a lekérdezések ideiglenesen hiányos eredményeket adnak vissza, ha egy kérés egybeesik egy dokumentumfrissítéssel.
Figyelje meg, hogy a lekérdezés folytonossága létezik a dokumentumműveletek (frissítés vagy törlés) és az aktuális index meglévő szerkezetét és integritását nem befolyásoló módosítások (például új mezők hozzáadása) esetében. Ha szerkezeti frissítéseket kell végeznie (meglévő mezőket kell módosítania), ezeket általában egy legördülő és újraépítési munkafolyamattal kezelik egy fejlesztési környezetben, vagy az index új verziójának létrehozásával az éles szolgáltatásban.
Az indexek újraépítésének elkerülése érdekében egyes kis módosításokat végző ügyfelek úgy döntenek, hogy egy mező "verziószámát" választják úgy, hogy létrehoznak egy újat, amely egy korábbi verzióval együtt létezik. Idővel ez elavult mezők vagy elavult egyéni elemződefiníciók formájában árva tartalomhoz vezet, különösen egy olyan éles indexben, amely költséges replikálni. Ezeket a problémákat az index tervezett frissítéseivel az index életciklus-kezelésének részeként kezelheti.
Végpontkapcsolat
Minden vektorindexelés és lekérdezéskérés egy indexet céloz meg. A végpontok általában a következők egyike:
Végpont | Kapcsolat- és hozzáférés-vezérlés |
---|---|
<your-service>.search.windows.net/indexes |
Az indexek gyűjteményét célozza meg. Index létrehozása, listázása vagy törlésekor használatos. Ezekhez a műveletekhez rendszergazdai jogosultságok szükségesek, amelyek rendszergazdai API-kulcsokkal vagy keresési közreműködői szerepkörrel érhetők el. |
<your-service>.search.windows.net/indexes/<your-index>/docs |
Egyetlen index dokumentumgyűjteményét célozza meg. Index vagy adatfrissítés lekérdezésekor használatos. A lekérdezésekhez az olvasási jogosultságok elegendőek, és lekérdezési API-kulcsokkal vagy adatolvasó szerepkörrel érhetők el. Az adatfrissítéshez rendszergazdai jogosultságokra van szükség. |
Csatlakozás az Azure AI Search szolgáltatáshoz
Győződjön meg arról, hogy rendelkezik engedélyekkel vagy API-hozzáférési kulccsal. Ha nem kérdez le egy meglévő indexet, rendszergazdai jogosultságokra vagy közreműködői szerepkör-hozzárendelésre van szüksége a tartalom keresési szolgáltatásban való kezeléséhez és megtekintéséhez.
Kezdje az Azure Portallal. A keresőszolgáltatást létrehozó személy megtekintheti és kezelheti a keresési szolgáltatást, beleértve a hozzáférés-vezérlési (IAM) oldalon keresztül másoknak való hozzáférést is.
Lépjen át más ügyfelekre a programozott hozzáférés érdekében. Az első lépésekhez javasoljuk a rövid útmutatókat és a mintákat:
Vektoradatokhoz való biztonságos hozzáférés
Az Azure AI Search adattitkosítást, privát kapcsolatokat valósít meg az internet nélküli forgatókönyvekhez, valamint szerepkör-hozzárendeléseket a Microsoft Entra ID-n keresztüli biztonságos hozzáférés érdekében. A nagyvállalati biztonsági funkciók teljes körét az Azure AI Search Biztonság területén ismertetjük.
Vektortárolók kezelése
Az Azure egy monitorozási platformot biztosít, amely magában foglalja a diagnosztikai naplózást és a riasztásokat. Az alábbi ajánlott eljárásokat javasoljuk:
- Diagnosztikai naplózás engedélyezése
- Riasztások beállítása
- Lekérdezési és indexelési teljesítmény elemzése