1. Genel Bakış
Bu codelab'de Neo4j, Google Vertex AI ve Gemini'ın gücünü birleştirerek akıllı bir film önerisi sohbet robotu oluşturacaksınız. Bu sistemin temelinde, filmleri, oyuncuları, yönetmenleri, türleri ve daha fazlasını birbirine bağlı düğümler ve ilişkilerden oluşan zengin bir ağ aracılığıyla modelleyen bir Neo4j Bilgi Grafiği yer alır.
Semantik anlayışla kullanıcı deneyimini iyileştirmek için Vertex AI'ın text-embedding-004 modelini (veya daha yeni bir modeli) kullanarak film konusu özetlerinden vektör yerleştirmeleri oluşturacaksınız. Bu yerleştirmeler, hızlı ve benzerliğe dayalı alma için Neo4j'de dizine eklenir.
Son olarak, Gemini'ı entegre ederek kullanıcıların "Interstellar'ı beğendiysem ne izlemeliyim?" gibi doğal dil soruları sorabileceği ve anlamsal benzerlik ile grafiğe dayalı bağlama göre kişiselleştirilmiş film önerileri alabileceği bir sohbet arayüzü oluşturacaksınız.
Bu codelab'de aşağıdaki gibi adım adım bir yaklaşım kullanacaksınız:
- Filmle ilgili öğeler ve ilişkiler içeren bir Neo4j bilgi grafiği oluşturma
- Vertex AI'ı kullanarak film özetleri için metin yerleştirmeleri oluşturma/yükleme
- Vektör arama ile grafiğe dayalı Cypher yürütmeyi birleştiren, Gemini destekli bir Gradio chatbot arayüzü uygulama
- (İsteğe bağlı) Uygulamayı Cloud Run'a bağımsız bir web uygulaması olarak dağıtma
Neler öğreneceksiniz?
- Cypher ve Neo4j kullanarak film bilgi grafiği oluşturma ve doldurma
- Semantik metin yerleştirmeleri oluşturmak ve bunlarla çalışmak için Vertex AI'ı kullanma
- GraphRAG kullanarak akıllı alma için LLM'leri ve Bilgi Grafikleri'ni birleştirme
- Gradio kullanarak kullanıcı dostu bir sohbet arayüzü oluşturma
- İsteğe bağlı olarak Google Cloud Run'a dağıtma
Gerekenler
- Chrome web tarayıcısı
- Gmail hesabı
- Faturalandırmanın etkin olduğu bir Google Cloud projesi
- Ücretsiz bir Neo4j Aura DB hesabı
- Terminal komutları ve Python hakkında temel bilgi (faydalı ancak zorunlu değil)
Her seviyeden geliştirici (yeni başlayanlar dahil) için tasarlanan bu codelab'de örnek uygulamada Python ve Neo4j kullanılır. Python ve grafik veritabanları hakkında temel bilgi sahibi olmak faydalı olsa da kavramları anlamak veya takip etmek için önceden deneyim sahibi olmanız gerekmez.

2. Neo4j AuraDB'yi kurma
Neo4j, verileri bir düğüm (varlık) ve ilişki (varlıklar arasındaki bağlantılar) ağı olarak depolayan, alanında lider bir yerel grafik veritabanıdır. Bu nedenle, bağlantıları anlamanın önemli olduğu kullanım alanları (ör. öneriler, sahtekarlık tespiti, bilgi grafikleri vb.) için idealdir. Sert tablolara veya hiyerarşik yapılara dayanan ilişkisel ya da belge tabanlı veritabanlarının aksine, Neo4j'nin 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ırlar ve tablolar halinde düzenlemek yerine grafik modeli kullanır. Bu modelde bilgiler düğümler (varlıklar) ve ilişkiler (bu varlıklar arasındaki bağlantılar) olarak gösterilir. Bu model, doğası gereği bağlantılı olan verilerle (ör. kişiler, yerler, ürünler veya bizim durumumuzda filmler, aktörler ve türler) çalışmayı son derece kolaylaştırır.
Örneğin, bir film veri kümesinde:
- Bir düğüm
Movie,ActorveyaDirectoröğesini temsil edebilir. - İlişki
ACTED_INveyaDIRECTEDolabilir.

