Selvstudium: Brug et eventhouse som en vektordatabase

I dette selvstudium lærer du, hvordan du bruger et Eventhouse som en vektordatabase til at gemme og forespørge vektordata i realtidsintelligens. Du kan finde generelle oplysninger om vektordatabaser under Vektordatabaser.

Det givne scenarie omfatter brug af semantiske søgninger på Wikipedia-sider for at finde sider med almindelige temaer. Du bruger et tilgængeligt eksempeldatasæt, som omfatter vektorer for titusinder af Wikipedia-sider. Disse sider blev integreret med en OpenAI-model for at producere vektorer for hver side. Vektorerne gemmes derefter i et Eventhouse sammen med nogle relevante metadata, der er relateret til siden. Du kan bruge dette datasæt til at finde sider, der ligner hinanden, eller til at finde sider, der ligner et tema, du vil finde. Lad os f.eks. sige, at du vil søge efter "berømte kvindelige forskere fra det 19. århundrede". Du koder dette udtryk ved hjælp af den samme OpenAI-model og kører derefter en vektorlighedssøgning over de gemte Wikipedia-sidedata for at finde siderne med den højeste semantiske lighed.

I dette selvstudium skal du især:

  • Forbered en tabel i Eventhouse med Vector16 kodning for vektorkolonnerne.
  • Gem vektordata fra et forudintegreret datasæt til et Eventhouse.
  • Integrer en forespørgsel på naturligt sprog ved hjælp af Open AI-modellen.
  • Brug funktionen series_cosine_similarity KQL til at beregne lighederne mellem forespørgslens integreringsvektor og ligheder på wikisiderne.
  • Få vist rækker med den højeste lighed for at få de wikisider, der er mest relevante for din søgeforespørgsel.

Dette flow kan visualiseres på følgende måde:

Skematisk for Eventhouse som en vektordatabasearbejdsproces.

Forudsætninger

  • Et arbejdsområde med en Microsoft Fabric-aktiveret kapacitet
  • Et eventhouse i dit arbejdsområde
  • Et ai-embeddings-plugin aktiveret i dit eventhus
  • En Azure OpenAI-ressource med modellen text-embedding-ada-002 (version 2) installeret. Denne model er i øjeblikket kun tilgængelig i visse områder. Du kan få flere oplysninger under Opret en ressource.
  • Download eksempelnotesbogen fra GitHub-lageret

Bemærk

Selvom dette selvstudium bruger Azure OpenAI, kan du bruge en hvilken som helst udbyder af integreringsmodel til at generere vektorer til tekstdata.

Forbered dit Eventhouse-miljø

I dette konfigurationstrin skal du oprette en tabel i et Eventhouse med de nødvendige kolonner og kodningspolitikker til lagring af vektordataene.

  1. Gå til startsiden for dit arbejdsområde i realtidsintelligens.

  2. Vælg det eventhouse, du har oprettet i forudsætningerne.

  3. Vælg den destinationsdatabase, hvor du vil gemme vektordataene. Hvis du ikke har en database, kan du oprette en ved at vælge Tilføj database.

  4. Vælg Udforsk mine data. Kopiér/indsæt følgende KQL-forespørgsel for at oprette en tabel med de nødvendige kolonner:

    .create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)
    
  5. Kopiér/indsæt følgende kommandoer for at angive kodningspolitikken for vektorkolonnerne. Kør disse kommandoer sekventielt.

    .alter column Wiki.title_vector policy encoding type='Vector16'
    
    .alter column Wiki.content_vector policy encoding type='Vector16'
    

Skriv vektordata til et eventhouse

Følgende trin bruges til at importere de integrerede Wikipedia-data og skrive dem i et Eventhouse:

Importér notesbog

  1. Download eksempelnotesbogen fra GitHub-lageret.
  2. Gå til dit Fabric-miljø. I oplevelsesskifteren skal du vælge Fabric og derefter dit arbejdsområde.
  3. Vælg Importér>notesbog>Upload, og vælg derefter den notesbog, du downloadede i et forrige trin.
  4. Når importen er fuldført, skal du åbne den importerede notesbog fra dit arbejdsområde.

