Megosztás a következőn keresztül:


Vektorindex létrehozása

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ó és tömörítő 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 és opcionális tömörítéssel
  • Vektormező-definíció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 használata adattömbözéshez és kódoláshoz az indexelés során

Ez a cikk ismerteti a munkafolyamatot, és REST-et használ az ábrához. Miután megismerte az alapszintű munkafolyamatot, 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 meg az integrált adattömb-készítést és vektorizálást.

Előfeltételek

  • Azure AI Search, bármely régióban és bármilyen szinten. A 2019. január előtt létrehozott szolgáltatásokban van egy kis részhalmaz, amely nem tud vektorindexet létrehozni. Ha ez Vonatkozik Önre, hozzon létre egy új szolgáltatást a vektorok használatához. Az integrált vektorizálást (az Azure AI-t meghívó képességkészleteket) tartalmazó számítási feladatok indexeléséhez az Azure AI Searchnek ugyanabban a régióban kell lennie, mint az Azure OpenAI vagy az Azure AI-szolgáltatások.

  • Az indexbe való feltöltéshez már meglévő vektorbeágyazással kell rendelkeznie, vagy használhat integrált vektorizálást, ahol a beágyazási modelleket egy indexelő folyamat egy képességkészletéből hívhatja meg.

  • Ismernie kell a beágyazások létrehozásához használt modell méretkorlátját, hogy ezt a korlátot hozzárendelhesse a vektormezőhöz. Az integrált vektorizálás véges számú beágyazási modellt támogat. A text-embedding-ada-002 esetében a dimenziók 1536-nál vannak rögzítve. A 3-kicsi vagy a 3-nagy méretű szövegbeágyazáshoz a vektor hossza 1 és 1536, illetve 3072 lehet.

  • Azt is tudnia kell, hogy milyen hasonlósági metrikát használjon. Az Azure OpenAI-beli modellek beágyazásához a hasonlóság kiszámítása a következővel cosinetörténik: .

  • 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:

  1. 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.

  2. Adjon meg vektoradatokat (egy pontosságú lebegőpontos számok tömbje) a forrásmezőkben.

    A vektormezők egy olyan tömböt tartalmaznak, amelyet modellek beágyazásával hoznak létre, egy beágyazással mezőnként, ahol a mező legfelső szintű mező (nem beágyazott vagy összetett típus része). A legegyszerűbb integrációhoz az Azure OpenAI-ban ajánlott beágyazási modelleket használni, például szöveges dokumentumok szövegbeágyazási-3-as modelljét vagy képekhez készült Képlekérés REST API-t.

    Ha függőséget tud vállalni az indexelők és a képességkészletek között, fontolja meg az integrált vektorizálást, amely képeket és szöveges tartalmakat kódol az indexelés során. A meződefiníciók vektormezőkhöz tartoznak, de a bejövő forrásadatok lehetnek szövegek vagy képek, amelyeket az indexelés során vektortömbökké konvertálnak.

  3. Adjon meg más mezőket emberileg olvasható tartalommal 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.

A vektor- és nemvektormezőket tartalmazó dokumentumok hasznos adatainak rövid példája a jelen cikk terhelésvektor-adatszakaszában található.

Vektorkeresési konfiguráció hozzáadása

A vektorkonfiguráció az indexelés során használt paramétereket adja meg a "legközelebbi szomszéd" információ létrehozásához a vektorcsomópontok között:

  • Hierarchikus navigálható kisvilág (HNSW)
  • Teljes KNN

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.

A vektorkonfiguráció opcionálisan kvantálási módszereket is meghatároz a vektorméret csökkentésére:

  • Skaláris
  • Bináris (csak 2024-07-01-ben és újabb Azure SDK-csomagokban érhető el)

A legújabb verzióra való migrálásra vonatkozó utasításokért tekintse meg a REST API frissítése című témakört.