Bu yapı, aşağıdaki gibi soruları kolayca sormanıza olanak tanır:
- Bu oyuncu hangi filmlerde rol aldı?
- Christopher Nolan ile kimler çalıştı?
- Ortak oyunculara veya türlere göre benzer filmler hangileridir?
Neo4j, özellikle grafikleri sorgulamak için tasarlanmış Cypher adlı güçlü bir sorgu diliyle birlikte gelir. Cypher, karmaşık kalıpları ve bağlantıları kısa ve okunabilir bir şekilde ifade etmenizi sağlar. Örneğin: Bu Cypher sorgusu, aktörün, filmin ve rollerle ilgili ayrıntılarla ilişkilerinin benzersiz bir şekilde oluşturulmasını sağlamak ve tekrarları önlemek için MERGE kullanır.
MERGE (a:Actor {name: "Tom Hanks"})
MERGE (m:Movie {title: "Toy Story", released: 1995})
MERGE (a)-[:ACTED_IN {roles: ["Woody"]}]->(m);
Neo4j, ihtiyaçlarınıza bağlı olarak birden fazla dağıtım seçeneği sunar:
- Kendiniz yönetin: Neo4j Desktop'ı kullanarak veya Docker görüntüsü olarak (şirket içinde ya da kendi bulutunuzda) Neo4j'yi kendi altyapınızda çalıştırın.
- Bulut tarafından yönetilen: Marketplace tekliflerini kullanarak Neo4j'yi popüler bulut sağlayıcılarına dağıtın.
- Tümüyle yönetilen: Neo4j'nin tümüyle yönetilen bulut Hizmet Olarak Veritabanı olan Neo4j AuraDB'yi kullanın. Bu hizmet, temel hazırlık, ölçeklendirme, yedekleme ve güvenlik işlemlerini sizin yerinize gerçekleştirir.
Bu codelab'de, AuraDB'nin ücretsiz katmanı olan Neo4j AuraDB Free'yi kullanacağız. Prototip oluşturma, öğrenme ve küçük uygulamalar geliştirme için yeterli depolama alanına ve özelliklere sahip, tümüyle yönetilen bir grafik veritabanı örneği sunar. Bu, üretken yapay zeka destekli bir film önerisi chatbot'u oluşturma hedefimiz için mükemmeldir.
Bu laboratuvar boyunca ücretsiz bir AuraDB örneği oluşturacak, bağlantı kimlik bilgilerini kullanarak uygulamanıza bağlayacak ve film bilgi grafiğinizi depolayıp sorgulamak için kullanacaksınız.
Neden grafikler?
Geleneksel ilişkisel veritabanlarında, "Hangi filmler, ortak oyuncu kadrosu veya tür temelinde Başlangıç filmine benziyor?" gibi soruların yanıtlanması birden fazla tablo arasında karmaşık JOIN işlemleri yapılmasını gerektirir. İlişkilerin derinliği arttıkça performans ve okunabilirlik düşer.
Ancak Neo4j gibi grafik veritabanları, ilişkileri verimli bir şekilde geçmek için oluşturulmuştur. Bu nedenle, öneri sistemleri, anlamsal arama ve akıllı asistanlar için doğal bir seçimdir. Geleneksel veri modelleri kullanılarak gösterilmesi zor olabilecek işbirliği ağları, hikaye akışları veya izleyici tercihleri gibi gerçek dünya bağlamını yakalamaya yardımcı olurlar.
Bu bağlı verileri Gemini gibi LLM'ler ve Vertex AI'dan alınan vektör yerleştirmeleri ile birleştirerek chatbot deneyimini güçlendirebiliriz. Böylece chatbot, daha kişiselleştirilmiş ve alakalı bir şekilde akıl yürütebilir, bilgi alabilir ve yanıt verebilir.
Neo4j AuraDB Free Creation
- https://console.neo4j.io adresini ziyaret edin.
- Google Hesabınız veya e-postanızla giriş yapın.
- "Ücretsiz örnek oluştur"u tıklayın.
- Örnek sağlama işlemi sırasında, veritabanınızın bağlantı kimlik bilgilerini gösteren bir pop-up pencere açılır.
Uygulamanızı Neo4j'ye bağlamak için gerekli olan aşağıdaki ayrıntıları pop-up penceresinden 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 projenizdeki .env dosyasını Neo4j ile kimlik doğrulama için yapılandırmak üzere kullanacaksınız.

