Codelab: crea un chatbot di consigli sui film utilizzando Neo4j e Vertex AI

Codelab:
crea un chatbot di consigli sui film utilizzando Neo4j e Vertex AI

Informazioni su questo codelab

subjectUltimo aggiornamento: apr 4, 2025
account_circleScritto da: Romin Irani and Siddhant Agarwal(GDE)

1. Panoramica

In questo codelab, creerai un chatbot di consigli sui film intelligenti utilizzando una combinazione di Neo4j, Vertex AI e Gemini. Il chatbot utilizza un Knowledge Graph di Neo4j come base per rappresentare film, attori, registi, produttori, generi e così via. Per migliorare l'esperienza di ricerca, genererai incorporamenti vettoriali dalle descrizioni generali della trama dei film utilizzando il modello text-embedding-004 di Vertex AI.

Infine, integrerai Gemini per creare un'interfaccia di conversazione in cui gli utenti possono porre domande in linguaggio naturale, ad esempio "Cosa posso guardare se mi è piaciuto Interstellar?", e ricevere suggerimenti di film personalizzati in base alla somiglianza semantica e al contesto basato su grafici.

Nel codelab, utilizzerai un approccio passo passo come segue:

  1. Creare un Knowledge Graph Neo4j con dati relativi ai film
  2. Arricchisci i dati dei film generando incorporamenti di testo per le descrizioni/le trame dei film utilizzando gli incorporamenti di testo di Vertex AI.
  3. Crea un'interfaccia del chatbot Gradio basata su Gemini per la ricerca e il recupero semantico da Neo4j che riunisce tutto.
  4. Se vuoi, esegui il deployment su Google Cloud Run come applicazione web autonoma, come mostrato di seguito:

Cosa imparerai a fare

  • Come creare un Knowledge Graph di film utilizzando Cypher e Neo4j.
  • Come utilizzare Vertex AI per generare embedding semantici per il testo.
  • Come integrare Neo4j e Gemini per il recupero intelligente basato su vettori.
  • Come creare ed eseguire un'interfaccia utente di chatbot conversazionale con Gradio.

Che cosa ti serve

  • Browser web Chrome
  • Un account Gmail
  • Un progetto Google Cloud con la fatturazione abilitata
  • Un account Neo4j Aura DB senza costi
  • Familiarità di base con i comandi del terminale e Python

Questo codelab, progettato per sviluppatori di tutti i livelli (inclusi i principianti), utilizza Python e Neo4j nella sua applicazione di esempio. Sebbene una conoscenza di base di Python e dei database grafici possa essere utile, non è richiesta alcuna esperienza precedente per comprendere i concetti o seguire la procedura. 121747afa89e0e6.png

2. Configura Neo4j AuraDB

Neo4j è un database grafico nativo leader che archivia i dati come una rete di nodi (entità) e relazioni (connessioni tra entità), il che lo rende ideale per i casi d'uso in cui è fondamentale comprendere le connessioni, come consigli, rilevamento delle frodi, knowledge graph e altro ancora. A differenza dei database relazionali o basati su documenti che si basano su tabelle rigide o strutture gerarchiche, il modello di grafo flessibile di Neo4j consente una rappresentazione intuitiva ed efficiente di dati complessi e interconnessi.

Invece di organizzare i dati in righe e tabelle come i database relazionali, Neo4j utilizza un modello grafico, in cui le informazioni sono rappresentate come nodi (entità) e relazioni (connessioni tra queste entità). Questo modello lo rende eccezionalmente intuitivo per lavorare con dati intrinsecamente collegati, come persone, luoghi, prodotti o, nel nostro caso, film, attori e generi.

Ad esempio, in un set di dati di film:

  • Un nodo può rappresentare un Movie, Actor o Director
  • Una relazione può essere ACTED_IN o DIRECTED

Questa struttura ti consente di porre facilmente domande come:

  • In quali film ha recitato questo attore?
  • Chi ha lavorato con Christopher Nolan?
  • Quali sono i film simili basati su attori o generi condivisi?

