Codelab – tworzenie chatbota do rekomendacji filmów za pomocą Neo4j i Vertex AI
Informacje o tym ćwiczeniu (w Codelabs)
1. Omówienie
W tym ćwiczeniu w Codelab utworzysz inteligentnego chatbota do rekomendowania filmów, korzystając z Neo4j, Vertex AI i Gemini. Chatbot korzysta z grafu wiedzy Neo4j jako podstawy do reprezentowania filmów, aktorów, reżyserów, producentów, gatunków itp. Aby ulepszyć wyszukiwanie, wygenerujesz wektory dystrybucyjne z omówienia fabuły filmu za pomocą modelu text-embedding-004
Vertex AI.
Na koniec zintegrujesz Gemini, aby umożliwić korzystanie z interfejsu konwersacyjnego, w którym użytkownicy mogą zadawać pytania w języku naturalnym, np. „Co powinienem obejrzeć, jeśli podobał mi się film Interstellar?”, i otrzymywać spersonalizowane sugestie filmów na podstawie podobieństwa semantycznego i kontekstu graficznego.
W ramach tego ćwiczenia będziesz wykonywać czynności w kolejności:
- Tworzenie grafu wiedzy Neo4j z danymi dotyczącymi filmów
- wzbogacanie danych o filmach przez generowanie wektorów dystrybucyjnych tekstu na podstawie opisów filmów lub ich fabuł za pomocą wektorów dystrybucyjnych tekstu z Vertex AI;
- Utwórz interfejs chatbota Gradio, który wykorzystuje Gemini do wyszukiwania semantycznego i pobierania danych z Neo4j.
- Opcjonalnie możesz wdrożyć ją w Google Cloud Run jako samodzielną aplikację internetową, jak pokazano poniżej:
Czego się nauczysz
- Jak utworzyć graf wiedzy o filmach za pomocą Cypher i Neo4j.
- Jak używać Vertex AI do generowania wektorów dystrybucyjnych semantycznych tekstu.
- Jak zintegrować Neo4j i Gemini w celu inteligentnego wyszukiwania wektorowego.
- Jak utworzyć i uruchomić interfejs użytkownika konwersacyjnego chatbota za pomocą Gradio.
Czego potrzebujesz
- przeglądarka Chrome,
- konto Gmail,
- projekt Google Cloud z włączonymi płatnościami.
- bezpłatne konto Neo4j Aura DB,
- podstawowa znajomość poleceń terminala i Pythona;
Ten warsztat programistyczny przeznaczony dla deweloperów na wszystkich poziomach (w tym początkujących) wykorzystuje w przykładowej aplikacji język Python i Neo4j. Podstawowa znajomość języka Python i baz danych z grafami może być przydatna, ale do zrozumienia tych pojęć i prześledowania kursu nie jest wymagane żadne wcześniejsze doświadczenie.
2. Konfiguracja Neo4j AuraDB
Neo4j to najpopularniejsza natywna baza danych typu graf, która przechowuje dane w postaci sieci węzłów (obiektów) i relacji (połączeń między obiektami). Dzięki temu jest idealna do zastosowań, w których kluczowe znaczenie ma zrozumienie połączeń, np. w przypadku rekomendacji, wykrywania oszustw czy grafów wiedzy. W przeciwieństwie do relacyjnych lub dokumentowych baz danych, które opierają się na sztywnych tabelach lub hierarchicznych strukturach, elastyczny model grafu Neo4j umożliwia intuicyjne i wydajne przedstawianie złożonych, powiązanych ze sobą danych.
Zamiast porządkowania danych w wierszach i tablicach, jak w przypadku relacyjnych baz danych, Neo4j używa modelu grafu, w którym informacje są reprezentowane jako węzły (elementy) i relacje (połączenia między tymi elementami). Dzięki temu modelowi można wyjątkowo intuicyjnie pracować z danymi, które są ze sobą powiązane, np. z informacjami o osobach, miejscach, produktach lub, jak w naszym przypadku, o filmach, aktorach i gatunkach.
Na przykład w zbiorze danych o filmach:
- Węzeł może reprezentować element
Movie
,Actor
lubDirector
- Relacja może być typu
ACTED_IN
lubDIRECTED
Dzięki tej strukturze możesz łatwo zadawać pytania w rodzaju:
- W jakich filmach zagrał ten aktor?
- Kto pracował z Christopherem Nolanem?
- Jakie filmy są podobne na podstawie wspólnych aktorów lub gatunków?
Neo4j zawiera potężny język zapytań o nazwie Cypher, który został opracowany specjalnie do wykonywania zapytań do grafów. Cypher umożliwia wyrażanie złożonych wzorców i połączeń w sposób zwięzły i czytelny.
Neo4j oferuje wiele opcji wdrażania w zależności od potrzeb:
- Samodzielne zarządzanie: uruchom Neo4j w ramach własnej infrastruktury za pomocą Neo4j Desktop lub obrazu Dockera (lokalnie lub w własnej chmurze).
- Zarządzanie w chmurze: wdróż Neo4j w popularnych usługach chmurowych za pomocą ofert w Marketplace.
- W pełni zarządzana: użyj usługi Neo4j AuraDB, czyli w pełni zarządzanej bazy danych w chmurze jako usługi od firmy Neo4j, która zajmuje się tworzeniem, skalowaniem, tworzeniem kopii zapasowych i zabezpieczeniami.
W tym ćwiczeniu będziemy używać Neo4j AuraDB Free, bezpłatnej wersji AuraDB. Udostępnia ona w pełni zarządzaną instancję bazy danych typu graf z wystarczającą ilością miejsca na dane i funkcjami do tworzenia prototypów, uczenia się i małych aplikacji. Jest to idealne rozwiązanie do tworzenia chatbota do rekomendowania filmów na podstawie generatywnej AI.
W ramach tego ćwiczenia utworzysz bezpłatną instancję AuraDB, połączysz ją z aplikacją za pomocą danych logowania i użyjesz jej do przechowywania grafu wiedzy o filmach oraz wykonywania na nim zapytań.
Dlaczego wykresy?
W tradycyjnych bazach danych relacyjnych udzielenie odpowiedzi na pytania w rodzaju "Które filmy są podobne do Inception na podstawie wspólnej obsady lub gatunku?" wymagałoby wykonania złożonych operacji JOIN na wielu tabelach. Wraz ze wzrostem głębokości relacji spada wydajność i czytelność.
Bazy danych typu Neo4j są jednak skonstruowane tak, aby skutecznie przeszukiwać relacje, dzięki czemu są idealne do systemów rekomendacji, wyszukiwania semantycznego i inteligentnych asystentów. Pomagają one uchwycić kontekst rzeczywisty, np. sieci współpracy, wątki fabularne czy preferencje widzów, które trudno jest przedstawić za pomocą tradycyjnych modeli danych.
Łącząc te połączone dane z modelami LLM, takimi jak Gemini, oraz wektorowymi reprezentacjami z Vertex AI, możemy znacznie ulepszyć działanie chatbota, umożliwiając mu wnioskowanie, wyszukiwanie i odpowiadanie w bardziej spersonalizowany i trafny sposób.
Tworzenie bezpłatnej bazy danych Neo4j AuraDB
- Wejdź na https://console.neo4j.io.
- Zaloguj się na konto Google lub za pomocą adresu e-mail.
- Kliknij „Utwórz bezpłatną instancję”.
- Podczas przygotowywania instancji pojawi się wyskakujące okienko z danymi logowania do bazy danych.
Pobierz i bezpiecznie zapisz te informacje z wyskakującego okienka, ponieważ są one niezbędne do połączenia aplikacji z 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>
Tych wartości użyjesz w następnym kroku do skonfigurowania pliku .env w projekcie, aby uwierzytelniać się w Neo4j.
Neo4j AuraDB Free nadaje się do tworzenia aplikacji, eksperymentowania i stosowania na małą skalę, np. w tym Codelab. Oferuje ona duże limity użycia, obsługując do 200 000 węzłów i 400 000 związków. Chociaż zawiera wszystkie niezbędne funkcje potrzebne do tworzenia i wyszukiwania danych w grafie wiedzy, nie obsługuje zaawansowanych konfiguracji, takich jak niestandardowe wtyczki czy zwiększona ilość miejsca na dane. W przypadku zadań produkcyjnych lub większych zbiorów danych możesz przejść na wyższy abonament AuraDB, który zapewnia większą pojemność, wydajność i funkcje klasy korporacyjnej.
To koniec sekcji poświęconej konfigurowaniu backendu Neo4j AuraDB. W następnym kroku utworzymy projekt Google Cloud, sklonujemy repozytorium i skonfigurujemy niezbędne zmienne środowiskowe, aby przygotować środowisko programistyczne przed rozpoczęciem pracy z Codelab.
3. Zanim zaczniesz
Utwórz projekt
- W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud.
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności .
- Użyjesz Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane w bq. Kliknij Aktywuj Cloud Shell u góry konsoli Google Cloud.
- Po połączeniu z Cloud Shell sprawdź, czy jesteś już uwierzytelniony i czy projekt jest ustawiony na identyfikator Twojego projektu, używając tego polecenia:
gcloud auth list
- Aby sprawdzić, czy polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
- Jeśli projekt nie jest ustawiony, użyj tego polecenia:
gcloud config set project <YOUR_PROJECT_ID>
- Włącz wymagane interfejsy API, używając polecenia pokazanego poniżej. Może to potrwać kilka minut, więc zachowaj cierpliwość.
gcloud services enable cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com
Po pomyślnym wykonaniu polecenia powinien wyświetlić się komunikat podobny do tego:
Operation "operations/..." finished successfully.
Alternatywą dla polecenia gcloud jest konsola, w której możesz wyszukać poszczególne usługi lub skorzystać z tego linku.
Jeśli pominiesz któryś interfejs API, możesz go włączyć w trakcie implementacji.
Więcej informacji o poleceniach i użytkowaniu gcloud znajdziesz w dokumentacji.
Klonowanie repozytorium i konfigurowanie ustawień środowiska
Następnym krokiem jest sklonowanie przykładowego repozytorium, do którego będziemy się odwoływać w dalszej części tego samouczka. Zakładając, że jesteś w Cloud Shell, uruchom to polecenie w katalogu domowym:
git clone https://github.com/sidagarwal04/neo4j-vertexai-codelab.git
Aby uruchomić edytor, na pasku narzędzi w oknie Cloud Shell kliknij Otwórz edytor. W lewym górnym rogu kliknij pasek menu i wybierz Plik → Otwórz folder, jak pokazano na ilustracji:
Wybierz folder neo4j-vertexai-codelab
. Powinien się otworzyć folder z tymi plikami:
Następnie musimy skonfigurować zmienne środowiskowe, których będziemy używać w trakcie ćwiczeń. Kliknij plik example.env
. Powinieneś zobaczyć zawartość pokazaną poniżej:
NEO4J_URI=
NEO4J_USER=
NEO4J_PASSWORD=
NEO4J_DATABASE=
PROJECT_ID=
LOCATION=
Utwórz teraz nowy plik o nazwie .env
w tym samym folderze, w którym znajduje się plik example.env
, i skopiuj zawartość dotychczasowego pliku example.env. Zaktualizuj te zmienne:
NEO4J_URI
,NEO4J_USER
,NEO4J_PASSWORD
iNEO4J_DATABASE
:- Podaj te wartości, używając danych logowania podanych podczas tworzenia instancji Neo4j AuraDB Free w poprzednim kroku.
- W przypadku AuraDB Free wartość parametru
NEO4J_DATABASE
to zwykle neo4j. PROJECT_ID
iLOCATION
:- Jeśli uruchamiasz ćwiczenie w Google Cloud Shell, możesz pozostawić te pola puste, ponieważ zostaną one automatycznie wywnioskowane z aktywnej konfiguracji projektu.
- Jeśli uruchamiasz go lokalnie lub poza Cloud Shell, zaktualizuj parametr
PROJECT_ID
, podając identyfikator utworzonego wcześniej projektu Google Cloud, a następnie ustaw parametrLOCATION
na region wybrany dla tego projektu (np. us-central1).
Po wypełnieniu tych wartości zapisz plik .env
. Ta konfiguracja umożliwi Twojej aplikacji połączenie z usługami Neo4j i Vertex AI.
Ostatnim krokiem w konfigurowaniu środowiska programistycznego jest utworzenie środowiska wirtualnego Pythona i zainstalowanie wszystkich wymaganych zależności wymienionych w pliku requirements.txt
. Te zależności obejmują biblioteki potrzebne do pracy z Neo4j, Vertex AI, Gradio i innymi.
Najpierw utwórz środowisko wirtualne o nazwie .venv, uruchamiając to polecenie:
python -m venv .venv
Po utworzeniu środowiska należy je aktywować za pomocą tego polecenia
source .venv/bin/activate
Na początku prompta w terminalu powinien pojawić się ciąg (.venv), co oznacza, że środowisko jest aktywne. Na przykład: (.venv) yourusername@cloudshell:
Teraz zainstaluj wymagane zależności, uruchamiając:
pip install -r requirements.txt
Oto podsumowanie najważniejszych zależności wymienionych w pliku:
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
Gdy wszystkie zależności zostaną zainstalowane, Twoje lokalne środowisko Pythona zostanie w pełni skonfigurowane do uruchamiania skryptów i botów na potrzeby tego Codelab.
Świetnie! Możemy przejść do następnego kroku, czyli poznania zbioru danych i przygotowania go do tworzenia grafu oraz wzbogacania semantycznego.
4. Przygotowanie zbioru danych Movies
Naszym pierwszym zadaniem jest przygotowanie zbioru danych Filmy, którego użyjemy do zbudowania grafu wiedzy i zarządzania chatbotem z rekomendacjami. Zamiast zaczynać od zera, użyjemy istniejącego otwartego zbioru danych i na jego podstawie zbudujemy nowy model.
Używamy The Movies Dataset (Zbiór danych Movies) Rounaka Banika, znanego publicznego zbioru danych dostępnego na Kaggle. Zawiera metadane ponad 45 tys. filmów z TMDB, w tym informacje o obsadzie, ekipie filmowej, kluczowych słowach, ocenach i wiele innych.
Aby stworzyć niezawodny i skuteczny chatbot rekomendujący filmy, musisz zacząć od czystych, spójnych i uporządkowanych danych. Zbiór danych The Movies Dataset z Kaggle to bogaty zasób ponad 45 tys. rekordów filmów i szczegółowych metadanych, w tym gatunków, obsady, ekipy filmowej i innych informacji. Zawiera on jednak również szum, niespójności i zagnieżdżone struktury danych, które nie nadają się do modelowania grafów ani osadzania semantycznego.
Aby to osiągnąć, przetworzyliśmy i znormalizowaliśmy zbiór danych, aby był on odpowiedni do tworzenia grafu wiedzy Neo4j i generowania wysokiej jakości wektorów zastępczych. Ten proces obejmował:
- Usuwanie duplikatów i niekompletnych rekordów
- ujednolicenie kluczowych pól (np. nazw gatunków, nazw osób);
- spłaszczania złożonych zagnieżdżonych struktur (np. obsady i ekipy filmowej) w uporządkowane pliki CSV;
- Wybór reprezentatywnego podzbioru około 12 tys. filmów,aby nie przekroczyć limitów bezpłatnej wersji Neo4j AuraDB
Normalizowane dane wysokiej jakości pomagają w tym, aby:
- Jakość danych: minimalizuje błędy i niespójności, co pozwala na bardziej dokładne rekomendacje.
- Wydajność zapytań: uproszczona struktura zwiększa szybkość wyszukiwania i zmniejsza nadmiar
- Dokładność wektorów: czyste dane wejściowe prowadzą do bardziej znaczących i kontekstualnych wektorów
Oczyszczony i znormalizowany zbiór danych znajdziesz w folderze normalized_data/
w repozytorium GitHub. Ten zbiór danych jest też powielany w zasośniku Google Cloud Storage, aby można było łatwo uzyskać do niego dostęp w przyszłych skryptach Pythona.
Dane są już oczyszczone i gotowe do załadowania do Neo4j, więc możemy zacząć budować graf wiedzy o filmach.
5. Tworzenie grafu wiedzy Filmy
Aby umożliwić działanie chatbota do rekomendowania filmów na podstawie sztucznej inteligencji ogólnej, musimy uporządkować zbiór danych o filmach w sposób, który odzwierciedla bogatą sieć powiązań między filmami, aktorami, reżyserami, gatunkami i innymi metadanymi. W tej sekcji utworzymy w Neo4j Graf wiedzy o filmach, korzystając z przygotowanego wcześniej wyczyszczonego i znormalizowanego zbioru danych.
Do przetwarzania plików CSV hostowanych w publicznym zasobniku Google Cloud Storage (GCS) użyjemy funkcji LOAD CSV
w Neo4j. Pliki te reprezentują różne komponenty zbioru danych o filmach, takie jak filmy, gatunki, obsada, ekipa, firmy produkcyjne i oceny użytkowników.
Krok 1. Utwórz ograniczenia i indeksy
Przed importowaniem danych warto utworzyć ograniczenia i indeksy, aby zapewnić integralność danych i zoptymalizować wydajność zapytań.
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);
Krok 2. Zaimportuj metadane i relacje filmów
Zobaczmy, jak zaimportować metadane filmu za pomocą polecenia LOAD CSV. W tym przykładzie tworzone są węzły Filmu z kluczowymi atrybutami, takimi jak tytuł, opis, język i czas trwania:
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");
Podobnych poleceń Cypher można używać do importowania powiązanych elementów, takich jak gatunki, firmy produkcyjne, języki, kraje, obsada, ekipa i oceny.
Ładowanie pełnego wykresu za pomocą Pythona
Zamiast ręcznego wykonywania wielu zapytań Cypher, zalecamy użycie automatycznego skryptu Pythona udostępnionego w tym laboratorium kodu.
Skrypt graph_build.py
wczytuje cały zbiór danych z GCS do instancji Neo4j AuraDB, używając danych logowania z pliku .env
.
python graph_build.py
Skrypt kolejno wczyta wszystkie niezbędne pliki CSV, utworzy węzły i relacje oraz uporządkuje pełny graf wiedzy o filmach.
Sprawdzanie poprawności wykresu
Po załadowaniu możesz sprawdzić graf, wykonując proste zapytania Cypher, takie jak:
MATCH (m:Movie) RETURN m LIMIT 5;
MATCH (a:Actor)-[:ACTED_IN]->(m:Movie) RETURN a.name, m.title LIMIT 5;
Twój wykres powinien być teraz wypełniony filmami, osobami, gatunkami itp., aby można było go wzbogacić semantycznie w następnym kroku.
6. Generowanie i wczytywanie wektorów dystrybucyjnych w celu przeprowadzenia wyszukiwania według podobieństwa wektorowego
Aby umożliwić wyszukiwanie semantyczne w naszym czacie, musimy wygenerować wektory zastępcze dla opisów filmów. Te elementy zamieniają dane tekstowe w wektory liczbowe, które można porównywać pod kątem podobieństwa. Dzięki temu chatbot może wyszukiwać odpowiednie filmy, nawet jeśli zapytanie nie pasuje dokładnie do tytułu lub opisu.
⚠️ Uwaga dotycząca skuteczności
Generowanie wektorów w przypadku tysięcy opisów filmów w czasie rzeczywistym jest czasochłonne i wymagające dużych zasobów. Aby to ćwiczenie było efektywne i dostępne, z wykorzystaniem usługi Vertex AI z uprzednio obliczonego embeddingu
text-embedding-004
model i zapisać je w dostępnym publicznie pliku CSV.
Opcja 1. Załaduj wcześniej obliczone embeddingi za pomocą Cypher
Aby szybko dołączyć elementy do odpowiednich węzłów Movie
w Neo4j, uruchom w przeglądarce Neo4j to polecenie Cypher:
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)
To polecenie odczytuje wektory osadzania z pliku CSV i dołączy je jako właściwości (m.embedding
) do każdego węzła Movie
.
Opcja 2. Załaduj wbudowane modele za pomocą Pythona
Możesz też wczytać uczenia maszynowego za pomocą skryptu Pythona. To podejście jest przydatne, jeśli pracujesz w własnym środowisku lub chcesz zautomatyzować proces:
python load_embeddings.py
Ten skrypt odczytuje ten sam plik CSV z GCS i zapisze wbudowane dane w Neo4j za pomocą sterownika Neo4j w Pythonie.
[Opcjonalnie] Generowanie elementów do umieszczania samodzielnie (w przypadku eksploracji)
Jeśli chcesz się dowiedzieć, jak generowane są wektory, możesz zapoznać się z logiką w samym skrypcie generate_embeddings.py
. Używa on Vertex AI do umieszczania tekstu z opisem filmu za pomocą modelu text-embedding-004
.
Aby wypróbować to samodzielnie, otwórz i uruchom sekcję kodu służącą do generowania kodu embed. Jeśli używasz Cloud Shell, możesz skomentować ten wiersz, ponieważ Cloud Shell jest już uwierzytelnione za pomocą Twojego aktywnego konta:
# os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "./service-account.json"
⚠️ Przeprowadzenie pełnego procesu generowania wbudowanych obiektów spowoduje wykorzystanie limitu Vertex AI i może zająć dużo czasu, zwłaszcza w przypadku tysięcy rekordów.
Gdy w Neo4j zostaną załadowane wektory, twój graf wiedzy o filmach stanie się świadomy semantycznie – będzie gotowy do obsługi zaawansowanego wyszukiwania z użyciem języka naturalnego na podstawie podobieństwa wektorowego.
7. Czatbot z rekomendacjami filmowymi
Gdy masz już gotowy graf wiedzy i wektory, możesz połączyć je w jednym interfejsie konwersacyjnym – czacie z rekomendacjami filmów.
Chatbot został zaimplementowany przy użyciu Pythona i Gradio, lekkiej platformy do tworzenia interfejsów internetowych. Główna logika znajduje się w skrypcie chatbot.py
, który łączy się z Twoim wystąpieniem Neo4j AuraDB i wykonuje wyszukiwanie podobieństwa wektorów na podstawie wektorów filmów na podstawie promptów w języku naturalnym.
Chatbot korzysta z Gemini, aby zwiększać wygodę użytkowników przez dopracowywanie zapytań i formatowanie odpowiedzi. Wyniki wyszukiwania są zwracane przez Neo4j przy użyciu kombinacji kontekstu grafu i podobieństwa wektorowego.
Uruchamianie czatbota lokalnie
Aby uruchomić chatbota, aktywuj środowisko wirtualne (jeśli nie zostało to jeszcze zrobione) i uruchom:
python chatbot.py
Powinny się wyświetlić dane wyjściowe podobne do tych:
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()`.
💡 Jeśli widzisz ostrzeżenia dotyczące zastąpienia funkcji związanych z allow_flagging, możesz je na razie zignorować – aplikacja będzie działać.
Interakcja z czatbotem
Po uruchomieniu otwórz adres URL wyświetlany w terminalu. Zazwyczaj jest to: 👉 http://127.0.0.1:7860
Pojawi się prosty interfejs czatu, w którym możesz wpisywać zapytania w języku naturalnym, takie jak:
- „Poleć mi thrillery science fiction, takie jak Incepcja”
- „Zaproponuj romantyczny film z Tomem Hanksem”
- „Chcę obejrzeć optymistyczny dramat rodzinny”
Czatbot przetwarza zapytanie, wykonuje wyszukiwanie wektorowe na podstawie opisów filmów i wyświetla listę najbardziej odpowiednich filmów, w tym ich tytuły, opisy i lata wydania.
Każda rekomendacja jest wyświetlana na karcie z ładnie sformatowanymi wynikami.
Twój czatbot działa teraz lokalnie, więc masz w pełni funkcjonalny system rekomendacji filmów oparty na generatywnej AI, który łączy to, co najlepsze z grafów wiedzy, modeli LLM (Gemini) i wyszukiwania semantycznego, korzystając z wektorów Vertex AI.
8. (Opcjonalnie) Wdrażanie w Google Cloud Run
Jeśli chcesz, aby Twój chatbot do rekomendacji filmów był publicznie dostępny w internecie, możesz go wdrożyć w Google Cloud Run – w ramach tej w pełni zarządzanej platformy bezserwerowej automatycznie skalujesz swoją aplikację.
Przed wdrożeniem sprawdź, czy w projekcie znajdują się te pliki (są one już dostępne w tym repozytorium):
requirements.txt
– zawiera listę wszystkich zależności Pythona wymaganych do uruchomienia aplikacji, w tym Neo4j i Vertex AI.Dockerfile
– definiuje środowisko kontenera, w tym obraz podstawowy, instalację zależności i sposób uruchamiania aplikacji.
Krok 1. Skonfiguruj zmienne środowiskowe
W terminalu ustaw te zmienne środowiskowe (zastąp wartości zastępcze rzeczywistymi ustawieniami projektu):
# Set your Google Cloud project ID
export GCP_PROJECT='your-project-id' # Change this
# Set your preferred deployment region
export GCP_REGION='us-central1'
Krok 2. Utwórz rejestr z elementami i utwórz kontener
# 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"
To polecenie tworzy pakiet aplikacji za pomocą Dockerfile
i przesyła obraz kontenera do Google Cloud Artifact Registry.
Krok 3. Wdróż w Cloud Run
Przed wdrożeniem upewnij się, że wszystkie wymagane zmienne środowiskowe (np. Uprawnienia Neo4j i ustawienia projektu są wymienione w pliku .env
.
Aby dynamicznie przekonwertować plik .env
do formatu zgodnego z flagą --set-env-vars
, użyj tego fragmentu kodu:
ENV_VARS=$(grep -v '^#' .env | sed 's/ *= */=/g' | xargs -I{} echo -n "{},")
ENV_VARS=${ENV_VARS%,}
Teraz wdróż aplikację:
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"
Otwieranie czatu
Po wdrożeniu Cloud Run zwróci publiczny adres URL usługi w formacie:
https://movies-chatbot-[UNIQUE_ID].${GCP_REGION}.run.app
Otwórz adres URL w przeglądarce, aby uzyskać dostęp do chatbota. Powinieneś zobaczyć to samo środowisko Gradio działające w chmurze, które może odbierać zapytania i odpowiadać na nie rekomendacjami filmów.
Uwagi i wskazówki
- Upewnij się, że podczas kompilacji
Dockerfile
działapip install -r requirements.txt
. - Jeśli nie używasz Cloud Shell, musisz uwierzytelnić swoje środowisko za pomocą konta usługi z uprawnieniami Vertex AI i Artifact Registry.
- Logi i dane dotyczące wdrożenia możesz monitorować w sekcji Konsola Google Cloud > Cloud Run.
W konsoli Google Cloud możesz też otworzyć Cloud Run, aby zobaczyć listę usług w Cloud Run. Usługa movies-chatbot
powinna być jedną z wymienionych usług (jeśli nie jedyną).
Aby wyświetlić szczegóły usługi, takie jak adres URL, konfiguracje, dzienniki i inne, kliknij nazwę konkretnej usługi (w naszym przypadku movies-chatbot
).
Twój chatbot z rekomendacjami filmów jest teraz wdrożony, skalowalny i udostępniony do użytku innym osobom. 🎉
9. Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby wykorzystane w tym poście, wykonaj te czynności:
- W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
- Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń.
- W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
10. Gratulacje
Udało Ci się utworzyć i wdrożyć chatbota do rekomendowania filmów opartego na grafie i wykorzystującego generatywną AI za pomocą Neo4j, Vertex AI i Gemini. Połączenie możliwości modelowania Neo4j z potęgą semantyki w ramach osadzania Vertex AI i inteligencji konwersacyjnej Gemini pozwoliło Ci stworzyć intuicyjny i inteligentny system, który rozumie zapytania w języku naturalnym i zwraca trafne rekomendacje filmów w kontekście.
W tym ćwiczeniu z programowania:
- na podstawie rzeczywistego zbioru danych filmów utworzyć bogaty, połączony graf wiedzy;
- wygenerowane i zintegrowane wektory dystrybucyjne, aby umożliwić wyszukiwanie semantyczne po podobieństwie;
- Korzystanie z Gemini do obsługi interakcji w języku naturalnym
- Utworzenie prostego, ale zaawansowanego interfejsu chatbota za pomocą Gradio
- Opcjonalnie wdrożenie aplikacji za pomocą Google Cloud Run w celu zapewnienia skalowalności i dostępu
To podejście nie jest ograniczone do filmów – tę samą architekturę można zastosować w przypadku książek, muzyki, produktów, prac naukowych lub dowolnej dziedziny, w której relacje i semantyka mają znaczenie. Wraz z rozwojem multimodalnych modeli generatywnej AI, takich jak Gemini, będziesz mieć możliwość wzbogacania swoich aplikacji o głębsze zrozumienie, spersonalizowane interakcje i wyjścia w wielu formatach.
Kontynuuj eksplorowanie i tworzenie, ale pamiętaj też o śledzeniu najnowszych informacji o Neo4j, Vertex AI i Google Cloud, aby rozwijać swoje inteligentne aplikacje.