Neo4j AuraDB Free, geliştirme, deneme ve bu codelab gibi küçük ölçekli uygulamalar için uygundur. 200.000 düğüme ve 400.000 ilişkiye kadar destek sunan cömert kullanım sınırları vardır. Bilgi grafiği oluşturmak ve sorgulamak için gereken tüm temel özellikleri sağlasa da özel eklentiler veya artırılmış depolama 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 katman bir AuraDB planına geçebilirsiniz.
Böylece Neo4j AuraDB arka ucunuzu ayarlama bölümü tamamlanır. Sonraki adımda, codelab'e başlamadan önce geliştirme ortamınızı hazırlamak için bir Google Cloud projesi oluşturacak, depoyu klonlayacak ve 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. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin .
- bq'nun önceden yüklendiği, Google Cloud'da çalışan 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ğrulandığını ve projenin proje kimliğinize ayarlandığı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 ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Aşağıdaki 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 "Operation .... finished successfully" (İşlem başarıyla tamamlandı) mesajını görmeniz gerekir.
Gcloud komutuna alternatif olarak, her ürünü arayarak veya bu bağlantıyı kullanarak konsolu kullanabilirsiniz.
Herhangi bir API atlanırsa 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 depoyu 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 Open Editor'ı (Düzenleyiciyi Aç) tıklayın. Sol üst köşedeki menü çubuğunu tıklayın ve Dosya → Klasörü Aç'ı seçin.

