Udostępnij przez


Samouczek: używanie usługi Eventhouse jako bazy danych wektorów

Z tego samouczka dowiesz się, jak używać usługi Eventhouse jako bazy danych wektorowych do przechowywania i wykonywania zapytań dotyczących danych wektorowych w systemie inteligencji czasu rzeczywistego. Aby uzyskać ogólne informacje o bazach danych wektorów, zobacz Wektorowe bazy danych.

Dany scenariusz obejmuje użycie semantycznych wyszukiwań na stronach Wikipedii w celu znalezienia stron z typowymi motywami. Używasz dostępnego przykładowego zestawu danych, który zawiera wektory dla dziesiątek tysięcy stron Wikipedii. Te strony zostały osadzone za pomocą modelu OpenAI w celu utworzenia wektorów dla każdej strony. Wektory wraz z niektórymi ważnymi metadanymi powiązanymi ze stroną są następnie przechowywane w magazynie zdarzeń. Możesz użyć tego zestawu danych, aby znaleźć strony podobne do siebie lub znaleźć strony podobne do niektórych motywów, które chcesz znaleźć. Załóżmy na przykład, że chcesz wyszukać "słynnych kobiet naukowców z XIX wieku". Zakodujesz tę frazę przy użyciu tego samego modelu OpenAI, a następnie uruchomisz wyszukiwanie podobieństwa wektorów na przechowywanych danych strony Wikipedii, aby znaleźć strony o największej podobieństwie semantycznej.

W szczególności w tym samouczku nauczysz się:

  • Przygotuj tabelę w Eventhouse z Vector16 kodowaniem dla kolumn wektorowych.
  • Przechowywanie danych wektorowych z wcześniej osadzonego zestawu danych do Eventhouse.
  • Osadzanie zapytania w języku naturalnym przy użyciu modelu Open AI.
  • Użyj funkcji series_cosine_similarity KQL, aby obliczyć podobieństwa między wektorem osadzania zapytania a stronami typu wiki.
  • Wyświetl wiersze o najwyższej podobieństwie, aby uzyskać strony typu wiki, które są najbardziej istotne dla zapytania wyszukiwania.

Ten przepływ można wizualizować w następujący sposób:

Schemat przepływu pracy usługi Eventhouse jako wektorowej bazy danych.

Wymagania wstępne

  • Obszar roboczy z włączoną pojemnością usługi Microsoft Fabric
  • Dom wydarzeń w obszarze roboczym
  • Wtyczka ai-embeddings włączona w twoim domu zdarzeń
  • Zasób Azure OpenAI z wdrożonym modelem text-embedding-ada-002 (wersja 2). Ten model jest obecnie dostępny tylko w niektórych regionach. Aby uzyskać więcej informacji, zobacz Tworzenie zasobu.
  • Pobierz przykładowy notatnik z repozytorium GitHub

Uwaga

Chociaż w tym samouczku jest używana usługa Azure OpenAI, możesz użyć dowolnego dostawcy modelu osadzania do generowania wektorów dla danych tekstowych.

Przygotowywanie środowiska usługi Eventhouse

W tym kroku konfiguracji utworzysz tabelę w usłudze Eventhouse z niezbędnymi kolumnami i zasadami kodowania do przechowywania danych wektorowych.

  1. Przejdź do strony głównej obszaru roboczego w module Real-Time Intelligence.

  2. Wybierz Eventhouse, który stworzyłeś w ramach wymagań wstępnych.

  3. Wybierz docelową bazę danych, w której chcesz przechowywać dane wektorowe. Jeśli nie masz bazy danych, możesz je utworzyć, wybierając pozycję Dodaj bazę danych.

  4. Wybierz pozycję Eksploruj moje dane. Skopiuj/wklej następujące zapytanie KQL, aby utworzyć tabelę z niezbędnymi kolumnami:

    .create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)
    
  5. Skopiuj/wklej następujące polecenia, aby ustawić zasady kodowania kolumn wektorów. Uruchom te polecenia sekwencyjnie.

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

