Gemini 3 Flash ve AlloyDB ile Gerçek Zamanlı Bir Fazla Motoru Oluşturma

1. Genel Bakış

Bu codelab'de, zekayı veri katmanının birinci sınıf bir öğesi olarak ele alan, sürdürülebilir bir fazla paylaşım uygulaması olan Neighbor Loop'u oluşturacaksınız.

Gemini 3.0 Flash ve AlloyDB AI'ı entegre ederek temel depolama alanının ötesine geçip veritabanı içi zeka alanına adım atabilirsiniz. Doğrudan SQL'de çok formatlı öğe analizi ve semantik keşif yapmayı öğrenerek gecikme ve mimari şişkinlikten kaynaklanan "yapay zeka vergisini" ortadan kaldıracaksınız.

1da27e0c4d9a33e0.jpeg

Ne oluşturacaksınız?

Toplulukta fazla olan eşyaların paylaşılması için yüksek performanslı bir "kaydırarak eşleştirme" web uygulaması.

Neler öğreneceksiniz?

  • Tek Tıkla Sağlama: Yapay zeka iş yükleri için tasarlanmış bir AlloyDB kümesi ve örneği oluşturma.
  • Veritabanı İçi Yerleştirmeler: Doğrudan INSERT ifadeleri içinde text-embedding-005 vektörleri oluşturma.
  • Çok formatlı akıl yürütme: Gemini 3.0 Flash'ı kullanarak öğeleri "görme" ve otomatik olarak esprili, flört tarzı biyografiler oluşturma.
  • Anlamsal Keşif: Sonuçları yalnızca matematiksel olarak değil, bağlama göre de filtrelemek için ai.if() işlevini kullanarak SQL sorgularında mantığa dayalı "vibe check" işlemleri gerçekleştirme.

Mimari

Neighbor Loop, geleneksel uygulama katmanı darboğazlarını atlar. Verileri işlemek için çekmek yerine şunları kullanırız:

  1. AlloyDB AI: Vektörleri anında oluşturup depolamak için.
  2. Google Cloud Storage: Resimleri depolamak için
  3. Gemini 3.0 Flash: Doğrudan SQL üzerinden görüntü ve metin verileriyle ilgili bir saniyeden kısa sürede akıl yürütme işlemleri yapmak için kullanılır.
  4. Cloud Run: Tek dosyalı, basit bir Flask arka ucu barındırmak için.

Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi.
  • SQL ve Python hakkında temel düzeyde bilgi sahibi olmak

2. 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. Bir projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğiniziöğrenin.
  1. 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'i etkinleştir düğmesinin resmi

  1. Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulanmış olduğunu ve projenin proje kimliğinize ayarlandığını kontrol edin:
gcloud auth list
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
  1. Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
  1. Gerekli API'leri etkinleştirin: Bağlantıyı takip ederek API'leri etkinleştirin.

Alternatif olarak, bu işlem için gcloud komutunu kullanabilirsiniz. gcloud komutları ve kullanımı için belgelere bakın.

Dikkat Edilmesi Gerekenler ve Sorun Giderme

"Hayalet Proje" Sendromu

gcloud config set project komutunu çalıştırdınız ancak Console kullanıcı arayüzünde aslında farklı bir projeye bakıyorsunuz. Sol üstteki açılır listede proje kimliğini kontrol edin.

Faturalandırma Barikatı

Projeyi etkinleştirdiniz ancak faturalandırma hesabını unuttunuz. AlloyDB yüksek performanslı bir motordur. "Yakıt deposu" (faturalandırma) boşsa çalışmaz.

API Yayma Gecikmesi

"API'leri etkinleştir"i tıkladınız ancak komut satırında hâlâ Service Not Enabled yazıyor. 60 saniye bekleyin. Bulutun nöronlarını uyandırması biraz zaman alabilir.

Kota Quags

Yeni bir deneme hesabı kullanıyorsanız AlloyDB örnekleri için bölgesel kotaya ulaşabilirsiniz. us-central1 başarısız olursa us-east1'ı deneyin.