neo4j-vertexai-codelab klasörünü seçtiğinizde klasörün aşağıdaki gibi benzer bir yapıyla açıldığını görürsünüz:

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=
Şimdi 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. Şimdi aşağıdaki değişkenleri güncelleyin:
NEO4J_URI,NEO4J_USER,NEO4J_PASSWORDveNEO4J_DATABASE:- Önceki adımda Neo4j AuraDB Free örneği oluşturulurken sağlanan kimlik bilgilerini kullanarak bu değerleri girin.
NEO4J_DATABASE, AuraDB Free için genellikle neo4j olarak ayarlanır.PROJECT_IDveLOCATION:- Codelab'i Google Cloud Shell'den çalıştırıyorsanız bu alanları boş bırakabilirsiniz. Bu alanlar, etkin proje yapılandırmanızdan otomatik olarak çıkarılır.
- Yerel olarak veya Cloud Shell dışında çalışıyorsanız
PROJECT_IDkısmını daha önce oluşturduğunuz Google Cloud projesinin kimliğiyle güncelleyin veLOCATIONkısmını 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ı ayarlamanı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 diğerleriyle ç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, aşağıdaki komutla oluşturulan ortamı etkinleştirmemiz gerekir.
source .venv/bin/activate
Artık terminal isteminizin başında (.venv) ifadesini görmeniz gerekir. Bu ifade, ortamın etkin olduğunu gösterir. Örneğin: (.venv) yourusername@cloudshell:
Şimdi 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 codelab'deki komut dosyalarını ve chatbot'u çalıştıracak şekilde tamamen yapılandırılır.
Harika! Şimdi bir sonraki adıma geçmeye hazırız: Veri kümesini anlama ve grafik oluşturma ile semantik zenginleştirme için hazırlama.
4. Filmler veri kümesini hazırlama
İlk görevimiz, bilgi grafiği 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ümesi üzerinde çalışacağız.
Kaggle'da bulunan, herkese açık ve iyi bilinen bir veri kümesi olan Rounak Banik'in The Movies Dataset'ini kullanıyoruz. Oyuncular, 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 Botu oluşturmak için temiz, tutarlı ve yapılandırılmış verilerle başlamak önemlidir. Kaggle'daki The Movies Dataset, 45.000'den fazla film kaydı ve türler, oyuncular, ekip gibi ayrıntılı meta veriler içeren zengin bir kaynak olsa da grafik modelleme veya semantik yerleştirme için ideal olmayan gürültü, tutarsızlıklar ve iç içe yerleştirilmiş veri yapıları da içerir.
Bu sorunu çözmek için veri kümesini önceden işledik ve normalleştirdik. Böylece veri kümesi, Neo4j bilgi grafiği oluşturmaya ve yüksek kaliteli yerleştirmeler üretmeye uygun hale geldi. Bu işlemde:
- 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. oyuncular ve ekip) yapılandırılmış CSV'lere düzleştirme
- Neo4j AuraDB Free sınırları içinde kalmak için yaklaşık 12.000 filmden oluşan temsili bir alt küme seçme
Yüksek kaliteli ve normalleştirilmiş veriler şunları sağlamaya yardımcı olur:
- Veri kalitesi: Daha doğru öneriler için hataları ve tutarsızlıkları en aza indirir.
- Sorgu performansı: Basitleştirilmiş yapı, alma hızını artırır ve gereksizliği azaltır.
- Yerleştirme doğruluğu: Temiz girişler, daha anlamlı ve bağlamsal vektör yerleştirmeleri sağlar.
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 kolay erişim için bir Google Cloud Storage paketinde de yansıtılır.
Veriler temizlenip hazır hale getirildikten sonra Neo4j'ye yüklemeye ve film bilgi grafiğimizi oluşturmaya başlayabiliriz.
5. Filmler Bilgi Grafiği Oluşturma
Üretken yapay zeka destekli film önerisi chatbot'umuzu kullanabilmek için film veri setimizi filmler, oyuncular, yönetmenler, türler ve diğer meta veriler arasındaki zengin bağlantı ağını yakalayacak şekilde yapılandırmamız gerekiyor. Bu bölümde, daha önce hazırladığınız temizlenmiş ve normalleştirilmiş veri kümesini kullanarak Neo4j'de Filmler Bilgi Grafiği oluşturacağız.
Herkese açık bir Google Cloud Storage (GCS) paketinde barındırılan CSV dosyalarını almak için Neo4j'nin LOAD CSV özelliğini kullanacağız. Bu dosyalar, film veri kümesinin farklı bileşenlerini (ör. filmler, türler, oyuncu kadrosu, ekip, yapım şirketleri ve kullanıcı puanları) temsil eder.
1. adım: Kısıtlamalar ve dizinler 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ıtlamalar 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 ilişkilerini içe aktarın
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 çalışma süresi gibi önemli özelliklere sahip film düğümleri oluşturulur:
LOAD CSV WITH HEADERS FROM "https://storage.googleapis.com/neo4j-vertexai-codelab/normalized_data/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");
Benzer şekilde, ilgili CSV'leri ve Cypher sorgularını kullanarak Türler, Yapım Şirketleri, Konuşulan Diller, Ülkeler, Oyuncular, Ekip ve Kullanıcı Puanları gibi diğer öğeleri de içe aktarıp bağlayabilirsiniz.
Python ile Tam Grafiği Yükleme
Birden fazla Cypher sorgusunu manuel olarak çalıştırmak yerine bu codelab'de sağlanan otomatik Python komut dosyasını kullanmanızı öneririz.
Komut dosyası graph_build.py, .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'leri sırayla yükler, düğümler ve ilişkiler oluşturur ve eksiksiz film bilgi grafiğinizi yapılandırır.
|
|
Grafiğinizi Doğrulama
Yükleme işleminden sonra aşağıdaki komut dosyasını çalıştırarak grafiğinizi doğrulayabilirsiniz:
python validate_graph.py
Bu işlem, grafiğinizde neler olduğuna dair hızlı bir özet sunar: kaç film, aktör, tür ve ACTED_IN, DIRECTED gibi ilişkilerin bulunduğunu göstererek içe aktarma işleminizin başarılı olmasını sağlar.
📦 Node Counts:
Movie: 11997 nodes
ProductionCompany: 7961 nodes
Genre: 20 nodes
SpokenLanguage: 100 nodes
Country: 113 nodes
Person: 92663 nodes
Actor: 81165 nodes
Director: 4846 nodes
Producer: 5981 nodes
User: 671 nodes
🔗 Relationship Counts:
HAS_GENRE: 28479 relationships
PRODUCED_BY: 22758 relationships
PRODUCED_IN: 14702 relationships
HAS_LANGUAGE: 16184 relationships
ACTED_IN: 191307 relationships
DIRECTED: 5047 relationships
PRODUCED: 6939 relationships
RATED: 90344 relationships
Grafiğinizde artık filmler, kişiler, türler ve daha fazlası yer alıyor. Bir sonraki adımda semantik olarak zenginleştirilmeye hazır!
6. Vektör benzerliği araması yapmak için yerleştirilmiş öğeler oluşturma ve yükleme
Chatbot'umuzda semantik aramayı etkinleştirmek için film özetlerinin vektör yerleştirmelerini 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 chatbot'un alakalı filmleri alması mümkün olur.

