Lernprogramm: Verwenden eines Ereignishauses als Vektordatenbank mit LLM-Einbettungen

In diesem Lernprogramm erfahren Sie, wie Sie ein Ereignishaus als Vektordatenbank zum Speichern und Abfragen von Vektordaten in Real-Time Intelligence verwenden. Allgemeine Informationen zu Vektordatenbanken finden Sie unter Vector-Datenbanken.

Das gegebene Szenario umfasst die Verwendung semantischer Suchvorgänge auf Wikipedia-Seiten, um Seiten mit gemeinsamen Themen zu finden. Sie verwenden ein verfügbares Beispiel-Dataset, das Vektoren für Zehntausende von Wikipedia-Seiten enthält. Diese Seiten werden mit einem OpenAI-Modell eingebettet, um Vektoren für jede Seite zu erzeugen. Sie speichern die Vektoren zusammen mit einigen relevanten Metadaten im Zusammenhang mit der Seite in einem Eventhouse. Sie können dieses Dataset verwenden, um Seiten zu finden, die einander ähneln, oder um Seiten zu finden, die einem Design ähneln, das Sie suchen möchten. Angenommen, Sie möchten nach dem Begriff „berühmte weibliche Wissenschaftler des 19. Jahrhunderts“ suchen. Sie kodieren diesen Begriff mit demselben OpenAI-Modell und führen dann eine Vektorähnlichkeitssuche über die gespeicherten Wikipedia-Seitendaten durch, um die Seiten mit der höchsten semantischen Ähnlichkeit zu finden.

In diesem Tutorial führen Sie insbesondere Folgendes aus:

  • Bereiten Sie im eventhouse eine Tabelle mit Vector16-Kodierung für die Vektorspalten vor.
  • Speichern Sie Vektordaten aus einem vordefinierten Dataset in einem Eventhouse.
  • Verwenden Sie das Eventhouse, um:
    • Betten Sie eine Abfrage mit natürlicher Sprache mithilfe des OpenAI-Modells ein.
    • Berechnen Sie die Ähnlichkeiten zwischen dem Abfrageeinbettungsvektor und denen der Wiki-Seiten mithilfe der series_cosine_similarity KQL-Funktion.
    • Zeigen Sie Zeilen der höchsten Ähnlichkeit an, um die Wiki-Seiten abzurufen, die für Ihre Suchabfrage am relevantesten sind.

Sie können diesen Fluss wie folgt visualisieren:

Schematische Darstellung von eventhouse als Vektordatenbank-Workflow.

Voraussetzungen

  • Ein Arbeitsbereich mit einer Microsoft Fabric-fähigen Kapazität.
  • Ein Eventhouse in Ihrem Arbeitsbereich.
  • Eine Azure OpenAI-Ressource mit dem implementierten Modell text-embedding-ada-002 (Version 2). Dieses Modell ist derzeit nur in bestimmten Regionen verfügbar. Weitere Informationen finden Sie unter Erstellen einer Ressource.
  • Das auf Ihrem Eventhouse mit einer Callout-Richtlinie und verwalteter Identität konfigurierte ai_embeddings plugin.

Vorbereiten Ihrer Eventhouse-Umgebung

In diesem Einrichtungsschritt erstellen Sie eine Tabelle in einem Ereignishaus mit den erforderlichen Spalten und Codierungsrichtlinien, um die Vektordaten zu speichern.

  1. Navigieren Sie in Echtzeitsintelligenz zur Homepage Ihres Arbeitsbereichs.

  2. Wählen Sie das Eventhouse aus, das Sie in den Voraussetzungen erstellt haben.

  3. Wählen Sie die Zieldatenbank aus, in der Sie die Vektordaten speichern möchten. Wenn Sie nicht über eine Datenbank verfügen, erstellen Sie eine datenbank, indem Sie "Datenbank hinzufügen" auswählen.

  4. Erweitern Sie die Datenbankstruktur, wählen Sie das eingebettete Abfrageset aus, kopieren und fügen Sie die folgende KQL-Abfrage ein, um eine Tabelle namens "Wiki " mit den erforderlichen Spalten zu erstellen:

    .create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)
    
  5. Kopieren Sie die folgenden Befehle, und fügen Sie sie ein, um die Codierungsrichtlinie der Vektorspalten festzulegen. Führen Sie diese Befehle sequenziell aus.

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

Vektordaten in ein Eventhouse schreiben

Verwenden Sie die folgenden Schritte, um die eingebundenen Wikipedia-Daten zu importieren und in ein Eventhouse zu schreiben:

Notebook importieren

  1. Laden Sie das Beispiel-Notizbuch "vector-database-eventhouse-notebook" aus dem GitHub Repository herunter.

  2. Navigieren Sie zu Ihrer Fabric-Umgebung. Wählen Sie im Experience Switcher Fabric und dann Ihren Arbeitsbereich aus.

  3. Wählen Sie Importieren>Notizbuch>Von diesem Computer>Hochladen und wählen Sie dann das Notizbuch aus, das Sie in einem vorherigen Schritt heruntergeladen haben.

    Screenshot des Arbeitsbereichs

  4. Wenn der Import abgeschlossen ist, öffnen Sie das importierte Notizbuch aus Ihrem Arbeitsbereich.