"Gizli" Hizmet Aracısı

Bazen AlloyDB hizmet aracısına aiplatform.user rolü otomatik olarak verilmez. SQL sorgularınız daha sonra Gemini ile iletişim kuramıyorsa genellikle sorun bundan kaynaklanır.

3. Veritabanı kurulumu

Bu laboratuvarda, test verileri için veritabanı olarak AlloyDB'yi kullanacağız. Veritabanları ve günlükler gibi tüm kaynakları tutmak için kümeler kullanılır. Her kümede, verilere erişim noktası sağlayan bir birincil örnek bulunur. Tablolar gerçek verileri içerir.

Test veri kümesinin yükleneceği bir AlloyDB kümesi, örneği ve tablosu oluşturalım.

  1. Google Cloud Console kullanıcısının oturumunun açık olduğu tarayıcıda düğmeyi tıklayın veya aşağıdaki bağlantıyı tarayıcınıza kopyalayın.

  1. Bu adım tamamlandıktan sonra depo yerel Cloud Shell düzenleyicinize klonlanır ve aşağıdaki komutu proje klasöründen çalıştırabilirsiniz (proje dizininde olduğunuzdan emin olmanız önemlidir):
sh run.sh
  1. Şimdi kullanıcı arayüzünü kullanın (terminaldeki bağlantıyı veya terminaldeki "web'de önizleme" bağlantısını tıklayarak).
  2. Başlamak için proje kimliği, küme ve örnek adlarıyla ilgili ayrıntılarınızı girin.
  3. Günlükler kayarken kahve almaya gidebilirsiniz. Bu işlemin arka planda nasıl yapıldığı hakkında bilgi edinmek için burayı ziyaret edebilirsiniz.

Dikkat Edilmesi Gerekenler ve Sorun Giderme

"Sabır" Sorunu

Veritabanı kümeleri ağır altyapılardır. Sayfayı yenilerseniz veya "takılmış gibi göründüğü" için Cloud Shell oturumunu sonlandırırsanız kısmen sağlanan ve manuel müdahale olmadan silinmesi mümkün olmayan bir "hayalet" örneğiniz olabilir.

Bölge Uyuşmazlığı

API'lerinizi us-central1 içinde etkinleştirdiyseniz ancak kümeyi asia-south1 içinde sağlamaya çalışırsanız kota sorunları veya hizmet hesabı izinleriyle ilgili gecikmelerle karşılaşabilirsiniz. Tüm laboratuvar için tek bir bölgeye bağlı kalın.

Zombi Kümeleri

Daha önce bir küme için aynı adı kullandıysanız ve bu adı silmediyseniz komut dosyası, küme adının zaten mevcut olduğunu söyleyebilir. Küme adları, proje içinde benzersiz olmalıdır.

Cloud Shell Zaman Aşımı

Kahve molanız 30 dakika sürerse Cloud Shell uyku moduna geçebilir ve sh run.sh işleminin bağlantısını kesebilir. Sekmeyi etkin tutun.

4. Şema Sağlama

AlloyDB kümeniz ve örneğiniz çalıştıktan sonra yapay zeka uzantılarını etkinleştirmek ve şemayı sağlamak için AlloyDB Studio SQL düzenleyicisine gidin.

1e3ac974b18a8113.png

Örneğinizin oluşturulma işleminin tamamlanmasını beklemeniz gerekebilir. Bu işlem tamamlandıktan sonra, kümeyi oluştururken oluşturduğunuz kimlik bilgilerini kullanarak AlloyDB'de oturum açın. PostgreSQL'de kimlik doğrulaması yapmak için aşağıdaki verileri kullanın:

  • Kullanıcı adı : "postgres"
  • Veritabanı : "postgres"
  • Şifre : "alloydb" (veya oluşturma sırasında ayarladığınız şifre)