Neo4j è dotato di un potente linguaggio di query chiamato Cypher, progettato specificamente per eseguire query sui grafici. Cypher ti consente di esprimere pattern e connessioni complessi in modo conciso e leggibile.

Neo4j offre diverse opzioni di deployment a seconda delle tue esigenze:

  • Autonomo: esegui Neo4j sulla tua infrastruttura utilizzando Neo4j Desktop o come immagine Docker (on-premise o nel tuo cloud). 397a3c535b52d3f6.png
  • Gestito in cloud: esegui il deployment di Neo4j su provider cloud di uso comune utilizzando le offerte del marketplace.
  • Completamente gestito: utilizza Neo4j AuraDB, il database cloud completamente gestito di Neo4j, che gestisce il provisioning, la scalabilità, i backup e la sicurezza per te.

In questo codelab utilizzeremo Neo4j AuraDB Free, il livello senza costi di AuraDB. Fornisce un'istanza di database grafico completamente gestita con spazio di archiviazione e funzionalità sufficienti per la prototipazione, l'apprendimento e la creazione di piccole applicazioni, perfetta per il nostro obiettivo di creare un chatbot di consigli sui film basato sull'IA generativa.

Durante questo lab, creerai un'istanza AuraDB senza costi, la collegherai alla tua applicazione utilizzando le credenziali di connessione e la utilizzerai per archiviare e eseguire query sul tuo knowledge graph dei film.

Perché i grafici?

Nei database relazionali tradizionali, rispondere a domande come "Quali film sono simili a Inception in base al cast o al genere condiviso?" richiederebbe complesse operazioni JOIN su più tabelle. Man mano che aumenta la profondità delle relazioni, il rendimento e la leggibilità peggiorano.

I database grafici come Neo4j, invece, sono progettati per esplorare in modo efficiente le relazioni, il che li rende ideali per sistemi di consigli, ricerca semantica e assistenti intelligenti. Aiutano a catturare il contesto reale, ad esempio reti di collaborazione, schemi narrativi o preferenze degli spettatori, che può essere difficile rappresentare utilizzando i modelli di dati tradizionali.

Combinando questi dati collegati con LLM come Gemini e embedding vettoriali di Vertex AI, possiamo migliorare l'esperienza con i chatbot, consentendo loro di ragionare, recuperare e rispondere in modo più personalizzato e pertinente.

Creazione di Neo4j AuraDB senza costi

  1. Visita la pagina https://console.neo4j.io.
  2. Accedi con il tuo Account Google o il tuo indirizzo email.
  3. Fai clic su "Crea istanza senza costi".
  4. Durante il provisioning dell'istanza, viene visualizzata una finestra popup che mostra le credenziali di connessione per il database.

Assicurati di scaricare e salvare in sicurezza i seguenti dettagli dal popup, che sono essenziali per connettere l'applicazione a Neo4j:

NEO4J_URI=neo4j+s://<your-instance-id>.databases.neo4j.io
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=<your-generated-password>
AURA_INSTANCEID=<your-instance-id>
AURA_INSTANCENAME=<your-instance-name>

Nel passaggio successivo utilizzerai questi valori per configurare il file .env nel progetto per l'autenticazione con Neo4j.

a1e29e56e6c412fc.png

Neo4j AuraDB Free è adatto per lo sviluppo, la sperimentazione e le applicazioni su piccola scala come questo codelab. Offre limiti di utilizzo generosi, supportando fino a 200.000 nodi e 400.000 relazioni. Sebbene fornisca tutte le funzionalità essenziali necessarie per creare e eseguire query su un Knowledge Graph, non supporta configurazioni avanzate come plug-in personalizzati o spazio di archiviazione aggiuntivo. Per i carichi di lavoro di produzione o i set di dati più grandi, puoi eseguire l'upgrade a un piano AuraDB di livello superiore che offre maggiore capacità, prestazioni e funzionalità di livello enterprise.

