Codelab - Neo4j ve Vertex AI'ı kullanarak film önerisi sohbet robotu oluşturma

Codelab - Neo4j ve Vertex AI'ı kullanarak film önerisi sohbet robotu oluşturma

Bu codelab hakkında

subjectSon güncelleme Nis 4, 2025
account_circleYazan: Romin Irani and Siddhant Agarwal(GDE)

1. Genel Bakış

Bu codelab'de, Neo4j, Vertex AI ve Gemini'yi birlikte kullanarak akıllı bir film önerisi sohbet robotu oluşturacaksınız. Sohbet robotu, filmleri, aktörleri, yönetmenleri, yapımcıları, türleri vb. temsil etmek için temel olarak bir Neo4j Bilgi Grafiği kullanır. Arama deneyimini iyileştirmek için Vertex AI'ın text-embedding-004 modelini kullanarak filmin konusuna genel bakışlardan vektör gömmeleri oluşturursunuz.

Son olarak, kullanıcıların "Yıldızlararası'nı beğendiysem ne izlemeliyim?" gibi doğal dil sorularını sorabileceği ve anlamsal benzerliğe ve grafik tabanlı bağlama dayalı kişiselleştirilmiş film önerileri alabileceği bir sohbet arayüzü oluşturmak için Gemini'yi entegre edersiniz.

Codelab'de aşağıdaki gibi adım adım bir yaklaşım uygulayacaksınız:

  1. Filmlerle ilgili verilerle Neo4j Bilgi Grafiği oluşturma
  2. Vertex AI'ın metin gömmelerini kullanarak film özetlerine/konularına metin gömmeleri ekleyerek film verilerini zenginleştirin.
  3. Neo4j'dan anlamsal arama ve getirme için her şeyi bir araya getiren, Gemini tarafından desteklenen bir Gradio chatbot arayüzü oluşturun.
  4. İsteğe bağlı olarak, aşağıda gösterildiği gibi bağımsız bir web uygulaması olarak Google Cloud Run'a dağıtabilirsiniz:

Neler öğreneceksiniz?

  • Cypher ve Neo4j kullanarak film bilgi grafiği oluşturma.
  • Metin için semantik yerleştirmeler oluşturmak üzere Vertex AI'ı kullanma.
  • Akıllı vektör tabanlı getirme için Neo4j ve Gemini'yi entegre etme.
  • Gradio ile etkileşimli chatbot kullanıcı arayüzü oluşturma ve çalıştırma.

Gerekenler

  • Chrome web tarayıcısı
  • Gmail hesabı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi
  • Ücretsiz Neo4j Aura DB hesabı
  • Terminal komutları ve Python hakkında temel düzeyde bilgi sahibi olma

Her seviyeden geliştirici (yeni başlayanlar dahil) için tasarlanan bu codelab'de, örnek uygulamada Python ve Neo4j kullanılmaktadır. Python ve grafik veritabanı hakkında temel düzeyde bilgi sahibi olmak faydalı olabilir ancak kavramları anlamak veya takip etmek için önceden deneyim sahibi olmanız gerekmez. 121747afa89e0e6.png

2. Neo4j AuraDB'yi kurma

Neo4j, verileri bir düğüm (nesne) ve ilişki (nesneler arasındaki bağlantılar) ağı olarak depolayan lider bir yerel grafik veritabanı olduğundan, bağlantıları anlamanın önemli olduğu kullanım alanları (ör. öneriler, sahtekarlık algılama, bilgi grafikleri) için idealdir. Katı tablolara veya hiyerarşik yapılara dayanan ilişkisel ya da belge tabanlı veritabanlarının aksine Neo4j'ın esnek grafik modeli, karmaşık ve birbirine bağlı verilerin sezgisel ve verimli bir şekilde gösterilmesine olanak tanır.

