Kurz: Použití eventhouse jako vektorové databáze
V tomto kurzu se naučíte používat Eventhouse jako vektorovou databázi k ukládání a dotazování vektorových dat v reálném čase. Obecné informace o vektorových databázích naleznete v tématu Vektorové databáze
Daný scénář zahrnuje použití sémantických hledání na stránkách Wikipedie k vyhledání stránek se společnými motivy. Použijete dostupnou ukázkovou datovou sadu, která obsahuje vektory pro desítky tisíc stránek Wikipedie. Tyto stránky byly vloženy s modelem OpenAI pro vytváření vektorů pro každou stránku. Vektory spolu s některými relevantními metadaty souvisejícími se stránkou se pak ukládají do eventhouse. Tuto datovou sadu můžete použít k vyhledání stránek, které jsou podobné sobě, nebo k vyhledání stránek podobných nějakému motivu, který chcete najít. Řekněme například, že chcete vyhledat "slavné ženské vědce z 19. století". Tuto frázi zakódujete pomocí stejného modelu OpenAI a potom spustíte hledání vektorové podobnosti na uložených datech stránky Wikipedie, abyste našli stránky s nejvyšší sémantickou podobností.
Konkrétně v tomto kurzu:
- Připravte tabulku v Eventhouse s kódováním
Vector16
pro vektorové sloupce. - Uložte vektorová data z předem vložené datové sady do eventhouse.
- Vložení dotazu přirozeného jazyka pomocí modelu Open AI
- Pomocí funkce series_cosine_similarity KQL můžete vypočítat podobnosti mezi vektorem vkládání dotazu a stránkami wikiwebu.
- Zobrazte řádky nejvyšší podobnosti, abyste získali stránky wikiwebu, které jsou pro váš vyhledávací dotaz nejrelevantní.
Tento tok lze vizualizovat následujícím způsobem:
Požadavky
- Pracovní prostor s kapacitou s podporou Microsoft Fabric
- Eventhouse ve vašem pracovním prostoru
- Prostředek Azure OpenAI s nasazeným modelem text-embedding-ada-002 (verze 2). Tento model je aktuálně k dispozici pouze v určitých oblastech. Další informace najdete v tématu Vytvoření prostředku.
- Ujistěte se, že je pro prostředek Azure OpenAI povolené místní ověřování.
- Stažení ukázkového poznámkového bloku z úložiště GitHub
Poznámka:
I když tento kurz používá Azure OpenAI, můžete k vygenerování vektorů textových dat použít libovolného zprostředkovatele modelu vkládání.
Příprava prostředí Eventhouse
V tomto kroku nastavení vytvoříte tabulku v Eventhouse s potřebnými sloupci a zásadami kódování pro uložení vektorových dat.
Přejděte na domovskou stránku pracovního prostoru v reálném čase.
Vyberte eventhouse, který jste vytvořili v požadavcích.
Vyberte cílovou databázi, do které chcete uložit vektorová data. Pokud databázi nemáte, můžete ji vytvořit výběrem možnosti Přidat databázi.
Vyberte Prozkoumat moje data. Zkopírujte nebo vložte následující dotaz KQL a vytvořte tabulku s potřebnými sloupci:
.create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)
Zkopírujte nebo vložte následující příkazy a nastavte zásady kódování vektorových sloupců. Tyto příkazy spusťte postupně.
.alter column Wiki.title_vector policy encoding type='Vector16' .alter column Wiki.content_vector policy encoding type='Vector16'
Zápis vektorových dat do eventhouse
Následující kroky slouží k importu vložených dat Wikipedie a jejich zápisu do eventhouse:
Import poznámkového bloku
- Stáhněte si ukázkový poznámkový blok z úložiště GitHub.
- Přejděte do prostředí Fabric. V přepínači prostředí zvolte Vývoj a potom pracovní prostor.
- Vyberte Importovat>a pak zvolte poznámkový blok, který jste stáhli v předchozím kroku.
- Po dokončení importu otevřete importovaný poznámkový blok z pracovního prostoru.
Zápis dat do eventhouse
Spuštěním buněk nastavte prostředí.
%%configure -f {"conf": { "spark.rpc.message.maxSize": "1024" } }
%pip install wget
%pip install openai
Spuštěním buněk stáhněte předem vypočítané vložené objekty.
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()
Pokud chcete zapisovat do centra událostí, zadejte identifikátor URI clusteru, který najdete na stránce přehledu systému a název databáze. Tabulka se vytvoří v poznámkovém bloku a později se na tuto tabulku odkazuje v dotazu.
# replace with your Eventhouse Cluster URI, Database name, and Table name KUSTO_CLUSTER = "Eventhouse Cluster URI" KUSTO_DATABASE = "Database name" KUSTO_TABLE = "Wiki"
Spuštěním zbývajících buněk zapište data do eventhouse. Provedení této operace může nějakou dobu trvat.
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()
Zobrazení dat v eventhouse
V tomto okamžiku můžete ověřit, že data byla zapsána do centra událostí tak, že přejdete na stránku s podrobnostmi databáze.
- Přejděte na domovskou stránku pracovního prostoru v reálném čase.
- Vyberte položku databáze, která byla uvedena v předchozí části. Měli byste vidět souhrn dat, která byla zapsána do tabulky "Wiki".
Generování vkládání pro hledaný termín
Teď, když jste uložili vložená data wikiwebu do centra událostí, můžete tato data použít jako odkaz na vyhledání stránek v konkrétním článku. Chcete-li provést porovnání, vložíte hledaný termín a pak provedete porovnání mezi hledaný termín a stránkami Wikipedie.
K úspěšnému volání azure OpenAI potřebujete koncový bod, klíč a ID nasazení.
Název proměnné | Hodnota |
---|---|
endpoint | Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Případně můžete hodnotu najít v Azure AI Foundry> Playground > Zobrazení kódu. Ukázkový koncový bod je: https://docs-test-001.openai.azure.com/ . |
Klíč rozhraní API | Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Můžete použít klíč 1 nebo KLÍČ2. |
ID nasazení | Tuto hodnotu najdete v části Nasazení v Azure AI Foundry. |
Při spouštění buněk Azure OpenAI použijte informace v tabulce.
Důležité
Aby bylo možné použít klíč rozhraní API, musí být ve vašem prostředku Azure Open AI povolené místní ověřování.
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)
Dotaz na podobnost
Dotaz se spustí přímo z poznámkového bloku a použije vrácené vkládání z předchozího kroku v porovnání s vloženými stránkami Wikipedie uloženými ve vašem eventhouse. Tento dotaz používá funkci kosinus podobnosti a vrátí prvních 10 nejvíce podobných vektorů.
Spuštěním buněk v poznámkovém bloku zobrazíte výsledky dotazu. Můžete změnit hledaný termín a znovu spustit dotaz, aby se zobrazily různé výsledky. Můžete také porovnat existující položku v databázi wikiwebu a najít podobné položky.
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()
Vyčištění prostředků
Po dokončení kurzu můžete odstranit prostředky, které jste vytvořili, abyste se vyhnuli dalším nákladům. Pokud chcete prostředky odstranit, postupujte takto:
- Přejděte na domovskou stránku pracovního prostoru.
- Odstraňte poznámkový blok vytvořený v tomto kurzu.
- Odstraňte eventhouse nebo databázi použitou v tomto kurzu.