1. seçenek: Önceden hesaplanmış gömmeleri Cypher aracılığıyla yükleme
Yerleştirmeleri Neo4j'deki ilgili Movie düğümlerine 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, yerleştirme vektörlerini CSV'den okur ve her Movie düğümüne özellik (m.embedding) olarak ekler.
2. seçenek: Python kullanarak gömmeleri yükleme
Ayrıca, sağlanan Python komut dosyasını kullanarak yerleştirmeleri programatik olarak da yükleyebilirsiniz. Bu yaklaşım, kendi ortamınızda çalışıyorsanız veya süreci otomatikleştirmek istiyorsanız kullanışlıdır:
python load_embeddings.py
Bu komut dosyası, GCS'den aynı CSV'yi okur ve Python Neo4j sürücüsünü kullanarak yerleştirmeleri Neo4j'ye yazar.
[İsteğe bağlı] Yerleştirme İşlemlerini Kendiniz Oluşturun (Keşif İçin)
Yerleştirmelerin nasıl oluşturulduğunu merak ediyorsanız generate_embeddings.py komut dosyasındaki mantığı inceleyebilirsiniz. text-embedding-004 modelini kullanarak her film özet metnini yerleştirmek için Vertex AI'ı kullanır.
Kendiniz denemek için kodun yerleştirme oluşturma bölümünü açıp çalıştırın. Cloud Shell'de çalışıyorsanız Cloud Shell, etkin hesabınız üzerinden zaten kimliği doğrulanmış olduğundan aşağıdaki satırı yorum olarak ekleyebilirsiniz:
# os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "./service-account.json"
Yerleştirmeler Neo4j'ye yüklendikten sonra film bilgi grafiğiniz anlamsal olarak farkında hale gelir. Böylece, vektör benzerliğini kullanarak güçlü doğal dil aramalarını desteklemeye hazır olur.
7. Film Önerisi Sohbet Robotu
Bilgi grafiğiniz ve vektör yerleştirmeleriniz hazır olduğunda, her şeyi bir araya getirerek tam işlevsel bir sohbet arayüzü oluşturmanın zamanı gelir. Bu arayüz, üretken yapay zeka destekli Film Önerisi Chatbot'unuzdur.
Bu chatbot, sezgisel kullanıcı arayüzleri oluşturmak için kullanılan hafif bir web çerçevesi olan Gradio kullanılarak Python'da uygulanır. Temel mantık, app.py içinde yer alır. Bu, Neo4j AuraDB örneğinize bağlanır ve doğal dil sorgularını işleyip yanıtlamak için Google Vertex AI ile Gemini'ı kullanır.
Nasıl Çalışır?
- Kullanıcı, doğal dilde bir sorgu yazıyorör. "Recommend me sci-fi thrillers like Interstellar" (Bana Interstellar gibi bilim kurgu gerilim filmleri öner)
- Vertex AI'ın
text-embedding-004modelini kullanarak sorgu için vektör yerleştirme oluşturma - Semantik olarak benzer filmleri almak için Neo4j'de vektör araması yapma
- Gemini'ı kullanarak:
- Sorguyu bağlam içinde yorumlama
- Vektör arama sonuçlarına ve Neo4j şemasına dayalı özel bir Cypher sorgusu oluşturma
- İlgili grafik verilerini (ör.aktörler, yönetmenler, türler) ayıklamak için sorguyu yürütün.
- Sonuçları kullanıcı için sohbet tarzında özetleme