Neo4j, verileri ilişkisel veritabanları gibi satır ve tablolarda düzenlemek yerine, bilgilerin düğümler (varlıklar) ve ilişkiler (bu varlıklar arasındaki bağlantılar) olarak gösterildiği bir grafik modeli kullanır. Bu model, kişiler, yerler, ürünler veya bizim durumumuzda filmler, aktörler ve türler gibi doğal olarak bağlantılı verilerle çalışmayı son derece sezgisel hale getirir.

Örneğin, bir film veri kümesindeki:

  • Düğümler Movie, Actor veya Director öğelerini temsil edebilir.
  • İlişki ACTED_IN veya DIRECTED olabilir

Bu yapı, aşağıdaki gibi soruları kolayca sormanıza olanak tanır:

  • Bu oyuncu hangi filmlerde oynadı?
  • Christopher Nolan ile kimler çalıştı?
  • Ortak oyunculara veya türlere göre benzer filmler hangileridir?

Neo4j, grafikleri sorgulamak için özel olarak tasarlanmış Cypher adlı güçlü bir sorgu dili ile birlikte gelir. Cypher, karmaşık kalıpları ve bağlantıları kısa ve okunaklı bir şekilde ifade etmenize olanak tanır.

Neo4j, ihtiyaçlarınıza bağlı olarak birden fazla dağıtım seçeneği sunar:

  • Kendi kendine yönetilen: Neo4j Desktop'u kullanarak veya Docker görüntüsü olarak (şirket içinde veya kendi bulutunuzda) Neo4j'ı kendi altyapınızda çalıştırın. 397a3c535b52d3f6.png
  • Bulut tarafından yönetilen: Marketplace tekliflerini kullanarak Neo4j'ı popüler bulut sağlayıcılara dağıtın.
  • Tümüyle yönetilen: Neo4j'ın tümüyle yönetilen bulut veritabanı hizmeti olan Neo4j AuraDB'yi kullanın. Bu hizmet, temel hazırlığı, ölçeklemeyi, yedeklemeleri ve güvenliği sizin yerinize yönetir.

Bu codelab'de, AuraDB'nin ücretsiz katmanı olan Neo4j AuraDB Free'i kullanacağız. Prototip oluşturma, öğrenme ve küçük uygulamalar geliştirme için yeterli depolama alanı ve özelliklere sahip, tümüyle yönetilen bir grafik veritabanı örneği sağlar. Bu, üretken yapay zeka destekli bir film önerisi sohbet robotu oluşturma hedefimiz için mükemmel bir seçimdir.

Ücretsiz bir AuraDB örneği oluşturacak, bağlantı kimlik bilgilerini kullanarak uygulamanıza bağlayacak ve bu laboratuvar boyunca film bilgi grafiğinizi depolamak ve sorgulamak için kullanacaksınız.

Neden grafikler?

Geleneksel ilişkisel veritabanlarında, "Ortak oyuncu kadrosu veya türe göre Inception'a benzer hangi filmler var?" gibi soruları yanıtlamak için birden fazla tabloda karmaşık JOIN işlemleri gerekir. İlişkilerin derinliği arttıkça performans ve okunabilirlik azalır.

Ancak Neo4j gibi grafik veritabanları, ilişkileri verimli bir şekilde tarayacak şekilde tasarlanmıştır. Bu da onları öneri sistemleri, semantik arama ve akıllı asistanlar için ideal hale getirir. Geleneksel veri modelleri kullanılarak temsil edilmesi zor olabilecek gerçek dünya bağlamını (ör. ortak çalışma ağları, hikaye hatları veya izleyici tercihleri) yakalamanıza yardımcı olurlar.

Bu bağlı verileri Gemini gibi büyük dil modelleriyle ve Vertex AI'daki vektör yerleştirmeleriyle birleştirerek chatbot deneyimini güçlendirebiliriz. Böylece chatbot'un daha kişiselleştirilmiş ve alakalı bir şekilde akıl yürütmesine, bilgi almasına ve yanıt vermesine olanak tanıyabiliriz.