Questa è la sezione relativa alla configurazione del backend Neo4j AuraDB. Nel passaggio successivo, creeremo un progetto Google Cloud, cloneremo il repository e configureremo le variabili di ambiente necessarie per preparare l'ambiente di sviluppo prima di iniziare il nostro codelab.

3. Prima di iniziare

Crea un progetto

  1. Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è attivata in un progetto .
  3. Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud.

Immagine del pulsante Attiva Cloud Shell

  1. Una volta connesso a Cloud Shell, verifica di aver già eseguito l'autenticazione e che il progetto sia impostato sul tuo ID progetto utilizzando il seguente comando:
gcloud auth list
  1. Esegui il seguente comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto.
gcloud config list project
  1. Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
  1. Abilita le API richieste tramite il comando mostrato di seguito. L'operazione potrebbe richiedere alcuni minuti.
gcloud services enable cloudresourcemanager.googleapis.com \
                       
servicenetworking.googleapis.com \
                       
run.googleapis.com \
                       
cloudbuild.googleapis.com \
                       
cloudfunctions.googleapis.com \
                       
aiplatform.googleapis.com

Al termine dell'esecuzione del comando, dovresti visualizzare un messaggio simile a quello mostrato di seguito:

Operation "operations/..." finished successfully.

L'alternativa al comando gcloud è tramite la console cercando ciascun prodotto o utilizzando questo link.

Se manca un'API, puoi sempre attivarla durante l'implementazione.

Consulta la documentazione per i comandi e l'utilizzo di gcloud.

Clona il repository e configura le impostazioni dell'ambiente

Il passaggio successivo consiste nel clonare il repository di esempio a cui faremo riferimento nel resto del codelab. Supponendo che tu stia utilizzando Cloud Shell, dai il seguente comando dalla home directory:

git clone https://github.com/sidagarwal04/neo4j-vertexai-codelab.git

Per avviare l'editor, fai clic su Apri editor nella barra degli strumenti della finestra di Cloud Shell. Fai clic sulla barra dei menu nell'angolo in alto a sinistra e seleziona File → Apri cartella come mostrato di seguito:

66221fd0d0e5202f.png

Seleziona la cartella neo4j-vertexai-codelab e dovresti visualizzare la cartella aperta con i seguenti file, come mostrato di seguito:

e49542efd70de22e.png

A questo punto, dobbiamo configurare le variabili di ambiente che verranno utilizzate durante il codelab. Fai clic sul file example.env. Dovresti vedere i contenuti come mostrato di seguito:

NEO4J_URI=
NEO4J_USER=
NEO4J_PASSWORD=
NEO4J_DATABASE=
PROJECT_ID=
LOCATION=

Ora crea un nuovo file denominato .env nella stessa cartella del file example.env e copia i contenuti del file example.env esistente. Ora aggiorna le seguenti variabili:

  • NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD e NEO4J_DATABASE:
  • Inserisci questi valori utilizzando le credenziali fornite durante la creazione dell'istanza Neo4j AuraDB Free nel passaggio precedente.
  • NEO4J_DATABASE è in genere impostato su neo4j per AuraDB Free.
  • PROJECT_ID e LOCATION:
  • Se esegui il codelab da Google Cloud Shell, puoi lasciare vuoti questi campi, poiché verranno dedotti automaticamente dalla configurazione del progetto attivo.
  • Se esegui l'operazione localmente o al di fuori di Cloud Shell, aggiorna PROJECT_ID con l'ID del progetto Google Cloud creato in precedenza e imposta LOCATION sulla regione selezionata per il progetto (ad es. us-central1).

Dopo aver inserito questi valori, salva il file .env. Questa configurazione consentirà alla tua applicazione di connettersi sia ai servizi Neo4j sia a Vertex AI.

