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 Vectordatabases 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 afor 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 van Eventhouse als vectordatabasewerkstroom.

Vereisten

  • Een werkruimte met een Capaciteit met Microsoft Fabric
  • Een eventhouse in uw werkruimte
  • 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.
    • Zorg ervoor dat lokale verificatie is ingeschakeld voor uw Azure OpenAI-resource.
  • 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 vereisten.

  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. Selecteer 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 schrijven naar een Eventhouse

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 > 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 gemaakte insluitingen 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 gemaakt in het notebook en later waarnaar in de query wordt verwezen.

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

Insluiten genereren 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 azure OpenAI wilt aanroepen, hebt u een eindpunt, sleutel en implementatie-id nodig.

Naam van de variabele Weergegeven als
endpoint Deze waarde vindt u in de sectie Sleutels en eindpunten bij het controleren van uw resource vanuit Azure Portal. Daarnaast kunt u de waarde vinden in de Azure AI Foundry> Playground > Code View. Een voorbeeldeindpunt is: https://docs-test-001.openai.azure.com/.
API key Deze waarde vindt u in de sectie Sleutels en eindpunten bij het controleren van uw resource vanuit Azure Portal. U kunt KEY1 of KEY2 gebruiken.
implementatie-id Deze waarde vindt u in de sectie Deployments in de Azure AI Foundry-.

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

Belangrijk

Lokale verificatie moet zijn ingeschakeld voor uw Azure Open AI-resource om de API-sleutel te kunnen gebruiken.

import openai
openai.api_version = '2022-12-01'
openai.api_base = 'endpoint' # Add your endpoint here
openai.api_type = 'azure'
openai.api_key = 'api key'  # Add your api key here

def embed(query):
  # Creates embedding vector from user query
  embedded_query = openai.Embedding.create(
          input=query,
          deployment_id="deployment id", # Add your deployment id here
          chunk_size=1
  )["data"][0]["embedding"]
  return embedded_query
searchedEmbedding = embed("most difficult gymnastics moves in the olympics")
#print(searchedEmbedding)

Een query uitvoeren op de gelijkenis

De query wordt rechtstreeks vanuit het notebook 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 cellen in het notebook uit om de resultaten van de query 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.

kustoQuery = "Wiki | extend similarity = series_cosine_similarity(dynamic("+str(searchedEmbedding)+"), content_vector) | top 10 by similarity desc" 
accessToken = mssparkutils.credentials.getToken(KUSTO_CLUSTER)
kustoDf  = spark.read\
    .format("com.microsoft.kusto.spark.synapse.datasource")\
    .option("accessToken", accessToken)\
    .option("kustoCluster", KUSTO_CLUSTER)\
    .option("kustoDatabase", KUSTO_DATABASE)\
    .option("kustoQuery", kustoQuery).load()

# Example that uses the result data frame.
kustoDf.show()

Schermopname van het uitvoeren van een cel met overeenkomstenresultaten.

Resources opschonen

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 zelfstudie wordt gebruikt.