Neo4j AuraDB Ücretsiz Oluşturma

  1. https://console.neo4j.io adresine gidin.
  2. Google Hesabınız veya e-posta adresinizle giriş yapın.
  3. "Ücretsiz Örnek Oluştur"u tıklayın.
  4. Örnek hazırlanırken veritabanınızın bağlantı kimlik bilgilerini gösteren bir pop-up pencere açılır.

Uygulamanızı Neo4j'a bağlamak için gerekli olan aşağıdaki bilgileri pop-up'tan indirip güvenli bir şekilde kaydettiğinizden emin olun:

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>

Bu değerleri, sonraki adımda Neo4j ile kimlik doğrulama yapmak için projenizdeki .env dosyasını yapılandırmak üzere kullanacaksınız.

a1e29e56e6c412fc.png

Neo4j AuraDB Free, geliştirme, deneme ve bu codelab gibi küçük ölçekli uygulamalar için idealdir. 200.000 düğüm ve 400.000 ilişki destekleyen geniş kullanım sınırları sunar. Bilgi grafiği oluşturmak ve sorgulamak için gereken tüm temel özellikleri sunsa da özel eklentiler veya daha fazla depolama alanı gibi gelişmiş yapılandırmaları desteklemez. Üretim iş yükleri veya daha büyük veri kümeleri için daha fazla kapasite, performans ve kurumsal düzeyde özellikler sunan daha üst düzey bir AuraDB planına geçebilirsiniz.

Neo4j AuraDB arka ucunuzu ayarlama bölümü tamamlandı. Bir sonraki adımda, kod laboratuvarımıza başlamadan önce bir Google Cloud projesi oluşturacağız, deposu klonlayacağız ve geliştirme ortamınızı hazırlamak için gerekli ortam değişkenlerini yapılandıracağız.

3. Başlamadan önce

Proje oluşturma

  1. Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
  2. Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin .
  3. Google Cloud'da çalışan ve bq ile önceden yüklenmiş bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir'i tıklayın.

Cloud Shell&#39;i etkinleştir düğmesi resmi

  1. Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulanıp doğrulanmadığını ve projenin proje kimliğinize ayarlanıp ayarlanmadığını kontrol edin:
gcloud auth list
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
  1. Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
  1. Aşağıda gösterilen komutu kullanarak gerekli API'leri etkinleştirin. Bu işlem birkaç dakika sürebilir. Lütfen bekleyin.
gcloud services enable cloudresourcemanager.googleapis.com \
                       
servicenetworking.googleapis.com \
                       
run.googleapis.com \
                       
cloudbuild.googleapis.com \
                       
cloudfunctions.googleapis.com \
                       
aiplatform.googleapis.com

Komut başarıyla yürütüldüğünde aşağıdakine benzer bir mesaj görürsünüz:

Operation "operations/..." finished successfully.

gcloud komutunun alternatifi, her ürünü arayarak veya bu bağlantıyı kullanarak konsoldan geçmektir.

Atlanan bir API varsa uygulama sırasında istediğiniz zaman etkinleştirebilirsiniz.

gcloud komutları ve kullanımı için belgelere bakın.

Depoyu klonlama ve ortam ayarlarını yapma

Sonraki adım, codelab'in geri kalanında referans vereceğimiz örnek deposunu klonlamaktır. Cloud Shell'de olduğunuzu varsayarak ana dizininizden aşağıdaki komutu verin:

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

Düzenleyiciyi başlatmak için Cloud Shell penceresinin araç çubuğunda Düzenleyiciyi Aç'ı tıklayın. Sol üst köşedeki menü çubuğunu tıklayın ve aşağıda gösterildiği gibi Dosya → Klasör Aç'ı seçin:

66221fd0d0e5202f.png

neo4j-vertexai-codelab klasörünü seçin. Klasör, aşağıdaki gibi aşağıdaki dosyalarla açılır:

e49542efd70de22e.png

Ardından, codelab boyunca kullanılacak ortam değişkenlerini ayarlamamız gerekir. example.env dosyasını tıkladığınızda, içeriği aşağıdaki gibi görürsünüz:

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