AlloyDB Studio'da kimliğinizi başarıyla doğruladıktan sonra SQL komutları Düzenleyici'ye girilir. Son pencerenin sağındaki artı işaretini kullanarak birden fazla Editor penceresi ekleyebilirsiniz.

28cb9a8b6aa0789f.png

Gerekli durumlarda Çalıştır, Biçimlendir ve Temizle seçeneklerini kullanarak AlloyDB için komutları düzenleyici pencerelerine gireceksiniz.

Uzantıları etkinleştirme

Bu uygulamayı oluşturmak için pgvector ve google_ml_integration uzantılarını kullanacağız. pgvector uzantısı, vektör yerleştirmelerini depolamanıza ve aramanıza olanak tanır. google_ml_integration uzantısı, SQL'de tahmin almak için Vertex AI tahmin uç noktalarına erişmek üzere kullandığınız işlevleri sağlar. Aşağıdaki DDL'leri çalıştırarak bu uzantıları etkinleştirin:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

Tablo oluşturma

AlloyDB Studio'da aşağıdaki DDL ifadesini kullanarak bir tablo oluşturabilirsiniz:

-- Items Table (The "Profile" you swipe on)
CREATE TABLE items (
   item_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
   owner_id UUID,
   provider_name TEXT,
   provider_phone TEXT,
   title TEXT,
   bio TEXT,
   category TEXT,
   image_url TEXT,
   item_vector VECTOR(768),
   status TEXT DEFAULT 'available',
   created_at TIMESTAMP DEFAULT NOW()
);

-- Swipes Table (The Interaction)
CREATE TABLE swipes (
   swipe_id SERIAL PRIMARY KEY,
   swiper_id UUID,
   item_id UUID REFERENCES items(item_id),
   direction TEXT CHECK (direction IN ('left', 'right')),
   is_match BOOLEAN DEFAULT FALSE,
   created_at TIMESTAMP DEFAULT NOW()
);

item_vector sütunu, metnin vektör değerlerinin depolanmasına olanak tanır.

İzin Ver

"embedding" işlevinde yürütme izni vermek için aşağıdaki ifadeyi çalıştırın:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

AlloyDB hizmet hesabına Vertex AI Kullanıcısı ROLÜ'nü verme

Google Cloud IAM Console'dan AlloyDB hizmet hesabına (service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com şeklinde görünür) "Vertex AI Kullanıcısı" rolüne erişim izni verin. PROJECT_NUMBER, proje numaranızı içerir.

Alternatif olarak, aşağıdaki komutu Cloud Shell Terminali'nden çalıştırabilirsiniz:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

AlloyDB'de Gemini 3 Flash modelini kaydetme

AlloyDB sorgu düzenleyicisinden aşağıdaki SQL ifadesini çalıştırın.

CALL google_ml.create_model(
   model_id => 'gemini-3-flash-preview',
   model_request_url => 'https://aiplatform.googleapis.com/v1/projects/<<YOUR_PROJECT_ID>>/locations/global/publishers/google/models/gemini-3-flash-preview:generateContent',
   model_qualified_name => 'gemini-3-flash-preview',
   model_provider => 'google',
   model_type => 'llm',
   model_auth_type => 'alloydb_service_agent_iam'
);
--replace <<YOUR_PROJECT_ID>> with your project id.

Dikkat Edilmesi Gerekenler ve Sorun Giderme

"Parola Unutma" Döngüsü

"Tek Tıklama" kurulumunu kullandıysanız ve şifrenizi hatırlamıyorsanız konsoldaki örnek temel bilgileri sayfasına gidip "Düzenle"yi tıklayarak postgres şifresini sıfırlayın.

"Uzantı Bulunamadı" Hatası

CREATE EXTENSION başarısız olursa bunun nedeni genellikle ilk sağlama sırasında örneğin "Bakım" veya "Güncelleme" durumunda olmasıdır. Örnek oluşturma adımının tamamlanıp tamamlanmadığını kontrol edin ve gerekirse birkaç saniye bekleyin.