GraphRAG (Grafik Almayla Artırılmış Üretim) olarak bilinen bu karma yaklaşım, daha doğru, bağlamsal ve açıklanabilir öneriler üretmek için semantik alma ve yapılandırılmış akıl yürütmeyi birleştirir.
Chatbot'u yerel olarak çalıştırma
Sanal ortamınızı etkinleştirin (henüz etkin değilse) ve ardından şu komutla chatbot'u başlatın:
python app.py
Şuna benzer bir çıkış alırsınız:
Vector index 'overview_embeddings' already exists. No need to create a new one.
* Running on local URL: http://0.0.0.0:8080
To create a public link, set `share=True` in `launch()`.
💡 Chatbot'u harici olarak paylaşmak için app.py'deki launch() işlevinde share=True'ı ayarlayın.
Chatbot ile etkileşim kurma
Chatbot arayüzüne erişmek için terminalinizde gösterilen yerel URL'yi (genellikle 👉 http://0.0.0.0:8080) açın.
Şu gibi sorular sormayı deneyin:
- "Interstellar'ı beğendiysem ne izlemeliyim?"
- "Nora Ephron'un yönettiği bir romantik film öner"
- "Tom Hanks'in oynadığı bir aile filmi izlemek istiyorum"
- "Yapay zekanın yer aldığı gerilim filmlerini bul"

Chatbot:
✅ Sorguyu anlama
✅ Yerleştirmeleri kullanarak semantik olarak benzer film konularını bulma
✅ İlgili grafik bağlamını getirmek için bir Cypher sorgusu oluşturup çalıştırma
✅ Saniyeler içinde samimi ve kişiselleştirilmiş bir öneri döndürün.
Mevcut işlevleriniz
Şu özellikleri birleştiren GraphRAG destekli bir film chatbot'u oluşturdunuz:
- Semantik alaka düzeyi için Vektör araması
- Neo4j ile bilgi grafiği çıkarımı
- Gemini aracılığıyla LLM özellikleri
- Gradio ile sorunsuz bir sohbet arayüzü
Bu mimari, üretken yapay zeka destekli daha gelişmiş arama, öneri veya muhakeme sistemlerine genişletebileceğiniz bir temel oluşturur.
8. (İsteğe bağlı) Google Cloud Run'a dağıtma