Ardından, example.env dosyasıyla aynı klasörde .env adlı yeni bir dosya oluşturun ve mevcut example.env dosyasının içeriğini kopyalayın. Ardından aşağıdaki değişkenleri güncelleyin:

  • NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD ve NEO4J_DATABASE:
  • Önceki adımda Neo4j AuraDB Free örneği oluşturulurken sağlanan kimlik bilgilerini kullanarak bu değerleri doldurun.
  • NEO4J_DATABASE, AuraDB Free için genellikle neo4j olarak ayarlanır.
  • PROJECT_ID ve LOCATION:
  • Codelab'i Google Cloud Shell'dan çalıştırıyorsanız etkin proje yapılandırmanızdan otomatik olarak anlaşılacağı için bu alanları boş bırakabilirsiniz.
  • Yerel olarak veya Cloud Shell dışında çalıştırıyorsanız PROJECT_ID değerini daha önce oluşturduğunuz Google Cloud projesinin kimliğiyle güncelleyin ve LOCATION değerini bu proje için seçtiğiniz bölgeye (ör. us-central1) ayarlayın.

Bu değerleri doldurduktan sonra .env dosyasını kaydedin. Bu yapılandırma, uygulamanızın hem Neo4j hem de Vertex AI hizmetlerine bağlanmasına olanak tanır.

Geliştirme ortamınızı oluşturmanın son adımı, bir Python sanal ortamı oluşturmak ve requirements.txt dosyasında listelenen tüm gerekli bağımlılıkları yüklemektir. Bu bağımlılıklar arasında Neo4j, Vertex AI, Gradio ve daha fazlasıyla çalışmak için gereken kitaplıklar bulunur.

Öncelikle aşağıdaki komutu çalıştırarak .venv adlı bir sanal ortam oluşturun:

python -m venv .venv

Ortam oluşturulduktan sonra, oluşturulan ortamı aşağıdaki komutla etkinleştirmemiz gerekir.

source .venv/bin/activate

Artık terminal isteminizin başında, ortamın etkin olduğunu belirten (.venv) ifadesini göreceksiniz. Örneğin: (.venv) yourusername@cloudshell:

Ardından, aşağıdaki komutu çalıştırarak gerekli bağımlılıkları yükleyin:

pip install -r requirements.txt

Dosyada listelenen temel bağımlılıkların anlık görüntüsünü aşağıda bulabilirsiniz:

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

Tüm bağımlılıklar başarıyla yüklendikten sonra yerel Python ortamınız, bu kod laboratuvarındaki komut dosyalarını ve chatbot'u çalıştıracak şekilde tamamen yapılandırılır.

Mükemmel. Artık bir sonraki adıma geçmeye hazırız. Veri kümesini anlamak ve grafik oluşturma ve semantik zenginleştirme için hazırlamak istiyoruz.

4. Filmler veri kümesini hazırlama

İlk işimiz, bilgi grafiğini oluşturmak ve öneri chatbot'umuzu desteklemek için kullanacağımız Filmler veri kümesini hazırlamaktır. Sıfırdan başlamak yerine mevcut bir açık veri kümesini kullanıp bu veri kümesini temel alacağız.

Kaggle'da herkese açık olarak bulunan ve iyi bilinen bir veri kümesi olan Rounak Banik'in Filmler Veri Kümesi'ni kullanıyoruz. Bu API, oyuncu kadrosu, ekip, anahtar kelimeler, derecelendirmeler ve daha fazlası dahil olmak üzere TMDB'deki 45.000'den fazla filmin meta verilerini içerir.

9e3a1dc4c286af1b.png

Güvenilir ve etkili bir film önerisi sohbet robotu oluşturmak için temiz, tutarlı ve yapılandırılmış verilerle başlamak önemlidir. Kaggle'daki Filmler Veri Kümesi, 45.000'den fazla film kaydı ve tür, oyuncu kadrosu, ekip vb. dahil olmak üzere ayrıntılı meta veriler içeren zengin bir kaynaktır. Ancak grafik modelleme veya semantik yerleştirme için ideal olmayan gürültü, tutarsızlık ve iç içe yerleştirilmiş veri yapıları da içerir.