Il passaggio finale per configurare l'ambiente di sviluppo consiste nel creare un ambiente virtuale Python e installare tutte le dipendenze richieste elencate nel file requirements.txt. Queste dipendenze includono le librerie necessarie per lavorare con Neo4j, Vertex AI, Gradio e altro ancora.

Innanzitutto, crea un ambiente virtuale denominato .venv eseguendo il seguente comando:

python -m venv .venv

Una volta creato l'ambiente, dovremo attivarlo con il seguente comando

source .venv/bin/activate

Ora dovresti vedere (.venv) all'inizio del prompt del terminale, a indicare che l'ambiente è attivo. Ad esempio: (.venv) yourusername@cloudshell:

Ora installa le dipendenze richieste eseguendo:

pip install -r requirements.txt

Ecco uno snapshot delle dipendenze principali elencate nel file:

gradio>=4.0.0
neo4j>=5.0.0
numpy>=1.20.0
python-dotenv>=1.0.0
google-cloud-aiplatform>=1.30.0
vertexai>=0.0.1

Una volta installate tutte le dipendenze, l'ambiente Python locale sarà completamente configurato per eseguire gli script e il chatbot in questo codelab.

Ottimo. Ora siamo pronti per passare al passaggio successivo: comprendere il set di dati e prepararlo per la creazione del grafico e l'arricchimento semantico.

4. Prepara il set di dati Movies

La nostra prima attività consiste nel preparare il set di dati di film che utilizzeremo per creare il grafo della conoscenza e potenziare il nostro chatbot di consigli. Anziché partire da zero, utilizzeremo un set di dati aperti esistente e lo svilupperemo.

Utilizziamo il set di dati Movies di Rounak Banik, un noto set di dati pubblico disponibile su Kaggle. Sono inclusi i metadati di oltre 45.000 film di TMDB, tra cui cast, troupe, parole chiave, valutazioni e altro ancora.

9e3a1dc4c286af1b.png

Per creare un chatbot di consigli sui film affidabile ed efficace, è essenziale iniziare con dati puliti, coerenti e strutturati. Sebbene il set di dati Movies di Kaggle sia una risorsa completa con oltre 45.000 record di film e metadati dettagliati, tra cui generi, cast, troupe e altro ancora, contiene anche rumore, incoerenze e strutture di dati nidificate che non sono ideali per la definizione di modelli di grafici o l'embedding semantico.

Per risolvere il problema, abbiamo pre-elaborato e normalizzato il set di dati per assicurarci che sia adatto alla creazione di un Knowledge Graph Neo4j e alla generazione di embedding di alta qualità. Questa procedura ha coinvolto:

  • Rimozione di record duplicati e incompleti
  • Standardizzazione dei campi chiave (ad es. nomi di generi, nomi di persone)
  • Appiattimento di strutture nidificate complesse (ad es. cast e troupe) in file CSV strutturati
  • Selezionare un sottoinsieme rappresentativo di circa 12.000 film per rispettare i limiti di Neo4j AuraDB Free

I dati normalizzati di alta qualità contribuiscono a garantire:

  • Qualità dei dati: riduce al minimo errori e incoerenze per consigli più accurati
  • Rendimento delle query: la struttura semplificata migliora la velocità di recupero e riduce la ridondanza
  • Accuratezza dell'embedding: input puliti generano embedding vettoriali più significativi e contestuali

Puoi accedere al set di dati ripulito e normalizzato nella cartella normalized_data/ di questo repository GitHub. Questo set di dati viene inoltre sottoposto a mirroring in un bucket Google Cloud Storage per un facile accesso negli script Python futuri.

Ora che i dati sono stati puliti e sono pronti, possiamo caricarli in Neo4j e iniziare a costruire il nostro Knowledge Graph dei film.

5. Creare un Knowledge Graph di film

Per alimentare il nostro chatbot di consigli sui film basato sull'IA generativa, dobbiamo strutturare il nostro set di dati dei film in modo da acquisire la ricca rete di connessioni tra film, attori, registi, generi e altri metadati. In questa sezione creeremo un Knowledge Graph dei film in Neo4j utilizzando il set di dati ripulito e normalizzato che hai preparato in precedenza.