IAM Yayılma Boşluğu

gcloud IAM komutunu çalıştırdınız ancak SQL CALL, izin hatasıyla başarısız olmaya devam ediyor. IAM değişikliklerinin Google omurgasında yayılması biraz zaman alabilir. Bir nefes alın.

Vektör Boyutu Uyuşmazlığı

items tablosu VECTOR(768) olarak ayarlandı. Daha sonra farklı bir model (ör. 1536 boyutlu bir model) kullanmayı denerseniz eklemeleriniz patlar. text-embedding-005'ya bağlı kalın.

Project ID Typo

create_model çağrısında köşeli parantezleri « » bırakırsanız veya proje kimliğinizi yanlış yazarsanız model kaydı başarılı görünür ancak ilk gerçek sorgu sırasında başarısız olur. Dizenizi tekrar kontrol edin.

5. Resim Depolama (Google Cloud Storage)

Fazla ürünlerimizin fotoğraflarını depolamak için bir GCS paketi kullanıyoruz. Bu demo uygulamasında, resimlerin herkese açık olmasını ve kaydırma kartlarımızda anında oluşturulmasını istiyoruz.

  1. Paket oluşturma: GCP projenizde (ör.neighborloop-images) yeni bir paket oluşturun. Bu paket tercihen veritabanınız ve uygulamanızla aynı bölgede olmalıdır.
  2. Herkese açık erişimi yapılandırma: * Bucket'ın İzinler sekmesine gidin.
  3. allUsers ana hesabını ekleyin.
  4. Storage Object Viewer (Depolama Alanı Nesne Görüntüleyici) rolünü (böylece herkes fotoğrafları görebilir) ve Storage Object Creator (Depolama Alanı Nesne Oluşturucu) rolünü (demo yükleme amacıyla) atayın.

Alternatif (Hizmet Hesabı): Herkese açık erişimi kullanmamayı tercih ediyorsanız uygulamanızın hizmet hesabına AlloyDB'ye tam erişim ve nesneleri güvenli bir şekilde yönetmek için gerekli depolama rolleri verildiğinden emin olun.

Dikkat Edilmesi Gerekenler ve Sorun Giderme

The Region Drag

Veritabanınız us-central1 bölgesinde, paketiniz ise europe-west1 bölgesinde bulunuyorsa yapay zekanızı yavaşlatıyorsunuz demektir. "Vibe check" hızlı bir şekilde gerçekleşir ancak kullanıcı arayüzü için resmin getirilmesi yavaş olur. Aynı bölgede tutun.

Paket Adının Benzersizliği

Paket adları, genel bir ad alanıdır. Paketinize neighborloop-images adını vermeye çalışırsanız bu ad büyük olasılıkla başka bir kullanıcı tarafından alınmıştır. Oluşturma işlemi başarısız olursa rastgele bir sonek ekleyin.

"İçerik üretici" ve "İzleyici" karışıklığı

"Oluşturan" ve "Görüntüleyen" Karışıklığı: Yalnızca "Görüntüleyen" eklediyseniz uygulamanız, kullanıcının yeni bir öğe listelemeye çalışması durumunda dosya yazma izni olmadığı için çöker. Bu özel demo kurulumu için her ikisine de ihtiyacınız var.

6. Uygulamayı oluşturalım

Bu depoyu projenize klonlayın ve inceleyelim.

  1. Bunu klonlamak için Cloud Shell terminalinizde (kök dizinde veya bu projeyi oluşturmak istediğiniz herhangi bir yerden) aşağıdaki komutu çalıştırın:
git clone https://github.com/AbiramiSukumaran/neighbor-loop

Bu işlem projeyi oluşturur ve Cloud Shell Düzenleyici'de bunu doğrulayabilirsiniz.