Skriv data til Eventhouse

  1. Kør cellerne for at konfigurere dit miljø.

    %%configure -f
    {"conf":
        {
            "spark.rpc.message.maxSize": "1024"
        }
    }
    
    %pip install wget
    
    %pip install openai
    
  2. Kør cellerne for at downloade de forudkomputerede integreringer.

    import wget
    
    embeddings_url = "https://cdn.openai.com/API/examples/data/vector_database_wikipedia_articles_embedded.zip"
    
    # The file is ~700 MB so it might take some time
    wget.download(embeddings_url)
    
    import zipfile
    
    with zipfile.ZipFile("vector_database_wikipedia_articles_embedded.zip","r") as zip_ref:
        zip_ref.extractall("/lakehouse/default/Files/data")
    
    import pandas as pd
    
    from ast import literal_eval
    
    article_df = pd.read_csv('/lakehouse/default/Files/data/vector_database_wikipedia_articles_embedded.csv')
    # Read vectors from strings back into a list
    article_df["title_vector"] = article_df.title_vector.apply(literal_eval)
    article_df["content_vector"] = article_df.content_vector.apply(literal_eval)
    article_df.head()
    
  3. Hvis du vil skrive til hændelseshuset, skal du angive din klynge-URI, som du kan finde på siden med systemoversigten, og navnet på databasen. Tabellen oprettes i notesbogen og refereres senere til i forespørgslen.

    # replace with your Eventhouse Cluster URI, Database name, and Table name
    KUSTO_CLUSTER =  "Eventhouse Cluster URI"
    KUSTO_DATABASE = "Database name"
    KUSTO_TABLE = "Wiki"
    
  4. Kør de resterende celler for at skrive dataene til Eventhouse. Denne handling kan tage noget tid at udføre.

    kustoOptions = {"kustoCluster": KUSTO_CLUSTER, "kustoDatabase" :KUSTO_DATABASE, "kustoTable" : KUSTO_TABLE }
    
    access_token=mssparkutils.credentials.getToken(kustoOptions["kustoCluster"])
    
    #Pandas data frame to spark dataframe
    sparkDF=spark.createDataFrame(article_df)
    
    # Write data to a table in Eventhouse
    sparkDF.write. \
    format("com.microsoft.kusto.spark.synapse.datasource"). \
    option("kustoCluster",kustoOptions["kustoCluster"]). \
    option("kustoDatabase",kustoOptions["kustoDatabase"]). \
    option("kustoTable", kustoOptions["kustoTable"]). \
    option("accessToken", access_token). \
    option("tableCreateOptions", "CreateIfNotExist").\
    mode("Append"). \
    save()
    

Få vist dataene i Eventhouse

På dette tidspunkt kan du bekræfte, at dataene er skrevet til hændelseshuset, ved at gå til siden med databaseoplysninger.

  1. Gå til startsiden for dit arbejdsområde i realtidsintelligens.
  2. Vælg det databaseelement, der blev angivet i det forrige afsnit. Du bør kunne se en oversigt over de data, der er skrevet til tabellen "Wiki".

Generér integrering for søgeordet

Nu, hvor du har gemt de integrerede wikidata i dit eventhouse, kan du bruge disse data som en reference til at finde sider i en bestemt artikel. Hvis du vil foretage sammenligningen, skal du integrere søgeordet og derefter foretage en sammenligning mellem søgeordet og Wikipedia-siderne.

Hvis du vil kalde Azure OpenAI-integrerings-API, skal du have et slutpunkt.

Variabelt navn Værdi
slutpunkt Denne værdi findes i afsnittet Nøgler og slutpunkt, når du undersøger din ressource fra Azure-portal.

Brug oplysningerne i tabellen, når du kører Azure OpenAI-cellerne.

let model_endpoint = 'https://deployment-name.openai.azure.com/openai/deployments/kusto-text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate';
let searchedEmbedding = toscalar(evaluate ai_embeddings("most difficult gymnastics moves in the olympics", model_endpoint));
print(searchedEmbedding)

Forespørg om lighed

Forespørgslen køres direkte i Eventhuset, og bruger den returnerede indlejring fra det forrige trin i en sammenligning med de indlejrede Wikipedia-sider, der er gemt i dit eventhouse. Denne forespørgsel bruger funktionen cosinus lighed og returnerer de 10 mest lignende vektorer.

Kør KQL-forespørgslen for at se resultaterne. Du kan ændre søgeordet og køre forespørgslen igen for at se forskellige resultater. Du kan også sammenligne en eksisterende post i wikidatabasen for at finde lignende poster.

let model_endpoint = 'https://deployment-name.openai.azure.com/openai/deployments/kusto-text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate';
//
Wiki
| extend similarity = series_cosine_similarity(searchedEmbedding, content_vector)
| top 10 by similarity desc

Fjerne ressourcer

Når du er færdig med selvstudiet, kan du slette de ressourcer, du har oprettet, for at undgå at påføre andre omkostninger. Følg disse trin for at slette ressourcerne:

  1. Gå til startsiden for dit arbejdsområde.
  2. Slet den notesbog, der er oprettet i dette selvstudium.
  3. Slet det Eventhouse eller den database, der bruges i dette selvstudium.