Utilizzeremo la funzionalità LOAD CSV di Neo4j per importare i file CSV ospitati in un bucket pubblico Google Cloud Storage (GCS). Questi file rappresentano diversi componenti del set di dati dei film, come film, generi, cast, troupe, case di produzione e valutazioni degli utenti.

Passaggio 1: crea vincoli e indici

Prima di importare i dati, è buona prassi creare limitazioni e indici per applicare l'integrità dei dati e ottimizzare il rendimento delle query.

CREATE CONSTRAINT unique_tmdb_id IF NOT EXISTS FOR (m:Movie) REQUIRE m.tmdbId IS UNIQUE;
CREATE CONSTRAINT unique_movie_id IF NOT EXISTS FOR (m:Movie) REQUIRE m.movieId IS UNIQUE;
CREATE CONSTRAINT unique_prod_id IF NOT EXISTS FOR (p:ProductionCompany) REQUIRE p.company_id IS UNIQUE;
CREATE CONSTRAINT unique_genre_id IF NOT EXISTS FOR (g:Genre) REQUIRE g.genre_id IS UNIQUE;
CREATE CONSTRAINT unique_lang_id IF NOT EXISTS FOR (l:SpokenLanguage) REQUIRE l.language_code IS UNIQUE;
CREATE CONSTRAINT unique_country_id IF NOT EXISTS FOR (c:Country) REQUIRE c.country_code IS UNIQUE;

CREATE INDEX actor_id IF NOT EXISTS FOR (p:Person) ON (p.actor_id);
CREATE INDEX crew_id IF NOT EXISTS FOR (p:Person) ON (p.crew_id);
CREATE INDEX movieId IF NOT EXISTS FOR (m:Movie) ON (m.movieId);
CREATE INDEX user_id IF NOT EXISTS FOR (p:Person) ON (p.user_id);

Passaggio 2: importa i metadati e le relazioni dei film

Vediamo come importare i metadati dei film utilizzando il comando LOAD CSV. Questo esempio crea nodi Movie con attributi chiave come titolo, panoramica, lingua e tempo di esecuzione:

LOAD CSV WITH HEADERS FROM "https://storage.googleapis.com/neo4j-vertexai-codelab/normalized_movies.csv" AS row
WITH row, toInteger(row.tmdbId) AS tmdbId
WHERE tmdbId IS NOT NULL
WITH row, tmdbId
LIMIT 12000
MERGE (m:Movie {tmdbId: tmdbId})
ON CREATE SET m.title = coalesce(row.title, "None"),
             
m.original_title = coalesce(row.original_title, "None"),
             
m.adult = CASE
                           
WHEN toInteger(row.adult) = 1 THEN 'Yes'
                           
ELSE 'No'
                       
END,
             
m.budget = toInteger(coalesce(row.budget, 0)),
             
m.original_language = coalesce(row.original_language, "None"),
             
m.revenue = toInteger(coalesce(row.revenue, 0)),
             
m.tagline = coalesce(row.tagline, "None"),
             
m.overview = coalesce(row.overview, "None"),
             
m.release_date = coalesce(row.release_date, "None"),
             
m.runtime = toFloat(coalesce(row.runtime, 0)),
             
m.belongs_to_collection = coalesce(row.belongs_to_collection, "None");

Comandi Cypher simili possono essere utilizzati per importare entità correlate come generi, case di produzione, lingue, paesi, cast, troupe e valutazioni.

Carica il grafico completo tramite Python

Anziché eseguire manualmente più query Cypher, ti consigliamo di utilizzare lo script Python automatico fornito in questo codelab.

Lo script graph_build.py carica l'intero set di dati da GCS nell'istanza Neo4j AuraDB utilizzando le credenziali nel file .env.

python graph_build.py