2024-07-01 általánosan elérhető. Támogatja a következő vektorkonfigurációt:

  • vectorSearch.algorithms támogatja a HNSW-t és a teljes KNN-t.
  • vectorSearch.compressions támogatja a skaláris és bináris kvantálást, a túlméretezést és az eredeti vektorokkal való újraszámítást.
  • vectorSearch.profiles az algoritmusok és a tömörítési konfigurációk több kombinációját is biztosítják.

Ügyeljen arra, hogy legyen stratégiája a tartalom vektorizálására. A beépített kódoláshoz integrált vektorizálást és lekérdezési idő vektorizálókat javasoljuk.

  1. Az index létrehozásához használja az Index létrehozása vagy frissítése API-t.

  2. Adjon hozzá egy szakaszt vectorSearch az indexben, amely meghatározza a beágyazási terület létrehozásához használt keresési algoritmusokat.

     "vectorSearch": {
         "compressions": [
             {
                 "name": "scalar-quantization",
                 "kind": "scalarQuantization",
                 "rerankWithOriginalVectors": true,
                 "defaultOversampling": 10.0,
                     "scalarQuantizationParameters": {
                         "quantizedDataType": "int8"
                     }
             },
             {
                 "name": "binary-quantization",
                 "kind": "binaryQuantization",
                 "rerankWithOriginalVectors": true,
                 "defaultOversampling": 10.0,
             }
         ],
         "algorithms": [
             {
                 "name": "hnsw-1",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 4,
                     "efConstruction": 400,
                     "efSearch": 500,
                     "metric": "cosine"
                 }
             },
             {
                 "name": "hnsw-2",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 8,
                     "efConstruction": 800,
                     "efSearch": 800,
                     "metric": "hamming"
                 }
             },
             {
                 "name": "eknn",
                 "kind": "exhaustiveKnn",
                 "exhaustiveKnnParameters": {
                     "metric": "euclidean"
                 }
             }
    
         ],
         "profiles": [
           {
             "name": "vector-profile-hnsw-scalar",
             "compression": "scalar-quantization",
             "algorithm": "hnsw-1"
           }
         ]
     }
    

    Főbb pontok:

    • A tömörítés, az algoritmus és a profil egyes konfigurációinak neveinek egyedinek kell lenniük az indexen belüli típusukhoz.

    • vectorSearch.compressions.kind lehet vagy scalarQuantizationbinaryQuantization.

    • vectorSearch.compressions.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).

    • vectorSearch.compressions.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.

    • vectorSearch.compressions.scalarQuantizationParameters.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.

    • vectorSearch.algorithms.kind "hnsw" "exhaustiveKnn"vagy . Ezek a közelítő legközelebbi szomszédok (ANN) algoritmusok, amelyek a vektortartalmak indexelés közbeni rendszerezésére szolgálnak.

    • vectorSearch.algorithms.m a kétirányú kapcsolat száma. Az alapértelmezett érték 4. A tartomány 4 és 10 között van. Az alacsonyabb értékek kevesebb zajt adnak vissza az eredményekben.

    • vectorSearch.algorithms.efConstruction az indexelés során használt legközelebbi szomszédok száma. Az alapértelmezett érték 400. A tartomány 100 és 1000 között van.

    • "vectorSearch.algorithms.fSearch a keresés során használt legközelebbi szomszédok száma. Az alapértelmezett érték 500. A tartomány 100 és 1000 között van.

    • vectorSearch.algorithms.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 cosine, dotProducteuclidean, hamming (bináris adatok indexelésére használatosak).

    • vectorSearch.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. Ez a tömörítési és algoritmuskonfigurációk kombinációja. Ez az a tulajdonság, amelyet egy vektormezőhöz rendel, és meghatározza a mezők algoritmusát és tömörítését.

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.

A vektormezőket az adattípusuk, a dimensions vektorok kimenetéhez használt beágyazási modellen alapuló tulajdonság és egy vektorprofil jellemzi.