53a398aff6ba7d5b.png

  1. Gemini API anahtarınızı alma
  2. Google AI Studio'yu ziyaret edin: aistudio.google.com adresine gidin.
  3. Oturum açma: Google Cloud projeniz için kullandığınız aynı Google Hesabı'nı kullanın.
  4. API anahtarı oluşturma:
  5. Sol kenar çubuğunda "API anahtarı al"ı tıklayın.
  6. "Yeni projede API anahtarı oluştur" düğmesini tıklayın.
  7. Anahtarı kopyalama: Anahtar oluşturulduktan sonra kopyalama simgesini tıklayın.
  8. Şimdi .env dosyasında ortam değişkenlerini ayarlayın.
GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>
DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<HOST_IP>>:<<PORT>>/postgres
GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

Yer tutucuların değerlerini değiştirin <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<HOST_IP>>, <<PORT>> and <<YOUR_GCS_BUCKET>>.

Dikkat Edilmesi Gerekenler ve Sorun Giderme

Birden Çok Hesapla İlgili Karışıklık

Birden fazla Google Hesabı'na (Kişisel ve İş) giriş yaptıysanız AI Studio yanlış hesabı varsayılan olarak kullanabilir. GCP projesi hesabınızla eşleştiğinden emin olmak için sağ üst köşedeki avatarı kontrol edin.

"Ücretsiz Katman" Kota Sınırına Ulaşıldı

Ücretsiz katmanı kullanıyorsanız hız sınırları (RPM - Dakikadaki İstek Sayısı) vardır. Komşuluk Çemberi'nde çok hızlı "kaydırma" yaparsanız 429 Too Many Requests hatası alabilirsiniz. Yavaşlayın!

Açığa Çıkan Anahtar Güvenliği

.env dosyanızı anahtarla birlikte yanlışlıkla git commit ettiyseniz. .gitignore cihazınıza her zaman .env ekleyin.

"Bağlantı Zaman Aşımı" Boşluğu

.env dosyanızda özel IP adresini kullandınız ancak VPC'nin dışından (ör. yerel makineniz) bağlanmaya çalışıyorsunuz. Özel IP'lere yalnızca aynı Google Cloud ağı içinden erişilebilir. Genel IP'ye geçin.

5432 Bağlantı Noktası Varsayımı

5432, standart PostgreSQL bağlantı noktası olsa da AlloyDB, kimlik doğrulama proxy'si kullanıyorsanız bazen belirli bağlantı noktası yapılandırmaları gerektirir. Bu laboratuvarda, ana makine dizenizin sonunda :5432 kullandığınızdan emin olun.

"Yetkili Ağlar" bekçisi

Herkese açık IP'niz olsa bile kodu çalıştıran makinenin IP adresini beyaz listeye eklemediğiniz sürece AlloyDB "Bağlantıyı Reddedecek". Düzeltme: AlloyDB örneği ayarlarında, Yetkili Ağlar'a 0.0.0.0/0'ı (yalnızca geçici test için!) veya belirli IP'nizi ekleyin.

SSL/TLS el sıkışma hatası

AlloyDB, güvenli bağlantıları tercih eder. DATABASE_URL'niz sürücüyü doğru şekilde belirtmiyorsa (ör. pg8000 kullanılıyorsa) el sıkışma sessizce başarısız olabilir ve genel bir "Veritabanına ulaşılamıyor" hatasıyla karşılaşırsınız.

"Birincil ve Okuma Havuzu" Değişimi

Yanlışlıkla birincil örnek yerine okuma havuzunun IP adresini kopyalarsanız uygulamanız öğe arama konusunda çalışır ancak yeni bir öğe listelemeye çalıştığınızda "Salt okunur" hatasıyla çöker. Yazma işlemleri için her zaman birincil örnek IP'sini kullanın.

7. Kodu kontrol edelim

Eşyalarınız için "Flört Profili"

c2c543562cc9b353.png

Kullanıcılar, bir öğenin fotoğrafını yüklediklerinde uzun bir açıklama yazmak zorunda kalmamalıdır. Öğeyi "görmek" ve listelemeyi yazmak için Gemini 3 Flash'i kullanıyorum.