Zapisz dane wektorowe do magazynu zdarzeń Eventhouse

Poniższe kroki służą do importowania osadzonych danych Wikipedii i zapisywania ich w Eventhouse (magazynie zdarzeń):

Importuj notatnik

  1. Pobierz przykładowy notes z repozytorium GitHub.
  2. Przejdź do środowiska Fabric. W przełączniku doświadczeń wybierz pozycję Fabric, a następnie obszar roboczy.
  3. Wybierz Importuj>notatnik>Z tego komputera>Załaduj, a następnie wybierz notatnik pobrany w poprzednim kroku.
  4. Po zakończeniu importowania otwórz zaimportowany notes z obszaru roboczego.

Zapisać dane do Eventhouse

  1. Uruchom komórki, aby skonfigurować środowisko.

    %%configure -f
    {"conf":
        {
            "spark.rpc.message.maxSize": "1024"
        }
    }
    
    %pip install wget
    
    %pip install openai
    
  2. Uruchom komórki, aby pobrać wstępnie obliczone osadzenia.

    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. Aby napisać do Eventhouse, wprowadź identyfikator URI klastra, który można znaleźć na stronie przeglądu systemu, oraz nazwę bazy danych. Tabela jest tworzona w notesie, a później odwoływana w zapytaniu.

    # replace with your Eventhouse Cluster URI, Database name, and Table name
    KUSTO_CLUSTER =  "Eventhouse Cluster URI"
    KUSTO_DATABASE = "Database name"
    KUSTO_TABLE = "Wiki"
    
  4. Uruchom pozostałe komórki, aby zapisać dane w Eventhouse. Wykonanie tej operacji może zająć trochę czasu.

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

Wyświetl dane w Eventhouse

Na tym etapie możesz zweryfikować, czy dane zostały zapisane w eventhouse, przechodząc do strony ze szczegółami bazy danych.

  1. Przejdź do strony głównej obszaru roboczego w module Real-Time Intelligence.
  2. Wybierz element bazy danych podany w poprzedniej sekcji. Powinno zostać wyświetlone podsumowanie danych zapisanych w tabeli "Wiki".

Generowanie osadzania dla terminu wyszukiwania

Teraz, po przechowywaniu osadzonych danych typu wiki w eventhouse, możesz użyć tych danych jako odwołania do znajdowania stron w związku z określonym artykułem. Aby porównać, osadzasz termin wyszukiwania, a następnie wykonujesz porównanie między terminem wyszukiwania a stronami Wikipedii.

Aby wywołać interfejs API osadzania usługi Azure OpenAI, potrzebujesz punktu końcowego.

Nazwa zmiennej Wartość
punkt końcowy Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu w witrynie Azure Portal.

Użyj informacji w tabeli podczas uruchamiania komórek usługi Azure OpenAI.

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)

Wykonywanie zapytań dotyczących podobieństwa

Zapytanie jest uruchamiane bezpośrednio w usłudze Eventhouse i używa zwróconego osadzania z poprzedniego kroku w porównaniu z osadzonymi stronami Wikipedii przechowywanymi w twoim magazynie zdarzeń. To zapytanie używa funkcji podobieństwa cosinus i zwraca 10 najbardziej podobnych wektorów.

Uruchom zapytanie KQL, aby wyświetlić wyniki. Możesz zmienić termin wyszukiwania i ponownie uruchomić zapytanie, aby wyświetlić różne wyniki. Możesz również porównać istniejący wpis w bazie danych wiki, aby znaleźć podobne wpisy.

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

Czyszczenie zasobów

Po ukończeniu samouczka możesz usunąć utworzone zasoby, aby uniknąć ponoszenia innych kosztów. Aby usunąć zasoby, wykonaj następujące kroki:

  1. Wejdź na stronę główną obszaru roboczego.
  2. Usuń notatnik utworzony w tym samouczku.
  3. Usuń magazyn zdarzeń lub bazę danych używaną w tym samouczku.