Daten in Eventhouse schreiben

  1. Führen Sie die Zellen aus, um Ihre Umgebung einzurichten.

    %%configure -f
    {"conf":
        {
            "spark.rpc.message.maxSize": "1024"
        }
    }
    
    %pip install wget
    
    %pip install openai
    
  2. Führen Sie die Zellen aus, um die vorab berechneten Embeddings herunterzuladen.

    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. Um in das Eventhouse zu schreiben, geben Sie Ihren Cluster-URI ein, den Sie auf der Systemübersichtsseite und den Namen der Datenbank finden können. Die Tabelle wird im Notebook erstellt und später in der Abfrage referenziert.

    # replace with your eventhouse Query URI, Database name, and Table name
    KUSTO_CLUSTER =  "eventhouse Cluster URI"
    KUSTO_DATABASE = "Database name"
    KUSTO_TABLE = "Wiki"
    
  4. Führen Sie die verbleibenden Zellen aus, um die Daten in das Eventhouse zu schreiben. Die Ausführung dieses Vorgangs kann einige Zeit in Anspruch nehmen.

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

Daten im Eventhouse anzeigen

An diesem Punkt können Sie überprüfen, ob die Daten in das Eventhouse geschrieben werden, indem Sie zur Seite mit den Datenbankdetails navigieren.

  1. Navigieren Sie in Echtzeitsintelligenz zur Homepage Ihres Arbeitsbereichs.
  2. Wählen Sie das Datenbankelement aus, das Sie im vorherigen Abschnitt angegeben haben. Es wird eine Zusammenfassung der Daten angezeigt, die in die Tabelle "Wiki" geschrieben wurden. Wenn die Datenbank bereits geöffnet ist, aktualisieren Sie sie, um die neuen Daten anzuzeigen.

Embedding für den Suchbegriff generieren

Nachdem Sie die eingebetteten Wiki-Daten in Ihrem Eventhouse gespeichert haben, betten Sie einen Suchbegriff mithilfe desselben Azure OpenAI-Modells ein. Vergleichen Sie es dann mit den gespeicherten Vektoren, um ähnliche Wikipedia-Seiten zu finden.

Mithilfe von KQL können Sie Daten inline einbetten, indem Sie das ai_embeddings-Plug-In verwenden. Dieser Ansatz eignet sich ideal zum Testen der Ähnlichkeit neuer Streamingdaten direkt im Eventhouse. Sie benötigen die Modellendpunkt-URL, die Ihren Azure OpenAI-Ressourcenendpunkt und den Bereitstellungsnamen kombiniert.

Variablenname Wert
model_endpoint Zusammengesetzt aus Ihrem Azure OpenAI-Endpunkt und Ihrem Bereitstellungsnamen, im Format: https://<deployment-name>.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate. Suchen Sie den Endpunkt im Abschnitt Schlüssel & Endpunkt Ihrer Ressource im Azure-Portal.

Führen Sie die folgende Abfrage in Ihrem KQL-Abfrageset aus, um zu überprüfen, ob die Einbettung ordnungsgemäß generiert wurde. Verwenden Sie dieses Muster im nächsten Schritt, um die vollständige Ähnlichkeitssuche auszuführen.

let model_endpoint = 'https://<deployment-name>.openai.azure.com/openai/deployments/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

Ähnlichkeit abfragen

Verwenden Sie kosinusgleichheit, um den Suchbegriff mit den gespeicherten Wikipedia-Seitenvektoren zu vergleichen und die 10 ähnlichsten Seiten zurückzugeben. Sie können den Suchbegriff ändern und erneut ausführen, um verschiedene Ergebnisse zu untersuchen.

Die folgende KQL-Abfrage bettet den Suchbegriff ein und führt die Ähnlichkeitssuche in eine einzelne KQL-Anweisung aus. Ersetzen Sie den model_endpoint Wert durch Ihren eigenen Wert.

let model_endpoint = 'https://<deployment-name>.openai.azure.com/openai/deployments/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));
Wiki
| extend similarity = series_cosine_similarity(searchedEmbedding, content_vector)
| top 10 by similarity desc

Bereinigen von Ressourcen

Wenn Sie das Lernprogramm abgeschlossen haben, löschen Sie die von Ihnen erstellten Ressourcen, um zusätzliche Kosten zu vermeiden. Um die Ressourcen zu löschen, gehen Sie wie folgt vor:

  1. Navigieren Sie zu Ihrer Arbeitsbereichs-Homepage.
  2. Löschen Sie das Notizbuch, das Sie in diesem Lernprogramm erstellt haben.
  3. Löschen Sie das Eventhouse oder die Datenbank, die in diesem Tutorial verwendet wurden.