Codelab - Neo4j ve Vertex AI'ı kullanarak film önerisi sohbet robotu oluşturma
Bu codelab hakkında
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:
- Filmlerle ilgili verilerle Neo4j Bilgi Grafiği oluşturma
- Vertex AI'ın metin gömmelerini kullanarak film özetlerine/konularına metin gömmeleri ekleyerek film verilerini zenginleştirin.
- Neo4j'dan anlamsal arama ve getirme için her şeyi bir araya getiren, Gemini tarafından desteklenen bir Gradio chatbot arayüzü oluşturun.
- İ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.
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
veyaDirector
öğelerini temsil edebilir. - İlişki
ACTED_IN
veyaDIRECTED
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.
- 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
- https://console.neo4j.io adresine gidin.
- Google Hesabınız veya e-posta adresinizle giriş yapın.
- "Ücretsiz Örnek Oluştur"u tıklayın.
- Ö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.
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
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- 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 .
- 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'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
- 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
- Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- 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:
neo4j-vertexai-codelab
klasörünü seçin. Klasör, aşağıdaki gibi aşağıdaki dosyalarla açılır:
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
veNEO4J_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
veLOCATION
:- 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 veLOCATION
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.
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'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ı.
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'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"
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'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.
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
'ünpip 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.
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.
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:
- Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
- İ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.