Film Önerisi Chatbot'unuzu herkese açık hale getirmek istiyorsanız uygulamanızı otomatik olarak ölçeklendiren ve altyapıyla ilgili tüm endişeleri ortadan kaldıran, tümüyle yönetilen sunucusuz bir platform olan Google Cloud Run'a dağıtabilirsiniz.
Bu dağıtımda kullanılanlar:
requirements.txt— Python bağımlılıklarını (Neo4j, Vertex AI, Gradio vb.) tanımlamak içinDockerfile: Uygulamayı paketlemek için.env.yaml— çalışma zamanında ortam değişkenlerini güvenli bir şekilde iletmek için
1. adım: Hazırlık .env.yaml
Kök dizininizde .env.yaml adlı bir dosya oluşturun ve şu gibi içerikler ekleyin:
NEO4J_URI: "neo4j+s://<your-aura-db-uri>"
NEO4J_USER: "neo4j"
NEO4J_PASSWORD: "<your-password>"
PROJECT_ID: "<your-gcp-project-id>"
LOCATION: "<your-gcp-region>" # e.g. us-central1
💡 Bu biçim, daha ölçeklenebilir, sürüm kontrolü yapılabilir ve okunabilir olduğundan --set-env-vars biçimine göre tercih edilir.
2. adım: Ortam değişkenlerini ayarlayın
Terminalinizde aşağıdaki ortam değişkenlerini ayarlayın (yer tutucu değerleri 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ı oluşturun
# 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 kapsayıcı görüntüsünü Google Cloud Artifact Registry'ye yükler.
3. adım: Cloud Run'a dağıtma
Şimdi çalışma zamanı yapılandırması için .env.yaml dosyasını kullanarak 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 \
--env-vars-file=.env.yaml
Chatbot'a erişme
Dağıtıldıktan sonra Cloud Run, aşağıdaki gibi bir herkese açık URL sağlar:
https://movies-reco-[UNIQUE_ID].${GCP_REGION}.run.app
Dağıtılan Gradio sohbet robotu arayüzünüze erişmek için bu URL'yi tarayıcınızda açın. Arayüz, GraphRAG, Gemini ve Neo4j kullanarak film önerilerini işlemeye hazırdır.
Notlar ve İpuçları
Dockerfileöğenizin derleme sırasındapip install -r requirements.txtçalıştığından emin olun.- Cloud Shell'i kullanmıyorsanız ortamınızda Vertex AI ve Artifact Registry izinlerine sahip bir hizmet hesabı kullanarak kimlik doğrulaması yapmanız gerekir.
- Dağıtım günlüklerini ve metriklerini Google Cloud Console > Cloud Run'dan izleyebilirsiniz.
Google Cloud Console'dan Cloud Run'ı da ziyaret edebilirsiniz. Bu durumda, Cloud Run'daki hizmetlerin listesini görürsünüz. movies-chatbot hizmeti, orada listelenen hizmetlerden biri (tek hizmet değilse) olmalıdır.

Belirli bir hizmet adını (bizim örneğimizde movies-chatbot) tıklayarak URL, yapılandırmalar, günlükler gibi hizmet ayrıntılarını görüntüleyebilirsiniz.

Böylece, Film Önerisi Chatbot'unuz artık dağıtılabilir, ölçeklenebilir ve paylaşılabilir. 🎉
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 Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
10. Tebrikler
Neo4j, Vertex AI ve Gemini kullanarak GraphRAG destekli, üretken yapay zeka ile geliştirilmiş bir film önerisi sohbet robotunu başarıyla oluşturup dağıttınız. Neo4j'nin grafiğe özgü modelleme özelliklerini Vertex AI aracılığıyla semantik arama ve Gemini aracılığıyla doğal dil akıl yürütme ile birleştirerek temel aramanın ötesine geçen akıllı bir sistem oluşturdunuz. Bu sistem kullanıcı niyetini anlar, bağlı veriler üzerinde akıl yürütür ve sohbet tarzında yanıt verir.
Bu codelab'de şunları yaptınız:
✅ Filmleri, aktörleri, türleri ve ilişkileri modellemek için Neo4j'de gerçek dünya film bilgisi grafiği oluşturma
✅ Vertex AI'ın metin yerleştirme modellerini kullanarak film konusu özetleri için oluşturulan vektör yerleştirmeleri
✅ Daha derin ve çok adımlı akıl yürütme için vektör araması ve LLM tarafından oluşturulan Cypher sorgularını birleştiren GraphRAG'i uyguladık.
✅ Kullanıcı sorularını yorumlamak, Cypher sorguları oluşturmak ve grafik sonuçlarını doğal dilde özetlemek için Gemini entegre edildi.
✅ Gradio'yu kullanarak sezgisel bir sohbet arayüzü oluşturma
✅ Ölçeklenebilir ve sunucusuz barındırma için isteğe bağlı olarak sohbet botunuzu Google Cloud Run'a dağıttıysanız
Sırada ne var?
Bu mimari yalnızca film önerileriyle sınırlı değildir. Aşağıdakiler için de kullanılabilir:
- Kitap ve müzik keşif platformları
- Akademik araştırma asistanları
- Ürün öneri motorları
- Sağlık, finans ve hukuk alanlarında bilgi asistanları
Karmaşık ilişkiler ve zengin metin verilerinin olduğu her yerde, bilgi grafikleri + LLM'ler + anlamsal yerleştirmeler kombinasyonu yeni nesil akıllı uygulamalara güç verebilir.
Gemini gibi çok formatlı üretken yapay zeka modelleri geliştikçe, gerçekten insan odaklı sistemler oluşturmak için daha da zengin bağlam, resim, konuşma ve kişiselleştirme özellikleri ekleyebileceksiniz.
Keşfetmeye ve geliştirmeye devam edin. Akıllı uygulamalarınızı bir sonraki seviyeye taşımak için Neo4j, Vertex AI ve Google Cloud ile ilgili en son gelişmeleri takip etmeyi unutmayın. Neo4j GraphAcademy'de daha fazla uygulamalı bilgi grafiği eğitimini inceleyin.
Referans belgeleri
- GraphRAG nedir?
- Neo4j GenAI Ecosystem
- Neo4j Vector Index and Search (Neo4j Vektör Dizini ve Arama)
- Vertex AI'da Metin Yerleştirmeleri
- Cloud Run