Bu sorunu gidermek için Neo4j bilgi grafiği oluşturmaya ve yüksek kaliteli yerleştirmeler oluşturmaya uygun olmasını sağlamak amacıyla veri kümesini önceden işleyip normalleştirdik. Bu işlemde şunlar yer aldı:

  • Yinelenen ve eksik kayıtları kaldırma
  • Anahtar alanları (ör. tür adları, kişi adları) standartlaştırma
  • Karmaşık iç içe yerleştirilmiş yapıları (ör. oyuncu kadrosu ve ekip) yapılandırılmış CSV'lere düzleştirme
  • Neo4j AuraDB Free sınırlarında kalmak için yaklaşık 12.000 filmden oluşan temsili bir alt küme seçme

Yüksek kaliteli ve normalleştirilmiş veriler aşağıdakileri sağlamaya yardımcı olur:

  • Veri kalitesi: Daha doğru öneriler sunmak için hataları ve tutarsızlıkları en aza indirir.
  • Sorgu performansı: Basitleştirilmiş yapı, getirme hızını artırır ve fazlalığı azaltır
  • Gömme doğruluğu: Temiz girişler, daha anlamlı ve bağlama uygun vektör gömmelerine yol açar.

Temizlenmiş ve normalleştirilmiş veri kümesine bu GitHub deposunun normalized_data/ klasöründen erişebilirsiniz. Bu veri kümesi, gelecekteki Python komut dosyalarında kolayca erişilebilmesi için bir Google Cloud Storage paketine de yansıtılır.

Veriler temizlenip hazır olduğunda Neo4j'a yükleyip film bilgi grafiğimizi oluşturmaya başlayabiliriz.

5. Filmler Bilgi Grafiği&#39;ni oluşturma

Yapay zeka destekli film önerisi sohbet robotumuzu desteklemek için film veri kümemizi filmler, oyuncular, yönetmenler, türler ve diğer meta veriler arasındaki zengin bağlantı ağını yakalayacak şekilde yapılandırmamız gerekir. Bu bölümde, daha önce hazırladığınız temizlenmiş ve normalleştirilmiş veri kümesini kullanarak Neo4j'da bir Film Bilgi Grafiği oluşturacağız.

Herkese açık bir Google Cloud Storage (GCS) paketinde barındırılan CSV dosyalarını beslemek için Neo4j'ın LOAD CSV özelliğini kullanacağız. Bu dosyalar; film veri kümesinin filmler, türler, oyuncu kadrosu, ekip, yapım şirketleri ve kullanıcı puanları gibi farklı bileşenlerini temsil eder.

1. Adım: Kısıtlar ve dizine eklemeler oluşturun

Verileri içe aktarmadan önce, veri bütünlüğünü zorunlu kılmak ve sorgu performansını optimize etmek için kısıtlar ve dizinler oluşturmak iyi bir uygulamadır.

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);

2. Adım: Film Meta Verilerini ve İlişkilerini İçe Aktarma

LOAD CSV komutunu kullanarak film meta verilerini nasıl içe aktardığımıza göz atalım. Bu örnekte, başlık, genel bakış, dil ve süre gibi temel özelliklere sahip Film düğümleri oluşturulur:

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");

Tür, yapım şirketi, dil, ülke, oyuncu kadrosu, ekip ve derecelendirme gibi ilgili öğeleri içe aktarmak için benzer Cypher komutları kullanılabilir.

Python üzerinden tam grafiği yükleme

Birden fazla Cypher sorgusunu manuel olarak çalıştırmak yerine bu kod laboratuvarındaki otomatik Python komut dosyasını kullanmanızı öneririz.

graph_build.py komut dosyası, .env dosyanızdaki kimlik bilgilerini kullanarak GCS'deki veri kümesinin tamamını Neo4j AuraDB örneğinize yükler.