Lo script caricherà in sequenza tutti i file CSV necessari, creerà nodi e relazioni e strutturerà il knowledge graph completo dei film.

Convalida il grafico

Dopo il caricamento, puoi convalidare il grafo eseguendo semplici query Cypher come:

MATCH (m:Movie) RETURN m LIMIT 5;
MATCH (a:Actor)-[:ACTED_IN]->(m:Movie) RETURN a.name, m.title LIMIT 5;

Ora dovresti vedere il grafico compilato con film, persone, generi e altro ancora, pronto per essere arricchito semanticamente nel passaggio successivo.

6. Genera e carica gli embedding per eseguire la ricerca di somiglianze vettoriali

Per attivare la ricerca semantica nel nostro chatbot, dobbiamo generare embedding vettoriali per le descrizioni dei film. Questi incorporamenti trasformano i dati di testo in vettori numerici che possono essere confrontati per individuare le somiglianze, consentendo al chatbot di recuperare film pertinenti anche se la query non corrisponde esattamente al titolo o alla descrizione.

⚠️ Nota sul rendimento

La generazione di rappresentazioni distribuite per migliaia di descrizioni di film in tempo reale è un processo che richiede tempo e risorse. Per rendere questo codelab efficiente e accessibile, abbiamo precompilato gli embedding per tutte le circa 12.000 descrizioni dei film utilizzando

text-embedding-004

e li ha archiviati in un file CSV disponibile pubblicamente.

bcca07eaee60787b.png

Opzione 1: carica gli embedding precomputati tramite Cypher

Per collegare rapidamente gli embedding ai nodi Movie corrispondenti in Neo4j, esegui il seguente comando Cypher nel browser Neo4j:

LOAD CSV WITH HEADERS FROM 'https://storage.googleapis.com/neo4j-vertexai-codelab/movie_embeddings.csv' AS row
WITH row
MATCH (m:Movie {tmdbId: toInteger(row.tmdbId)})
SET m.embedding = apoc.convert.fromJsonList(row.embedding)

Questo comando legge i vettori di embedding dal file CSV e li associa come proprietà (m.embedding) a ogni nodo Movie.

Opzione 2: carica gli embedding utilizzando Python

Puoi anche caricare gli embedding in modo programmatico utilizzando lo script Python fornito. Questo approccio è utile se lavori nel tuo ambiente o vuoi automatizzare la procedura:

python load_embeddings.py

Questo script legge lo stesso file CSV da GCS e scrive gli embedding in Neo4j utilizzando il driver Neo4j Python.

[Facoltativo] Generare gli embedding autonomamente (per l'esplorazione)

Se vuoi capire come vengono generati gli embedding, puoi esplorare la logica nello script generate_embeddings.py stesso. Utilizza Vertex AI per incorporare il testo di ogni panoramica del film utilizzando il modello text-embedding-004.

Per provare, apri ed esegui la sezione di generazione dell'embedding del codice. Se esegui il codice in Cloud Shell, puoi commentare la riga seguente, poiché Cloud Shell è già autenticato tramite il tuo account attivo:

# os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "./service-account.json"

⚠️ L'esecuzione dell'intera procedura di generazione di embedding consumerà la quota di Vertex AI e può richiedere molto tempo, soprattutto con migliaia di record.

Una volta caricati gli incorporamenti in Neo4j, il knowledge graph dei film diventa consapevole della semantica, pronto a supportare una potente ricerca in linguaggio naturale utilizzando la somiglianza vettoriale.

7. Il chatbot per consigli sui film

Una volta implementati il Knowledge Graph e gli embedding, è il momento di riunire tutto in un'interfaccia di conversazione: il tuo chatbot per consigli sui film.

Il chatbot è implementato utilizzando Python e Gradio, un framework leggero per la creazione di interfacce utente basate sul web. La logica principale si trova nello script chatbot.py, che si connette all'istanza Neo4j AuraDB ed esegue una ricerca di somiglianza di vettori sugli embedding dei film in base a prompt in linguaggio naturale.

Il chatbot utilizza Gemini per migliorare l'esperienza utente perfezionando le query e formattando le risposte. I risultati di ricerca vengono restituiti da Neo4j utilizzando una combinazione di contesto grafico e somiglianza vettoriale.

Esegui il chatbot localmente

Per avviare il chatbot, attiva l'ambiente virtuale (se non l'hai ancora fatto) ed esegui:

python chatbot.py

Dovresti vedere un output simile al seguente:

Old index dropped
Creating new vector index
Vector index created successfully
* Running on local URL:  http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.

💡 Se vedi avvisi di deprecazione relativi ad allow_flagging, puoi ignorarli per il momento: l'applicazione continuerà a funzionare.

Interagire con il chatbot

Una volta eseguito, apri l'URL visualizzato nel terminale, in genere: 👉 http://127.0.0.1:7860

Ti verrà presentata una semplice interfaccia di chat in cui puoi digitare query in linguaggio naturale come:

  • "Consigliami thriller di fantascienza come Inception"
  • "Consigliami un film romantico con Tom Hanks"
  • "Voglio guardare un film drammatico familiare che mi faccia stare bene"

c76b6c6e2bcb25d9.png

Il chatbot elabora la query, esegue una ricerca vettoriale semantica sulle descrizioni dei film e mostra un elenco dei film più pertinenti, inclusi titoli, descrizioni e anni di uscita.

Ogni consiglio viene visualizzato in un layout in stile scheda con risultati formattati in modo ordinato.

Con il tuo chatbot in esecuzione in locale, ora hai un sistema di consigli sui film completamente funzionale basato sull'IA generativa che combina il meglio dei knowledge graph, dei modelli linguistici di grandi dimensioni (LLM) (Gemini) e della ricerca semantica utilizzando gli incorporamenti di Vertex AI.

8. (Facoltativo) Eseguire il deployment in Google Cloud Run

Se vuoi rendere il tuo chatbot di consigli sui film accessibile pubblicamente sul web, puoi eseguirlo su Google Cloud Run, una piattaforma serverless completamente gestita che scala automaticamente la tua applicazione. 121747afa89e0e6.png

Prima di eseguire il deployment, assicurati che nel progetto siano presenti i seguenti file (sono già inclusi in questo repository):

  • requirements.txt: elenca tutte le dipendenze Python necessarie per eseguire l'applicazione, tra cui Neo4j e Vertex AI.
  • Dockerfile: definisce l'ambiente del contenitore, inclusa l'immagine di base, l'installazione delle dipendenze e la modalità di lancio dell'app.

Passaggio 1: configura le variabili di ambiente

Nel terminale, imposta le seguenti variabili di ambiente (sostituisci i valori segnaposto con le impostazioni effettive del progetto):

# Set your Google Cloud project ID
export GCP_PROJECT='your-project-id'  # Change this

# Set your preferred deployment region
export GCP_REGION='us-central1'

Passaggio 2: crea il registry degli elementi e compila il contenitore

# Artifact Registry repo and service name
export AR_REPO='your-repo-name'       # Change this
export SERVICE_NAME='movies-chatbot'  # Or any name you prefer

# Create the Artifact Registry repository
gcloud artifacts repositories create "$AR_REPO" \
 
--location="$GCP_REGION" \
 
--repository-format=Docker

# Authenticate Docker with Artifact Registry
gcloud auth configure-docker "$GCP_REGION-docker.pkg.dev"

# Build and submit the container image
gcloud builds submit \
 
--tag "$GCP_REGION-docker.pkg.dev/$GCP_PROJECT/$AR_REPO/$SERVICE_NAME"

Questo comando pacchettizza l'app utilizzando Dockerfile e carica l'immagine del contenitore in Artifact Registry di Google Cloud.

Passaggio 3: esegui il deployment in Cloud Run