Arka uçta kullanıcı yalnızca bir başlık ve fotoğraf sağlar. Gerisini Gemini halleder:

prompt = """
You are a witty community manager for NeighborLoop.
Analyze this surplus item and return JSON:
{
   "bio": "First-person witty dating-style profile bio for the product, not longer than 2 lines",
   "category": "One-word category",
   "tags": ["tag1", "tag2"]
}
"""
response = genai_client.models.generate_content(
   model="gemini-3-flash-preview",
   contents=[types.Part.from_bytes(data=image_bytes, mime_type="image/jpeg"), prompt],
   config=types.GenerateContentConfig(response_mime_type="application/json")
)

21f871a1b549efcf.png

Veritabanı İçi Anlık Yerleştirmeler

aa783a459f1b02da.png

AlloyDB'nin en iyi özelliklerinden biri, SQL bağlamından ayrılmadan yerleştirmeler oluşturabilmesidir. Python'da bir yerleştirme modelini çağırmak ve vektörü veritabanına geri göndermek yerine, embedding() işlevini kullanarak tüm işlemleri tek bir INSERT ifadesinde yapıyorum:

INSERT INTO items (owner_id, provider_name, provider_phone, title, bio, category, image_url, status, item_vector)
VALUES (
   :owner, :name, :phone, :title, :bio, :cat, :url, 'available',
   embedding('text-embedding-005', :title || ' ' || :bio)::vector
)

Bu sayede, her öğe yayınlandığı anda anlamı üzerinden "aranabilir" hale gelir. Bu bölümün, Neighbor Loop uygulamasının "ürünü listeleme" özelliğini kapsadığını unutmayın.

Ürün listeleme özelliği ekran görüntüsü ekleme

Gemini 3.0 ile Gelişmiş Vektör Arama ve Akıllı Filtreleme

Standart anahtar kelime araması sınırlıdır. "Sandalyemi tamir etmek için bir şey" ifadesini aradığınızda, geleneksel bir veritabanı "sandalye" kelimesi başlıkta yer almıyorsa hiçbir sonuç döndürmeyebilir. Neighbor Loop, bu sorunu AlloyDB AI'ın gelişmiş Vector Search özelliğiyle çözüyor.

pgvector uzantısını ve AlloyDB'nin optimize edilmiş depolama alanını kullanarak son derece hızlı benzerlik aramaları yapabiliriz. Ancak asıl "sihir", vektör yakınlığını LLM tabanlı mantıkla birleştirdiğimizde ortaya çıkar.

AlloyDB AI, Gemini gibi modelleri doğrudan SQL sorgularımızda çağırmamıza olanak tanır. Bu, ai.if() işlevini kullanarak mantığa dayalı bir "sağlamlık kontrolü" içeren bir Anlamsal Keşif gerçekleştirebileceğimiz anlamına gelir:

SELECT item_id, title, bio, category, image_url,
      1 - (item_vector <=> embedding('text-embedding-005', :query)::vector) as score
FROM items
WHERE status = 'available'
 AND item_vector IS NOT NULL
 AND ai.if(
       prompt => 'Does this text: "' || bio ||'" match the user request: "' ||  :query || '", at least 60%? "',
       model_id => 'gemini-3-flash-preview'
     ) 
ORDER BY score DESC
LIMIT 5

Bu sorgu, büyük bir mimari değişikliği temsil ediyor: Mantığı veriye taşıyoruz. Gemini 3 Flash, binlerce sonucu filtrelemek için uygulama koduna çekmek yerine veritabanı motorunda "vibe check" (enerji kontrolü) yapar. Bu sayede gecikme azalır, çıkış maliyetleri düşer ve sonuçların yalnızca matematiksel olarak benzer değil, bağlamsal olarak da alakalı olması sağlanır.

Semantik Arama Özelliğinin Ekran Görüntüsü

"Eşleşmek için Kaydırın" Döngüsü

Kullanıcı arayüzü, klasik bir iskambil destesidir.