python graph_build.py

Komut dosyası, gerekli tüm CSV dosyalarını sırayla yükler, düğümler ve ilişkiler oluşturur ve film bilgi grafiğinizi tamamen yapılandırır.

Grafiğinizi doğrulama

Yükledikten sonra aşağıdaki gibi basit Cypher sorguları çalıştırarak grafiğinizi doğrulayabilirsiniz:

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

Artık grafiğinizin filmler, kişiler, türler ve daha fazlasıyla doldurulduğunu ve sonraki adımda anlamsal olarak zenginleştirilmeye hazır olduğunu göreceksiniz.

6. Vektör Benzerliği Araması yapmak için yerleştirilmiş öğeler oluşturma ve yükleme

Sohbet robotumuzda anlamsal aramayı etkinleştirmek için film özetlerine yönelik vektör gömmelerini oluşturmamız gerekir. Bu yerleştirmeler, metin verilerini benzerlik açısından karşılaştırılabilen sayısal vektörlere dönüştürür. Böylece sorgu başlık veya açıklamayla tam olarak eşleşmese bile sohbet botunun alakalı filmleri alabilmesi sağlanır.

⚠️ Performansla ilgili not

Binlerce film açıklaması için gerçek zamanlı olarak embedding oluşturmak hem zaman alıcı hem de yoğun kaynak gerektirir. Bu kod laboratuvarını verimli ve erişilebilir hale getirmek için Vertex AI'ın

text-embedding-004

modelini kullanarak verileri topladı ve herkese açık bir CSV dosyasında depoladı.

bcca07eaee60787b.png

1. seçenek: Önceden hesaplanmış yerleştirmeleri Cypher aracılığıyla yükleme

Neo4j'daki ilgili Movie düğümlerine yerleştirmeleri hızlıca eklemek için Neo4j Tarayıcı'da aşağıdaki Cypher komutunu çalıştırın:

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)

Bu komut, CSV'deki yerleştirme vektörlerini okur ve her Movie düğümüne özellik (m.embedding) olarak ekler.

2. Seçenek: Python'u kullanarak yerleşik öğeleri yükleme

Sağlanan Python komut dosyasını kullanarak embeddings'i programatik olarak da yükleyebilirsiniz. Bu yaklaşım, kendi ortamınızda çalışıyorsanız veya süreci otomatikleştirmek istiyorsanız yararlıdır:

python load_embeddings.py

Bu komut dosyası, GCS'den aynı CSV dosyasını okur ve Python Neo4j sürücüsünü kullanarak yerleştirmeleri Neo4j'a yazar.

[İsteğe bağlı] Yerleşimlerini kendiniz oluşturun (Keşif için)

Yerleşimlerin nasıl oluşturulduğunu öğrenmek istiyorsanız generate_embeddings.py komut dosyasının mantığını keşfedebilirsiniz. Her filme genel bakış metnini text-embedding-004 modelini kullanarak yerleştirmek için Vertex AI'ı kullanır.

Bunu kendiniz denemek için kodun yerleşik oluşturma bölümünü açıp çalıştırın. Cloud Shell'de çalışıyorsanız Cloud Shell zaten etkin hesabınız üzerinden kimlik doğrulaması yaptığından aşağıdaki satırı yorumlayabilirsiniz:

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

⚠️ Tam gömülü oluşturma işlemini çalıştırmak Vertex AI kotasını tüketir ve özellikle binlerce kayıt olduğunda önemli ölçüde zaman alabilir.

Yerleşimler Neo4j'a yüklendikten sonra film bilgi grafiğiniz semantik farkında hale gelir ve vektör benzerliğini kullanarak güçlü doğal dil aramayı desteklemeye hazır olur.

7. Film Önerisi Chatbot&#39;u