Prima di eseguire il deployment, assicurati che tutte le variabili di ambiente richieste (ad es. Le credenziali Neo4j, le impostazioni del progetto) sono elencate nel file .env.

Utilizza lo snippet seguente per convertire dinamicamente il file .env in un formato compatibile con il flag --set-env-vars:

ENV_VARS=$(grep -v '^#' .env | sed 's/ *= */=/g' | xargs -I{} echo -n "{},")
ENV_VARS=${ENV_VARS%,}

Ora esegui il deployment dell'app:

gcloud run deploy "$SERVICE_NAME" \
 
--port=8080 \
 
--image="$GCP_REGION-docker.pkg.dev/$GCP_PROJECT/$AR_REPO/$SERVICE_NAME" \
 
--allow-unauthenticated \
 
--region=$GCP_REGION \
 
--platform=managed \
 
--project=$GCP_PROJECT \
 
--set-env-vars="GCP_PROJECT=$GCP_PROJECT,GCP_REGION=$GCP_REGION,$ENV_VARS"

Accedere al chatbot

Una volta eseguito il deployment, Cloud Run restituirà un URL del servizio pubblico nel formato:

https://movies-chatbot-[UNIQUE_ID].${GCP_REGION}.run.app

Apri l'URL nel browser per accedere al chatbot. Dovresti vedere la stessa interfaccia utente di Gradio in esecuzione nel cloud, in grado di ricevere query e rispondere con consigli sui film.

Note e suggerimenti

  • Assicurati che Dockerfile esegua pip install -r requirements.txt durante la compilazione.
  • Se non utilizzi Cloud Shell, dovrai autenticare il tuo ambiente utilizzando un account di servizio con autorizzazioni Vertex AI e Artifact Registry.
  • Puoi monitorare i log e le metriche di deployment dalla console Google Cloud > Cloud Run.

Puoi anche visitare Cloud Run dalla console Google Cloud e visualizzare l'elenco dei servizi in Cloud Run. Il servizio movies-chatbot dovrebbe essere uno dei servizi (se non l'unico) elencati.

bccf390b7099e73b.png

Puoi visualizzare i dettagli del servizio, come URL, configurazioni, log e altro ancora, facendo clic sul nome del servizio specifico (movies-chatbot nel nostro caso).

3709b596167cdaa0.png

In questo modo, il tuo chatbot di consigli sui film è ora implementato, scalabile e condivisibile. 🎉

9. Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.

10. Complimenti

Hai creato ed eseguito il deployment di un chatbot di consigli sui film basato su grafici e migliorato con l'IA generativa utilizzando Neo4j, Vertex AI e Gemini. Combinando le capacità di modellazione espressive di Neo4j con la potenza semantica degli embedding di Vertex AI e l'intelligenza di conversazione di Gemini, hai creato un sistema intuitivo e intelligente che comprende le query in linguaggio naturale e restituisce consigli sui film pertinenti al contesto.

In questo codelab:

  • È stato creato un knowledge graph completo e interconnesso da un set di dati di film reali
  • Embedding vettoriali generati e integrati per consentire la ricerca della somiglianza semantica
  • Ha sfruttato Gemini per potenziare l'interazione in linguaggio naturale
  • Ha creato un'interfaccia di chatbot semplice ma efficace utilizzando Gradio
  • Se vuoi, esegui il deployment dell'app utilizzando Google Cloud Run per la scalabilità e l'accesso

Questo approccio non è limitato ai film: la stessa architettura può essere estesa a libri, musica, prodotti, articoli accademici o a qualsiasi dominio in cui le relazioni e la semantica sono importanti. Con l'evoluzione dei modelli di IA generativa multimodali come Gemini, potrai arricchire le tue applicazioni con una comprensione più profonda, interazioni personalizzate e output in più formati.

Continua a esplorare, continua a creare e non dimenticare di rimanere al passo con le ultime novità di Neo4j, Vertex AI e Google Cloud per far fare un salto di qualità alle tue applicazioni intelligenti.

Documenti di riferimento