2024-07-01 általánosan elérhető.

  1. Az index létrehozásához használja az Index létrehozása vagy frissítése parancsot .

  2. 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:

    • typevektoros adattípusoknak kell lenniük. Collection(Edm.Single) A modellek beágyazásához leggyakrabban használt.
    • dimensions a beágyazási modell által létrehozott dimenziók száma. A text-embedding-ada-002 esetében az 1536-os helyre van javítva. A text-embedding-3 modellsorozathoz több értéktartomány is rendelkezésre áll. Ha integrált vektorizálást és beágyazási képességet használ vektorok létrehozásához, győződjön meg arról, hogy ez a tulajdonság a beágyazási képesség által használt dimenzióértékre van állítva.
    • 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.
    • stored lehet igaz vagy hamis. Meghatározza, hogy a vektorok egy további másolatát tárolja-e a rendszer a lekéréshez. További információ: Vektorméret csökkentése.
    • filterable, facetablehamisnak sortable kell lennie.
  3. Ha előszűrést vagy utószűrést szeretne meghívni a vektoros lekérdezésen, szűrhető, nem megadó mezőket adhat hozzá a gyűjteményhez, például a "cím" értéket igaz értékre filterable állítva.

  4. 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").

    Az alábbi példa a mezők gyűjteményét mutatja be:

    PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2024-07-01&allowIndexDowntime=true
    Content-Type: application/json
    api-key: {{admin-api-key}}
    {
        "name": "{{index-name}}",
        "fields": [
            {
                "name": "id",
                "type": "Edm.String",
                "key": true,
                "filterable": true
            },
            {
                "name": "title",
                "type": "Edm.String",
                "searchable": true,
                "filterable": true,
                "sortable": true,
                "retrievable": true
            },
            {
                "name": "titleVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "stored": true,
                "dimensions": 1536,
                "vectorSearchProfile": "vector-profile-1"
            },
            {
                "name": "content",
                "type": "Edm.String",
                "searchable": true,
                "retrievable": true
            },
            {
                "name": "contentVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": false,
                "stored": false,
                "dimensions": 1536,
                "vectorSearchProfile": "vector-profile-1"
            }
        ],
        "vectorSearch": {
            "algorithms": [
                {
                    "name": "hnsw-1",
                    "kind": "hnsw",
                    "hnswParameters": {
                        "m": 4,
                        "efConstruction": 400,
                        "efSearch": 500,
                        "metric": "cosine"
                    }
                }
            ],
            "profiles": [
                {
                    "name": "vector-profile-1",
                    "algorithm": "hnsw-1"
                }
            ]
        }
    }
    

Vektoradatok betöltése indexeléshez

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, nem adatmegjelenítő tartalmakat tartalmazó mezőkkel.

Az adatbetöltéshez leküldéses vagy lekéréses módszereket is használhat.

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=2024-07-01

{
    "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"
        }
        . . .
    ]
}

Vektortartalom ellenőrzése az indexben

Érvényesítési célból lekérdezheti az indexet a Search Explorerrel 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.

  • Tekintse át a keresési felügyeleti>indexek indexeitaz indexek teljes méretének és a vektorindex méretének megtekintéséhez. A pozitív vektorindex-méret azt jelzi, hogy a vektorok jelen vannak.

  • Index lekérdezése a Search Explorerrel. A Search Explorernek két nézete van: Lekérdezés nézet (alapértelmezett) és JSON nézet.

    • Lekérdezési beállítások megadása >Vektorértékek elrejtése a keresési eredményekben olvashatóbb eredmények érdekében.

    • Használja a JSON nézetet vektoros lekérdezésekhez. Beillesztheti a végrehajtani kívánt vektoros lekérdezés JSON-definícióját, vagy használhatja a beépített szöveg-vektor vagy kép-vektor konverziót, ha az index vektorizáló-hozzárendeléssel rendelkezik. A képkereséssel kapcsolatos további információkért tekintse meg a Gyorsútmutatót: Képek keresése a Kereséskezelőben.

    • 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.

    • További részletekért lásd : Vektoros lekérdezés létrehozása.

Vektortároló frissítése

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 index frissítésével vagy újraépítésével kapcsolatos általános útmutató az indexek frissítésével vagy újraépítésével foglalkozik.

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.

Következő lépések

Következő lépésként javasoljuk, hogy lekérdezési vektoradatokat adjon meg egy keresési indexben.

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.