Bilgi grafiğiniz ve yerleştirilmeleriniz hazır olduğunda, tüm bunları bir sohbet arayüzünde (Film Önerisi Sohbet Bot'unuz) bir araya getirmenin zamanı gelmiştir.

Sohbet robotu, Python ve web tabanlı kullanıcı arayüzleri oluşturmaya yönelik hafif bir çerçeve olan Gradio kullanılarak uygulanır. Ana mantık, Neo4j AuraDB örneğinize bağlanan ve doğal dil istemlerine dayalı olarak film yerleştirmelerinde vektör benzerliği araması gerçekleştiren chatbot.py komut dosyasında bulunur.

Sohbet robotu, sorguları hassaslaştırarak ve yanıtları biçimlendirerek kullanıcı deneyimini iyileştirmek için Gemini'yi kullanır. Arama sonuçları, Neo4j'dan grafik bağlamı ve vektör benzerliğinin bir kombinasyonu kullanılarak döndürülür.

Chatbot'u yerel olarak çalıştırma

Sohbet botunu başlatmak için sanal ortamınızı etkinleştirin (henüz yapmadıysanız) ve aşağıdaki komutu çalıştırın:

python chatbot.py

Aşağıdakine benzer bir çıkış görürsünüz:

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()`.

💡 allow_flagging ile ilgili desteğin sonlandırılmasıyla ilgili uyarılar görürseniz şimdilik bunları yoksayabilirsiniz. Uygulama çalışmaya devam eder.

Chatbot ile etkileşime geçme

Çalıştırdıktan sonra terminalinizde gösterilen URL'yi açın. Genellikle: 👉 http://127.0.0.1:7860

Aşağıdaki gibi doğal dil sorguları yazabileceğiniz basit bir sohbet arayüzü ile karşılaşırsınız:

  • "Bana Başlangıç gibi bilim kurgu gerilim filmleri öner"
  • "Tom Hanks'in oynadığı romantik bir film öner"
  • "İyi hissettiren bir aile draması izlemek istiyorum"

c76b6c6e2bcb25d9.png

Sohbet robotu sorguyu işler, film özetlerinde anlamsal vektör araması yapar ve başlıkları, özet bilgileri ve gösterim yılları dahil olmak üzere en alakalı filmlerin listesini gösterir.

Her öneri, düzgün biçimlendirilmiş sonuçlarla kart tarzında bir düzende oluşturulur.

Sohbet botunuz yerel olarak çalıştığına göre artık Vertex AI yerleştirmelerini kullanarak bilgi grafikleri, LLM'ler (Gemini) ve anlamsal arama özelliklerinin en iyilerini birleştiren, tamamen işlevsel bir üretken yapay zeka destekli film öneri sistemi oluşturabilirsiniz.

8. (İsteğe bağlı) Google Cloud Run&#39;a dağıtma

Film Önerisi Sohbet Bot'unuza web'de herkese açık erişim sağlamak istiyorsanız uygulamanızı otomatik olarak ölçeklendiren, tümüyle yönetilen ve sunucusuz bir platform olan Google Cloud Run'a dağıtabilirsiniz. 121747afa89e0e6.png

Dağıtmadan önce projenizde aşağıdaki dosyaların bulunduğundan emin olun (bu dosyalar zaten bu depoya eklenmiştir):

  • requirements.txt: Neo4j ve Vertex AI dahil olmak üzere uygulamanın çalıştırılması için gereken tüm Python bağımlılıkları listelenir.
  • Dockerfile: Temel görüntü, bağımlılık kurulumu ve uygulamanın nasıl başlatıldığı dahil olmak üzere kapsayıcı ortamını tanımlar.

1. Adım: Ortam Değişkenlerini Ayarlama

Terminalinizde aşağıdaki ortam değişkenlerini ayarlayın (yer tutucu değerlerini gerçek proje ayarlarınızla değiştirin):

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

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

2. Adım: Artifact Registry'yi oluşturun ve kapsayıcıyı derleyin

# 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"

Bu komut, uygulamanızı Dockerfile kullanarak paketler ve container görüntüsünü Google Cloud Artifact Registry'ye yükler.

3. Adım: Cloud Run'a dağıtma

Dağıtım yapmadan önce, gerekli tüm ortam değişkenlerinin (ör. Neo4j kimlik bilgileri, proje ayarları) .env dosyanızda listelenir.

.env dosyanızı --set-env-vars işaretiyle uyumlu bir biçime dinamik olarak dönüştürmek için aşağıdaki snippet'i kullanın:

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

Ardından uygulamanızı dağıtın:

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"

Chatbot'a erişme

Dağıtıldıktan sonra Cloud Run, şu biçimde herkese açık bir hizmet URL'si döndürür:

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

Chatbot'unuza erişmek için URL'yi tarayıcınızda açın. Sorgu alıp film önerileriyle yanıt verebilen, bulutta çalışan aynı Gradio kullanıcı arayüzünü görürsünüz.

Notlar ve İpuçları

  • Derleme sırasında Dockerfile'ün pip install -r requirements.txt çalıştırıldığından emin olun.
  • Cloud Shell'i kullanmıyorsanız Vertex AI ve Artifact Registry izinlerine sahip bir hizmet hesabı kullanarak ortamınızın kimliğini doğrulamanız gerekir.
  • Dağıtım günlüklerini ve metriklerini Google Cloud Console > Cloud Run'dan izleyebilirsiniz.

Google Cloud Console'dan Cloud Run'u da ziyaret edebilirsiniz. Burada Cloud Run'daki hizmetlerin listesini görebilirsiniz. movies-chatbot hizmeti, burada listelenen hizmetlerden biri (tek hizmet değilse) olmalıdır.

bccf390b7099e73b.png

Belirli bir hizmet adını (bizim durumumuzda movies-chatbot) tıklayarak hizmetin URL'si, yapılandırmaları, günlükleri ve diğer ayrıntılarını görüntüleyebilirsiniz.

3709b596167cdaa0.png

Bu işlemle, Film Önerileri Sohbet Bot'unuz artık yayılmış, ölçeklenebilir ve paylaşılabilir durumdadır. 🎉

9. Temizleme

Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:

  1. Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
  2. Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

10. Tebrikler

Neo4j, Vertex AI ve Gemini'yi kullanarak graf destekli, GenAI destekli bir film önerisi sohbet robotu oluşturdunuz ve başarıyla dağıttınız. Neo4j'ın etkileyici modelleme özelliklerini Vertex AI embedding'lerinin anlamsal gücü ve Gemini'nin sohbet zekasıyla birleştirerek doğal dil sorgularını anlayan ve bağlama uygun film önerileri sunan sezgisel ve akıllı bir sistem oluşturdunuz.

Bu codelab'de şunları yapacaksınız:

  • Gerçek dünyadaki bir film veri kümesinden zengin ve birbirine bağlı bir bilgi grafiği oluşturdu
  • Anlamsal benzerlik aramasını etkinleştirmek için oluşturulan ve entegre edilen vektör yerleşimleri
  • Doğal dil etkileşimini desteklemek için Gemini'den yararlandı
  • Gradio'yu kullanarak basit ancak güçlü bir chatbot arayüzü oluşturdu
  • İsteğe bağlı olarak ölçeklenebilirlik ve erişim için uygulamayı Google Cloud Run'u kullanarak dağıttı

Bu yaklaşım yalnızca filmlerle sınırlı değildir. Aynı mimari, kitaplar, müzik, ürünler, akademik makaleler veya ilişkilerin ve anlamların önemli olduğu herhangi bir alana genişletilebilir. Gemini gibi çok modlu genel yapay zeka modelleri gelişmeye devam ettikçe uygulamalarınızı daha derin bir anlayış, kişiselleştirilmiş etkileşimler ve çok formatlı çıkışlarla zenginleştirebilirsiniz.

Keşfetmeye ve uygulama geliştirmeye devam edin. Akıllı uygulamalarınızı bir üst seviyeye çıkarmak için Neo4j, Vertex AI ve Google Cloud'daki en son gelişmelerden haberdar olmayı unutmayın.

Referans dokümanları