Sola kaydırma: Silme

Sağa kaydırma: Eşleşme!

Swipe-to-match özelliğinin ekran görüntüsü

Sağa kaydırdığınızda arka uç, etkileşimi kaydırma tablomuzda kaydeder ve öğeyi eşleşmiş olarak işaretler. Ön uç, teslim alma işlemini ayarlayabilmeniz için sağlayıcının iletişim bilgilerini gösteren bir modalı anında tetikler.

8. Cloud Run'a dağıtalım

  1. Projeyi klonladığınız Cloud Shell terminalinden aşağıdaki komutu çalıştırarak Cloud Run'da dağıtın ve projenin kök klasöründe olduğunuzdan emin olun.

Cloud Shell terminalinizde şunu çalıştırın:

gcloud beta run deploy neighbor-loop \
   --source . \
   --region=us-central1 \
   --network=<<YOUR_NETWORK_NAME>> \
   --subnet=<<YOUR_SUBNET_NAME>> \
   --allow-unauthenticated \
   --vpc-egress=all-traffic \
   --set-env-vars GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>,DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<PRIVATE_IP_HOST>>:<<PORT>>/postgres,GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

Yer tutucuların değerlerini değiştirin <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<PRIVATE_IP_HOST>>, <<PORT>> and <<YOUR_GCS_BUCKET>>

Komut tamamlandığında bir hizmet URL'si oluşturulur. Kopyalayın.

  1. Cloud Run hizmet hesabına AlloyDB İstemcisi rolünü verin.Bu, sunucusuz uygulamanızın veritabanına güvenli bir şekilde tünel oluşturmasına olanak tanır.

Cloud Shell terminalinizde şunu çalıştırın:

# 1. Get your Project ID and Project Number
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

# 2. Grant the AlloyDB Client role
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/alloydb.client"

Şimdi hizmet URL'sini (daha önce kopyaladığınız Cloud Run uç noktası) kullanarak uygulamayı test edin. Eski elektrikli aletin fotoğrafını yükleyin ve gerisini Gemini'a bırakın.

Dikkat Edilmesi Gerekenler ve Sorun Giderme

"Düzeltme Başarısız Oldu" Döngüsü

Dağıtım tamamlanmasına rağmen URL'de 500 Internal Server Error simgesi gösteriliyorsa günlükleri kontrol edin. Bu durum genellikle eksik bir ortam değişkeninden (ör. DATABASE_URL içinde yazım hatası) veya Cloud Run hizmet hesabının GCS paketinizden okuma izninin olmamasından kaynaklanır.

IAM "Shadow" rolü

Sizin dağıtım izniniz olsa bile veritabanıyla bağlantı kurmak için Cloud Run hizmet hesabının (genellikle [project-number]-compute@developer.gserviceaccount.com) AlloyDB Client rolüne sahip olması gerekir.

9. Üst Düzey Sorun Giderme

b6cdd3785d5461a9.jpeg

10. Demo

Uç noktanızı testler için kullanabilirsiniz.

Ancak birkaç gün boyunca demo amaçlı olarak şunları deneyebilirsiniz:

11. Temizleme

Bu laboratuvar tamamlandıktan sonra AlloyDB kümesini ve örneğini silmeyi unutmayın.

Küme, örnekleriyle birlikte temizlenmelidir.

12. Tebrikler

Google Cloud ile sürdürülebilir topluluklar için Neighbor Loop uygulamasını başarıyla oluşturdunuz. Yerleştirme ve Gemini 3 Flash yapay zeka mantığını AlloyDB'ye taşıyarak uygulama inanılmaz derecede hızlı (dağıtım ayarlarına bağlı olarak) ve kod son derece temiz hale gelir. Yalnızca verileri değil, amaçları da saklıyoruz.

Gemini 3 Flash'in hızı ve AlloyDB'nin optimize edilmiş vektör işleme özelliği, topluluk odaklı platformlar için gerçekten de yeni bir dönemin başlangıcıdır.