Delen via


Zelfstudie: Een Eventhouse gebruiken als vectordatabase

In deze zelfstudie leert u hoe u een Eventhouse als vectordatabase gebruikt om vectorgegevens op te slaan en op te vragen in realtime intelligence. Zie Vector-databases voor algemene informatie over vectordatabases.

Het opgegeven scenario omvat het gebruik van semantische zoekopdrachten op Wikipedia-pagina's om pagina's met gemeenschappelijke thema's te vinden. U gebruikt een beschikbare voorbeeldgegevensset, die vectoren bevat voor tienduizenden Wikipedia-pagina's. Deze pagina's zijn ingesloten met een OpenAI-model om vectoren voor elke pagina te produceren. De vectoren, samen met enkele relevante metagegevens die betrekking hebben op de pagina, worden vervolgens opgeslagen in een Eventhouse. U kunt deze gegevensset gebruiken om pagina's te zoeken die vergelijkbaar zijn met elkaar of om pagina's te vinden die vergelijkbaar zijn met een bepaald thema dat u wilt vinden. Stel dat u 'beroemde vrouwelijke wetenschappers van de 19e eeuw' wilt opzoeken. U codeert deze woordgroep met hetzelfde OpenAI-model en voert vervolgens een vector-overeenkomstenzoekactie uit op de opgeslagen Wikipedia-paginagegevens om de pagina's met de hoogste semantische gelijkenis te vinden.

In deze zelfstudie gaat u met name het volgende doen:

  • Bereid een tabel in Eventhouse voor met Vector16 codering voor de vectorkolommen.
  • Sla vectorgegevens van een vooraf ingesloten gegevensset op in een Eventhouse.
  • Sluit een query in natuurlijke taal in met behulp van het Open AI-model.
  • Gebruik de series_cosine_similarity KQL-functie om de overeenkomsten tussen de insluitvector van de query en die van de wikipagina's te berekenen.
  • Bekijk rijen met de hoogste overeenkomst om de wikipagina's op te halen die het meest relevant zijn voor uw zoekquery.

Deze stroom kan als volgt worden gevisualiseerd:

Schematisch overzicht van Eventhouse als werkstroom voor een vectordatabase.

Vereiste voorwaarden

  • Een werkruimte met een Microsoft Fabric-ingeschakelde capaciteit
  • Een eventhouse in uw werkruimte
  • Een invoegtoepassing voor ai-insluitingen ingeschakeld in uw eventhouse
  • Een Azure OpenAI-resource met het geïmplementeerde model text-embedding-ada-002 (versie 2). Dit model is momenteel alleen beschikbaar in bepaalde regio's. Zie Een resource maken voor meer informatie.
  • Het voorbeeldnotebook downloaden vanuit de GitHub-opslagplaats

Notitie

Hoewel deze zelfstudie gebruikmaakt van Azure OpenAI, kunt u elke provider van het insluitmodel gebruiken om vectoren voor tekstgegevens te genereren.

Uw Eventhouse-omgeving voorbereiden

In deze installatiestap maakt u een tabel in een Eventhouse met de benodigde kolommen en coderingsbeleid om de vectorgegevens op te slaan.

  1. Blader naar de startpagina van uw werkruimte in Realtime Intelligence.

  2. Selecteer het Eventhouse dat u hebt gemaakt in de voorwaarden.

  3. Selecteer de doeldatabase waarin u de vectorgegevens wilt opslaan. Als u geen database hebt, kunt u er een maken door database toevoegen te selecteren.

  4. Select mijn gegevens verkennen. Kopieer/plak de volgende KQL-query om een tabel te maken met de benodigde kolommen:

    .create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)
    
  5. Kopieer/plak de volgende opdrachten om het coderingsbeleid van de vectorkolommen in te stellen. Voer deze opdrachten opeenvolgend uit.

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

Vectorgegevens naar een Eventhouse schrijven

De volgende stappen worden gebruikt om de ingesloten Wikipedia-gegevens te importeren en te schrijven in een Eventhouse:

Notebook importeren

  1. Download het voorbeeldnotebook vanuit de GitHub-opslagplaats.
  2. Blader naar uw Fabric-omgeving. Kies in de ervaringswisselaar Fabric- en vervolgens uw werkruimte.
  3. Selecteer Importeer>Notitieblok>Van deze computer>Uploaden en kies vervolgens het notitieblok dat u in een vorige stap hebt gedownload.
  4. Zodra het importeren is voltooid, opent u het geïmporteerde notitieblok vanuit uw werkruimte.

Gegevens schrijven naar eventhouse

  1. Voer de cellen uit om uw omgeving in te stellen.

    %%configure -f
    {"conf":
        {
            "spark.rpc.message.maxSize": "1024"
        }
    }
    
    %pip install wget
    
    %pip install openai
    
  2. Voer de cellen uit om de vooraf berekende embedderingen te downloaden.

    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. Als u naar het eventhouse wilt schrijven, voert u de cluster-URI in. Deze vindt u op de overzichtspagina van het systeem en de naam van de database. De tabel wordt in het notebook gemaakt en vervolgens in de query aangeroepen.

    # replace with your Eventhouse Cluster URI, Database name, and Table name
    KUSTO_CLUSTER =  "Eventhouse Cluster URI"
    KUSTO_DATABASE = "Database name"
    KUSTO_TABLE = "Wiki"
    
  4. Voer de resterende cellen uit om de gegevens naar het Eventhouse te schrijven. Het kan enige tijd duren voordat deze bewerking wordt uitgevoerd.

    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()
    

De gegevens in Eventhouse weergeven

Op dit moment kunt u controleren of de gegevens naar het eventhouse zijn geschreven door naar de pagina met databasegegevens te bladeren.

  1. Blader naar de startpagina van uw werkruimte in Realtime Intelligence.
  2. Selecteer het database-item dat in de vorige sectie is opgegeven. U ziet een samenvatting van de gegevens die naar de 'Wiki'-tabel zijn geschreven.

Genereer embedding voor de zoekterm

Nu u de ingesloten wikigegevens in uw eventhouse hebt opgeslagen, kunt u deze gegevens gebruiken als verwijzing naar pagina's in een bepaald artikel. Als u de vergelijking wilt maken, sluit u de zoekterm in en voert u vervolgens een vergelijking uit tussen de zoekterm en de Wikipedia-pagina's.

Als u de Azure OpenAI-insluitings-API wilt aanroepen, hebt u een eindpunt nodig.

Naam van de variabele Waarde
eindpunt Deze waarde vindt u in de sectie Sleutels en eindpunten bij het controleren van uw resource vanuit Azure Portal.

Gebruik de informatie in de tabel bij het uitvoeren van de Azure OpenAI-cellen.

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)

Een query uitvoeren op de gelijkenis

De query wordt rechtstreeks in eventhouse uitgevoerd en gebruikt de geretourneerde insluiting uit de vorige stap in een vergelijking met de ingesloten Wikipedia-pagina's die zijn opgeslagen in uw eventhouse. Deze query maakt gebruik van de cosinus-gelijkenisfunctie en retourneert de top 10 meest vergelijkbare vectoren.

Voer de KQL-query uit om de resultaten te bekijken. U kunt de zoekterm wijzigen en de query opnieuw uitvoeren om verschillende resultaten te zien. U kunt ook een bestaand item in de Wiki-database vergelijken om vergelijkbare vermeldingen te vinden.

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

Middelen opruimen

Wanneer u klaar bent met de zelfstudie, kunt u de resources verwijderen die u hebt gemaakt om andere kosten te voorkomen. Voer de volgende stappen uit om de resources te verwijderen:

  1. Blader naar de startpagina van uw werkruimte.
  2. Verwijder het notitieblok dat u in deze zelfstudie hebt gemaakt.
  3. Verwijder de Eventhouse of database die in deze handleiding wordt gebruikt.