Informazioni su questo codelab
1. Panoramica
Che cos'è la gestione dei dati master?
Lo scopo del Master Data Management (MDM) è creare un'unica fonte attendibile per i dati più importanti della tua organizzazione. Immagina una biblioteca meticolosamente organizzata in cui ogni libro (punto dati) sia correttamente etichettato, aggiornato e facile da trovare.
I dati principali rappresentano le entità aziendali fondamentali e essenziali per le operazioni di un'azienda. Ecco gli elementi chiave dei dati principali:
- Entità aziendali: entità come clienti, prodotti, fornitori, sedi e dipendenti, ovvero i sostantivi attorno ai quali ruota la tua attività
- Identificatori: identificatori univoci che assicurano che ogni entità sia distinta e tracciabile nei vari sistemi
- Attributi: le caratteristiche che descrivono ciascuna entità, ad esempio l'indirizzo di un cliente, il prezzo di un prodotto e così via
Per aiutarti a comprendere meglio i dati principali, confrontiamoli con i dati transazionali. I dati transazionali acquisiscono singoli eventi (un acquisto, una spedizione e così via). I dati principali, invece, forniscono il contesto di questi eventi definendo le entità coinvolte. Ad esempio, una transazione di vendita si collega ai dati principali del cliente, del prodotto e del commerciale.
Sebbene l’implementazione di un MDM solido sia essenziale per il processo decisionale strategico, può essere complesso e dispendioso in termini di risorse. È qui che entra in gioco il potere di trasformazione dell'IA generativa, in particolare modelli come Gemini 1.0 Pro, Gemini 1.0 Pro Vision e Gemini 1.5 Pro.
2. Obiettivo
In questo codelab, dimostrerai in che modo Gemini 1.0 Pro semplifica le applicazioni master di gestione dei dati, come l'arricchimento e la deduplicazione, per i dati citibike_stations disponibili nel set di dati pubblico BigQuery.
Cosa utilizzerai
- Set di dati pubblico BigQuery
bigquery-public-data.new_york_citibike
. - Chiamata di funzione Gemini (una funzione Cloud Functions Java che recupera le informazioni sugli indirizzi utilizzando l'API Reverse Geocoding per le coordinate disponibili con i dati di citibike_stations).
- l'API Vertex AI Embeddings e Vector Search in BigQuery per identificare i duplicati.
Cosa creerai
- Per il caso d'uso devi creare un set di dati BigQuery. In questo set di dati creerai una tabella di destinazione con i dati della tabella del set di dati pubblico
bigquery-public-data.new_york_citibike.citibike_stations
. - Eseguirai il deployment della funzione Cloud Functions che include la chiamata di funzione di Gemini per la standardizzazione degli indirizzi.
- I dati degli indirizzi estesi verranno memorizzati nelle tabelle di destinazione (dalle due origini fornite per questa dimostrazione).
- Richiamerai l'API Vertex AI Embeddings da BigQuery sui dati degli indirizzi.
- Utilizzerai la ricerca vettoriale di BigQuery per identificare i record duplicati.
Il seguente diagramma rappresenta il flusso di dati e le fasi dell'implementazione.
4. Prima di iniziare
- Nella pagina del selettore dei progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata su un progetto .
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione su Google Cloud in cui è precaricato bq. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud.
- Una volta stabilita la connessione a Cloud Shell, potrai verificare di avere già eseguito l'autenticazione e che il progetto sia impostato sul tuo ID progetto utilizzando questo comando:
gcloud auth list
- Esegui questo comando in Cloud Shell per confermare che il comando gcloud è a conoscenza del tuo progetto.
gcloud config list project
- Se il progetto non è configurato, utilizza il comando seguente per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
- Vai a Gemini per Google Cloud Marketplace per abilitare l'API. Puoi anche utilizzare il comando seguente nel terminale Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Assicurati che le API BigQuery, Connessione BigQuery, Funzione Cloud, Cloud Run, Vertex AI e Cloud Build siano abilitate. L'alternativa al comando gcloud è tramite la console utilizzando questo link.
Consulta la documentazione per i comandi e l'utilizzo di gcloud.
5. Crea un set di dati BigQuery e una connessione esterna
Inizia creando un set di dati e una connessione tra risorse Cloud.
Un set di dati in BigQuery è un container per tutte le tabelle e gli oggetti della tua applicazione.
Per creare un set di dati:
- Vai alla pagina BigQuery nella console Google Cloud.
- Nel riquadro di Explorer, seleziona il progetto in cui vuoi creare il set di dati.
- Espandi l'opzione Azioni (l'icona con i puntini di sospensione verticali) e fai clic su Crea set di dati.
- Inserisci
mdm_gemini
nel campo ID set di dati. - Imposta il tipo di località su
Multi-region
e accetta il valore predefinito, ovveroUS(multiple regions in United States.
- Fai clic su Crea set di dati.
- Verifica che il set di dati sia stato creato ed elencato sotto il tuo ID progetto nel riquadro Explorer.
Per interagire con la funzione Cloud Functions, è necessaria una connessione BigQuery. Per creare una funzione remota, devi creare una connessione BigQuery. In questo codelab, utilizzeremo la connessione BigLake per accedere al modello da BigQuery tramite la funzione Cloud Functions. Le connessioni BigLake consentono di connettere l'origine dati esterna garantendo al contempo una sicurezza e un controllo dell'accesso granulari a BigQuery, nel nostro caso l'API Gemini Pro di Vertex AI.
Per creare la connessione BigLake, segui questi passaggi:
- Fai clic su Aggiungi nel riquadro Explorer della pagina di BigQuery.
- Fai clic su Connessioni con origini dati esterne.
- Nell'elenco Tipo di connessione, seleziona Modelli remoti Vertex AI, funzioni remote e BigLake (risorsa Cloud).
- Nel campo ID connessione, inserisci
gemini-bq-conn
come nome della connessione. - Imposta il tipo di località su
Multi-region
e accetta il valore predefinito, ovveroUS(multiple regions in United States.
- Fai clic su Crea connessione.
- Fai clic su Vai alla connessione,quindi copia l'ID account di servizio nel riquadro Informazioni sulla connessione.
- Vai alla sezione IAM e Amministratore e fai clic su Concedi l'accesso.
- Incolla l'ID dell'account di servizio nel campo Nuovi principi.
- Seleziona il ruolo
Vertex AI user
dall'elenco dei ruoli e fai clic su Salva.
Hai creato il set di dati e la connessione a BigQuery.
6. Esegui il deployment della chiamata di funzione Gemini (funzione Cloud Functions Java)
Segui questi passaggi per eseguire il deployment della funzione Cloud Functions Java che include la chiamata di funzione di Gemini.
- Clona il repository github dal terminale Cloud Shell utilizzando il seguente comando:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
- Sostituisci i segnaposto
YOUR_API_KEY
eYOUR_PROJECT_ID
con i tuoi valori.
Se leggi il blog qui, saprai che le implementazioni delle chiamate di funzione utilizzano l'API Reverse Geocoding. Puoi creare la tua API_KEY seguendo le istruzioni riportate qui.
- Nel terminale Cloud Shell, vai alla directory del progetto appena clonato GeminiFunctionCalling ed esegui questa istruzione per creare la funzione Cloud Functions ed eseguirne il deployment:
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
Di' "y" Quando viene visualizzata la finestra "Consenti chiamate non autenticate", domande. L'ideale sarebbe configurare l'autenticazione per le applicazioni aziendali, in base al suggerimento. Ma poiché questa è un'app demo, procederemo senza autenticazione.
L'output è un URL REST nel seguente formato:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling
- Testa questa funzione Cloud Functions eseguendo il comando seguente dal terminale:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'
Risposta a un prompt di esempio casuale:
'{"replies":["{ \"DOOR_NUMBER\": \"277\", \"STREET_ADDRESS\": \"Bedford Ave\", \"AREA\":
null, \"CITY\": \"Brooklyn\", \"TOWN\": null, \"COUNTY\": \"Kings County\", \"STATE\":
\"NY\", \"COUNTRY\": \"USA\", \"ZIPCODE\": \"11211\", \"LANDMARK\": null}}```"]}'
I parametri di richiesta e risposta di questa funzione Cloud Functions sono implementati in modo compatibile con la chiamata della funzione remota di BigQuery. Può essere utilizzato direttamente dai dati BigQuery in loco. Significa che se l'input di dati (dati lunghi e lat) risiede in BigQuery, puoi chiamare la funzione remota sui dati e ottenere la risposta della funzione che può essere archiviata o elaborata direttamente in BigQuery.
- Esegui il seguente DDL da BigQuery per creare una funzione remota che richiami questa funzione Cloud Functions di cui è stato eseguito il deployment:
CREATE OR REPLACE FUNCTION
`mdm_gemini.MDM_GEMINI` (latlng STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling', max_batching_rows = 1
);
Verifica la query per utilizzare la nuova funzione remota creata:
SELECT mdm_gemini.MDM_GEMINI
(latlong) da mdm_gemini.CITIBIKE_STATIONS limite 1;
Se la query di prova che utilizza la nuova funzione remota creata in BigQuery ha esito negativo a causa di un problema di autorizzazioni di Cloud Functions, vai a Cloud Functions dalla console Google Cloud e individua la funzione Cloud Functions di cui è stato eseguito il deployment denominata "gemini-fn-calling". Vai alla scheda delle autorizzazioni e aggiungi l'entità come "allUsers" e assegnare il ruolo "Invoker di Cloud Functions" per assicurarti che Cloud Functions sia accessibile a tutti gli utenti (solo perché questa è un'app demo).
7. Prova una soluzione alternativa
Se non disponi dell'API_KEY necessario per l'approccio di chiamata della funzione Reverse Geocoding o non hai eseguito il deployment della funzione Cloud Functions, per qualche motivo puoi procedere come segue in alternativa:
- Scarica il file CITIBIKE_STATIONS.csv dal repository nella cartella del progetto Cloud Shell e vai a tale cartella.
- Esporta i dati dal file CSV nel nuovo set di dati BigQuery
mdm_gemini
utilizzando il seguente comando nel terminale Cloud Shell:
bq load --source_format=CSV --skip_leading_rows=1 mdm_gemini.CITIBIKE_STATIONS ./CITIBIKE_STATIONS.csv \ name:string,latlng:string,capacity:numeric,num_bikes_available:numeric,num_docks_available:numeric,last_reported:timestamp,full_address_string:string
8. Crea una tabella e arricchisci i dati degli indirizzi
Passaggio 1: crea la tabella
Imp: salta questo passaggio se hai utilizzato la soluzione alternativa perché devi già aver creato la tabella.
Se non hai utilizzato la soluzione alternativa, esegui il seguente DDL nell'editor SQL di BigQuery:
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS as (
select name, latitude || ',' || longitude as latlong, capacity, num_bikes_available, num_docks_available,last_reported,
'' as full_address_string
from bigquery-public-data.new_york_citibike.citibike_stations) ;
Ora arricchiamo i dati degli indirizzi richiamando la funzione remota sulle coordinate di latitudine e longitudine disponibili nella tabella. Imposta le seguenti condizioni per i dati:
- Segnalato nell'anno 2024
- Numero di biciclette disponibili > 0
- Capacità > 100
Esegui questa query:
update `mdm_gemini.CITIBIKE_STATIONS`
set full_address_string = `mdm_gemini.MDM_GEMINI`(latlong)
where EXTRACT(YEAR FROM last_reported) = 2024 and num_bikes_available > 0 and capacity > 100;
Passaggio 2: crea una seconda sorgente per i dati sulla posizione delle stazioni di noleggio delle biciclette
Non saltare questo passaggio anche se hai utilizzato l'approccio alternativo per creare la tabella.
In questo passaggio, creerai una seconda sorgente per i dati sulla posizione delle stazioni di noleggio delle biciclette ai fini di questo codelab. Ciò serve a dimostrare che l'MDM riunisce i dati da più origini e identifica la verità aurea.
Esegui i seguenti DDL nell'editor SQL di BigQuery per creare la seconda origine dei dati sulla posizione con due record al suo interno. Assegna a questa tabella il nome mdm_gemini.CITIBIKE_STATIONS_SOURCE2
e inserisci due record al suo interno.
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE2 (name STRING(55), address STRING(1000), embeddings_src ARRAY<FLOAT64>);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Location broadway and 29','{ "DOOR_NUMBER": "1593", "STREET_ADDRESS": "Broadway", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10019", "LANDMARK": null}', null);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Allen St & Hester','{ "DOOR_NUMBER": "36", "STREET_ADDRESS": "Allen St", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10002", "LANDMARK": null}', null);
9. Genera incorporamenti per i dati degli indirizzi
Gli incorporamenti sono vettori numerici ad alta dimensionalità che rappresentano una determinata entità, come un testo o un file audio. I modelli di machine learning (ML) utilizzano gli incorporamenti per codificare la semantica su queste entità in modo da semplificare il ragionamento e il confronto. Ad esempio, un'operazione comune nei modelli di clustering, classificazione e suggerimento è misurare la distanza tra i vettori in uno spazio di incorporamento per trovare elementi semanticamente simili. L'API di incorporamento del testo di Vertex AI consente di creare un incorporamento di testo utilizzando l'IA generativa su Vertex AI. Gli incorporamenti di testo sono rappresentazioni numeriche del testo che catturano le relazioni tra parole e frasi. Scopri di più su Vertex AI Text Embeddings qui.
- Esegui il DDL riportato di seguito per creare un modello remoto per l'API Text Embeddings di Vertex AI:
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
- Ora che il modello degli incorporamenti remoti è pronto, generiamo gli incorporamenti per la prima origine e archiviali in una tabella utilizzando la seguente query:
CREATE TABLE `mdm_gemini.CITIBIKE_STATIONS_SOURCE1` AS (
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, full_address_string as content from `mdm_gemini.CITIBIKE_STATIONS`
where full_address_string is not null )
)
);
Anziché creare una nuova tabella, puoi archiviare il campo risultato degli incorporamenti nella stessa tabella mdm_gemini.CITIBIKE_STATIONS che hai creato in precedenza.
- Per generare incorporamenti per i dati di indirizzo nella tabella CITIBIKE_STATIONS_SOURCE2, esegui questa query:
update `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` a set embeddings_src =
(
SELECT ml_generate_embedding_result
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, address as content from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` ))
where name = a.name) where name is not null;
Questo dovrebbe creare incorporamenti per la seconda origine. Tieni presente che abbiamo creato il campo degli incorporamenti nella stessa tabella CITIBIKE_STATIONS_SOURCE2.
- Per visualizzare gli incorporamenti generati per le tabelle di dati di origine 1 e 2, esegui questa query:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;
Ora procediamo con una ricerca vettoriale per identificare i duplicati.
10. Eseguire una ricerca vettoriale per segnalare gli indirizzi duplicati
In questo passaggio cercherai nella colonna degli incorporamenti di indirizzi ml_generate_embedding_result della tabella mdm_gemini.CITIBIKE_STATIONS_SOURCE1 i due incorporamenti principali corrispondenti a ogni riga di dati nella colonna embeddings_src della tabella mdm_gemini.CITIBIKE_STATIONS_SOURCE2.
Per farlo, esegui questa query:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2
) where query.name <> base.name
order by distance desc;
Tabella su cui stiamo eseguendo la query: mdm_gemini.CITIBIKE_STATIONS_SOURCE1
sul campo ml_generate_embedding_result
Tabella che utilizziamo come base: mdm_gemini.CITIBIKE_STATIONS_SOURCE2
per il campo embeddings_src
top_k: specifica il numero di vicini più prossimi da restituire. Il valore predefinito è 10. Un valore negativo viene considerato infinito, il che significa che tutti i valori vengono conteggiati come vicini e restituiti.
distance_type: specifica il tipo di metrica da utilizzare per calcolare la distanza tra due vettori. I tipi di distanza supportati sono Euclidea e Coseno. L'impostazione predefinita è Euclidea.
Il risultato della query è il seguente:
Come puoi vedere, sono elencati i due vicini più prossimi (in altre parole, i duplicati più vicini) per le due righe in CITIBIKE_STATIONS_SOURCE2
da CITIBIKE_STATIONS_SOURCE1
. Poiché il valore distance_type
non è specificato, si presuppone che sia euclidea e che la distanza venga letta come distanze nei valori di testo degli indirizzi tra le due origini, la più bassa è costituita dai testi degli indirizzi più simili.
Impostiamo distance_type
su Coseno usando la seguente query:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2,distance_type => 'COSINE'
) where query.name <> base.name
order by distance desc;
Il risultato della query è il seguente:
Entrambe le query (di entrambi i tipi di distanza) sono ordinate in base alla distanza DESCRIZIONE, il che significa che vogliamo elencare i risultati in ordine decrescente. ma noterai che l'ordine della distanza della seconda query è invertito. Indovina il perché?
Sì! Hai indovinato! In somiglianza coseno, un numero più grande indica una maggiore somiglianza e una distanza minore. Nella distanza euclidea, un numero maggiore indica una distanza maggiore tra i valori.
Per ulteriori informazioni su come comprendere l'MDM e per suggerimenti per comprendere la differenza e le applicazioni di euclideo e coseno, leggi il blog.
11. Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
- Se vuoi conservare il progetto, salta i passaggi precedenti ed elimina la funzione Cloud Functions accedendo a Cloud Functions e, nell'elenco delle funzioni, seleziona la funzione che vuoi eliminare e fai clic su Elimina.
12. Complimenti
Complimenti Hai dimostrato la potenza dell'utilizzo di Gemini 1.0 Pro e della chiamata di funzione nel trasformare alcune attività MDM in funzionalità di IA generativa semplificate ma potenti, deterministiche e affidabili. Ora che sai, non esitare a identificare altri modi per implementare lo stesso caso d'uso o altre funzionalità MDM. Esistono set di dati che puoi convalidare, lacune informative che potresti colmare o attività che potrebbero essere automatizzate con chiamate strutturate incorporate nelle tue risposte dell'IA generativa? Per indicazioni più dettagliate, consulta la documentazione relativa a Vertex AI, BigQuery Remote Functions, Cloud Functions, Embeddings e Vector Search. Ecco il repository GitHub per questo progetto. Facci sapere cosa crei con questo apprendimento.