Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra come usare una eventhouse come database vettoriale per archiviare ed eseguire query sui dati vettoriali in Real-Time Intelligence. Per informazioni generali sui database vettoriali, vedere Database vettoriali.
Lo scenario specifico prevede l'uso di ricerche semantiche nelle pagine di Wikipedia per trovare pagine con temi comuni. Si usa un set di dati di esempio disponibile, che comprende vettori per decine di migliaia di pagine di Wikipedia. Queste pagine sono incorporate con un modello OpenAI per produrre vettori per ogni pagina. I vettori vengono archiviati, insieme ad alcuni metadati pertinenti correlati alla pagina, in una eventhouse. È possibile usare questo set di dati per trovare pagine simili tra loro o per trovare pagine simili a un tema che si desidera trovare. Ad esempio, si supponga di voler cercare "famosi scienziati femminili del XIX secolo". Codificare questa frase usando lo stesso modello OpenAI e quindi eseguire una ricerca di somiglianza vettoriale sui dati della pagina di Wikipedia archiviati per trovare le pagine con la maggiore somiglianza semantica.
In particolare, in questa esercitazione:
- Prepara una tabella in Eventhouse con codifica
Vector16per le colonne vettoriali. - Memorizza i dati vettoriali di un set di dati pre-integrato in Eventhouse.
- Usa l'eventhouse per:
- Incorporare una query in linguaggio naturale usando il modello OpenAI.
- Calcolare le analogie tra il vettore di incorporamento della query e quelle delle pagine wiki usando la funzione series_cosine_similarity KQL.
- Visualizzare le righe della somiglianza più elevata per ottenere le pagine wiki più rilevanti per la query di ricerca.
È possibile visualizzare questo flusso come segue:
Prerequisiti
- Un spazio di lavoro con una capacità abilitata a Microsoft Fabric.
- Una eventhouse nell'area di lavoro.
- Una risorsa OpenAI di Azure con il modello text-embedding-ada-002 (versione 2) implementato. Questo modello è attualmente disponibile solo in determinate aree. Per altre informazioni, vedere Creare una risorsa.
- Il plugin ai_embeddings configurato con un criterio di callout e un'identità gestita sull'eventhouse.
Prepara il tuo ambiente eventhouse
In questo passaggio di configurazione si crea una tabella in una eventhouse con le colonne e i criteri di codifica necessari per archiviare i dati vettoriali.
Accedi alla home page della tua area di lavoro in Intelligenza in Tempo Reale.
Selezionare l'eventhouse che hai creato come prerequisito.
Selezionare il database di destinazione in cui archiviare i dati vettoriali. Se non si dispone di un database, crearne uno selezionando Aggiungi database.
Espandere l'albero del database, selezionare il set di query incorporato e copiare e incollare la query KQL seguente per creare una tabella denominata Wiki con le colonne necessarie:
.create table Wiki (id:string,url:string,['title']:string,text:string,title_vector:dynamic,content_vector:dynamic,vector_id:long)Copiare e incollare i comandi seguenti per impostare i criteri di codifica delle colonne vettoriali. Eseguire questi comandi in sequenza.
.alter column Wiki.title_vector policy encoding type='Vector16' .alter column Wiki.content_vector policy encoding type='Vector16'
Scrivere i dati vettoriali in Eventhouse
Usare la procedura seguente per importare i dati di Wikipedia incorporati e scriverli in una eventhouse:
Importa notebook
Scaricare il notebook vector-database-eventhouse-notebook di esempio dal repository di GitHub.
Navigare fino al suo ambiente Fabric. Nel commutatore di esperienza, scegli Fabric e poi l'area di lavoro.
Selezionare Importa>notebook>da questo computer>Carica e quindi scegliere il notebook scaricato in un passaggio precedente.
Al termine dell'importazione, aprire il notebook importato dall'area di lavoro.
Scrivi dati nell'eventhouse
Esegui le celle per configurare l'ambiente.
%%configure -f {"conf": { "spark.rpc.message.maxSize": "1024" } }%pip install wget%pip install openaiEseguire le celle per scaricare gli incorporamenti precompilati.
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()Per scrivere nella eventhouse, immettere l'URI del cluster, disponibile nella pagina di panoramica del sistema e il nome del database. La tabella viene creata nel notebook e successivamente viene fatto riferimento a essa nella query.
# replace with your eventhouse Query URI, Database name, and Table name KUSTO_CLUSTER = "eventhouse Cluster URI" KUSTO_DATABASE = "Database name" KUSTO_TABLE = "Wiki"Eseguite le celle rimanenti per scrivere i dati nell'eventhouse. L'operazione può richiedere del tempo per essere eseguita.
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()
Visualizza i dati nell'eventhouse
A questo punto, è possibile verificare che i dati siano stati scritti nell'eventhouse accedendo alla pagina dei dettagli del database.
- Accedi alla home page della tua area di lavoro in Intelligenza in Tempo Reale.
- Selezionare l'elemento di database fornito nella sezione precedente. Viene visualizzato un riepilogo dei dati scritti nella tabella "Wiki". Se il database è già aperto, aggiornarlo per visualizzare i nuovi dati.
Generare l'embedding per il termine di ricerca
Dopo aver archiviato i dati wiki incorporati nella casa eventi, incorporare un termine di ricerca usando lo stesso modello OpenAI Azure. Quindi, confrontarlo con i vettori archiviati per trovare pagine di Wikipedia simili.
Usando KQL, è possibile incorporare i dati inline usando il plug-in ai_embeddings. Questo approccio è ideale per testare la somiglianza dei nuovi dati di streaming direttamente nella casa eventi. È necessario l'URL dell'endpoint del modello, che si ottiene combinando l'endpoint della risorsa Azure OpenAI e il nome della distribuzione.
| Nome variabile | Valore |
|---|---|
| model_endpoint | Generato dall'endpoint di Azure OpenAI e dal nome della distribuzione, nel formato: https://<deployment-name>.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate. Trova l'endpoint nella sezione Chiavi ed endpoint della tua risorsa nel portale di Azure. |
Esegui la query seguente nel set di query KQL per verificare che l'embedding sia stato generato correttamente. Usare questo stesso modello nel passaggio successivo per eseguire la ricerca di somiglianza completa.
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
Verificare la somiglianza
Utilizzare la similarità coseno per confrontare l'embedding del termine di ricerca con i vettori delle pagine di Wikipedia memorizzati e restituire le 10 pagine più simili. È possibile modificare il termine di ricerca ed eseguire di nuovo per esplorare risultati diversi.
La query KQL seguente incorpora il termine di ricerca ed esegue la ricerca di somiglianza in una singola istruzione KQL. Sostituire il model_endpoint valore con il proprio.
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
Pulire le risorse
Al termine dell'esercitazione, eliminare le risorse create per evitare di incorrere in costi aggiuntivi. Per rimuovere le risorse, seguire questa procedura:
- Vai alla home page dell'area di lavoro.
- Elimina il notebook creato durante questa esercitazione.
- Eliminare la eventhouse o il database usato in questa esercitazione.