Créer un moteur de surplus en temps réel avec Gemini 3 Flash et AlloyDB

1. Présentation

Dans cet atelier de programmation, vous allez créer Neighbor Loop, une application de partage d'excédents durables qui traite l'intelligence comme un élément à part entière de la couche de données.

En intégrant Gemini 3.0 Flash et AlloyDB AI, vous passerez du stockage de base à l'intelligence dans la base de données. Vous apprendrez à effectuer une analyse multimodale des éléments et une découverte sémantique directement dans SQL, ce qui élimine la "taxe d'IA" de latence et d'encombrement architectural.

1da27e0c4d9a33e0.jpeg

Ce que vous allez faire

Application Web "swipe-to-match" hautes performances pour le partage des excédents de la communauté.

Points abordés

  • Provisionnement en un clic : découvrez comment configurer un cluster et une instance AlloyDB conçus pour les charges de travail d'IA.
  • Embeddings dans la base de données : génération de vecteurs text-embedding-005 directement dans les instructions INSERT.
  • Raisonnement multimodal : utiliser Gemini 3.0 Flash pour "voir" des éléments et générer automatiquement des bios amusantes de type "rencontres".
  • Découverte sémantique : effectuez des "vérifications d'ambiance" basées sur la logique dans les requêtes SQL à l'aide de la fonction ai.if() pour filtrer les résultats en fonction du contexte, et pas seulement des mathématiques.

Architecture

Neighbor Loop contourne les goulots d'étranglement traditionnels de la couche application. Au lieu d'extraire les données pour les traiter, nous utilisons :

  1. AlloyDB AI : pour générer et stocker des vecteurs en temps réel.
  2. Google Cloud Storage : pour stocker des images
  3. Gemini 3.0 Flash : pour effectuer un raisonnement en moins d'une seconde sur des données d'image et de texte directement via SQL.
  4. Cloud Run : pour héberger un backend Flask léger et monofichier.

Conditions requises

  • Un navigateur (Chrome ou Firefox, par exemple)
  • Un projet Google Cloud avec facturation activée.
  • Connaître les bases de SQL et de Python

2. Avant de commencer

Créer un projet

  1. Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
  2. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
  1. Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud. Cliquez sur "Activer Cloud Shell" en haut de la console Google Cloud.

Image du bouton "Activer Cloud Shell"

  1. Une fois connecté à Cloud Shell, vérifiez que vous êtes déjà authentifié et que le projet est défini sur votre ID de projet à l'aide de la commande suivante :
gcloud auth list
  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet.
gcloud config list project
  1. Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project <YOUR_PROJECT_ID>
  1. Activez les API requises : suivez ce lien et activez les API.

Vous pouvez également utiliser la commande gcloud. Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.

Problèmes et dépannage

Syndrome du projet fantôme

Vous avez exécuté gcloud config set project, mais vous consultez en fait un autre projet dans l'interface utilisateur de la console. Vérifiez l'ID du projet dans le menu déroulant en haut à gauche.

Barricade de facturation

Vous avez activé le projet, mais oublié le compte de facturation. AlloyDB est un moteur hautes performances. Il ne démarrera pas si le "réservoir" (la facturation) est vide.

Décalage de la propagation de l'API

Vous avez cliqué sur "Activer les API", mais la ligne de commande indique toujours Service Not Enabled. Patientez 60 secondes. Le cloud a besoin d'un instant pour réveiller ses neurones.

Quags de quota

Si vous utilisez un tout nouveau compte d'essai, vous pouvez atteindre un quota régional pour les instances AlloyDB. Si us-central1 échoue, essayez us-east1.

Agent de service"masqué"

Il arrive que le compte de service AlloyDB ne reçoive pas automatiquement le rôle aiplatform.user. Si vos requêtes SQL ne peuvent pas communiquer avec Gemini par la suite, c'est généralement la cause du problème.

3. Configuration de la base de données

Dans cet atelier, nous utiliserons AlloyDB comme base de données pour les données de test. Il utilise des clusters pour stocker toutes les ressources, telles que les bases de données et les journaux. Chaque cluster possède une instance principale qui fournit un point d'accès aux données. Les tables contiennent les données réelles.

Commençons par créer un cluster, une instance et une table AlloyDB dans lesquels l'ensemble de données de test sera chargé.

  1. Cliquez sur le bouton ou copiez le lien ci-dessous dans le navigateur dans lequel l'utilisateur de la console Google Cloud est connecté.

  1. Une fois cette étape terminée, le dépôt sera cloné dans votre éditeur Cloud Shell local. Vous pourrez ensuite exécuter la commande ci-dessous à partir du dossier du projet (assurez-vous d'être dans le répertoire du projet) :
sh run.sh
  1. Utilisez maintenant l'UI (en cliquant sur le lien dans le terminal ou sur le lien "Prévisualiser sur le Web" dans le terminal).
  2. Saisissez les détails de l'ID de projet, du nom du cluster et du nom de l'instance pour commencer.
  3. Allez prendre un café pendant que les journaux défilent. Pour en savoir plus sur le fonctionnement en coulisses, cliquez ici.

Problèmes et dépannage

Le problème de la patience

Les clusters de bases de données sont une infrastructure lourde. Si vous actualisez la page ou mettez fin à la session Cloud Shell parce qu'elle semble bloquée, vous risquez de vous retrouver avec une instance "fantôme" partiellement provisionnée et impossible à supprimer sans intervention manuelle.

Région non concordante

Si vous avez activé vos API dans us-central1, mais que vous essayez de provisionner le cluster dans asia-south1, vous risquez de rencontrer des problèmes de quota ou des retards dans les autorisations du compte de service. Choisissez une seule région pour l'ensemble de l'atelier.

Clusters de zombies

Si vous avez déjà utilisé le même nom pour un cluster et que vous ne l'avez pas supprimé, le script peut indiquer que le nom du cluster existe déjà. Les noms de clusters doivent être uniques dans un projet.

Délai d'inactivité de Cloud Shell

Si votre pause-café dure 30 minutes, Cloud Shell peut se mettre en veille et déconnecter le processus sh run.sh. Laissez l'onglet actif.

4. Provisionnement de schémas

Une fois votre cluster et votre instance AlloyDB en cours d'exécution, accédez à l'éditeur SQL AlloyDB Studio pour activer les extensions d'IA et provisionner le schéma.

1e3ac974b18a8113.png

Vous devrez peut-être attendre la fin de la création de votre instance. Une fois le cluster créé, connectez-vous à AlloyDB à l'aide des identifiants que vous avez créés. Utilisez les données suivantes pour vous authentifier auprès de PostgreSQL :

  • Nom d'utilisateur : "postgres"
  • Base de données : "postgres"
  • Mot de passe : "alloydb" (ou celui que vous avez défini lors de la création)

Une fois l'authentification réussie dans AlloyDB Studio, les commandes SQL sont saisies dans l'éditeur. Vous pouvez ajouter plusieurs fenêtres de l'éditeur en cliquant sur le signe plus à droite de la dernière fenêtre.

28cb9a8b6aa0789f.png

Vous saisirez des commandes pour AlloyDB dans des fenêtres d'éditeur, en utilisant les options "Exécuter", "Mettre en forme" et "Effacer" selon les besoins.

Activer les extensions

Pour créer cette application, nous allons utiliser les extensions pgvector et google_ml_integration. L'extension pgvector vous permet de stocker et de rechercher des embeddings vectoriels. L'extension google_ml_integration fournit les fonctions que vous utilisez pour accéder aux points de terminaison de prédiction Vertex AI afin d'obtenir des prédictions en SQL. Activez ces extensions en exécutant les LDD suivants :

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

Créer une table

Vous pouvez créer une table à l'aide de l'instruction LDD ci-dessous dans AlloyDB Studio :

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

La colonne item_vector permettra de stocker les valeurs vectorielles du texte.

Accorder l'autorisation

Exécutez l'instruction ci-dessous pour accorder l'exécution de la fonction "embedding" :

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Attribuer le rôle Utilisateur Vertex AI au compte de service AlloyDB

Dans la console Google Cloud IAM, accordez au compte de service AlloyDB (qui ressemble à ceci : service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) l'accès au rôle "Utilisateur Vertex AI". PROJECT_NUMBER correspondra au numéro de votre projet.

Vous pouvez également exécuter la commande ci-dessous à partir du terminal Cloud Shell :

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"

Enregistrer le modèle Gemini 3 Flash dans AlloyDB

Exécutez l'instruction SQL ci-dessous à partir de l'éditeur de requête AlloyDB.

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.

Problèmes et dépannage

La boucle "Mot de passe oublié"

Si vous avez utilisé la configuration "En un clic" et que vous ne vous souvenez plus de votre mot de passe, accédez à la page "Informations de base sur l'instance" dans la console, puis cliquez sur "Modifier" pour réinitialiser le mot de passe postgres.

Erreur "Extension introuvable"

Si CREATE EXTENSION échoue, c'est souvent parce que l'instance est toujours dans un état "Maintenance" ou "Mise à jour" depuis le provisionnement initial. Vérifiez si l'étape de création de l'instance est terminée et patientez quelques secondes si nécessaire.

Délai de propagation IAM

Vous avez exécuté la commande IAM gcloud, mais la commande SQL CALL échoue toujours avec une erreur d'autorisation. La propagation des modifications IAM peut prendre un certain temps sur le réseau principal de Google. Respirez.

Incompatibilité de la dimension du vecteur

La table items est définie sur VECTOR(768). Si vous essayez d'utiliser un autre modèle (par exemple, un modèle à 1 536 dimensions) par la suite, vos insertions seront corrompues. Respecte text-embedding-005.

Faute de frappe dans l'ID du projet

Dans l'appel create_model, si vous laissez les crochets « » ou si vous saisissez mal l'ID de votre projet, l'enregistrement du modèle semblera réussi, mais échouera lors de la première requête réelle. Vérifiez votre chaîne.

5. Stockage d'images (Google Cloud Storage)

Pour stocker les photos de nos articles excédentaires, nous utilisons un bucket GCS. Pour cette application de démonstration, nous souhaitons que les images soient accessibles au public afin qu'elles s'affichent instantanément dans nos cartes à balayer.

  1. Créez un bucket : créez un bucket dans votre projet GCP (par exemple, neighborloop-images), de préférence dans la même région que votre base de données et votre application.
  2. Configurer l'accès public : accédez à l'onglet Autorisations du bucket.
  3. Ajoutez le compte principal allUsers.
  4. Attribuez le rôle Lecteur des objets Storage (pour que tout le monde puisse voir les photos) et le rôle Créateur des objets Storage (pour les besoins de l'importation de la démo).

Alternative (compte de service) : si vous préférez ne pas utiliser l'accès public, assurez-vous que le compte de service de votre application dispose d'un accès complet à AlloyDB et des rôles Storage nécessaires pour gérer les objets de manière sécurisée.

Problèmes et dépannage

The Region Drag

Si votre base de données se trouve dans us-central1 et votre bucket dans europe-west1, vous ralentissez littéralement votre IA. La "vérification de l'ambiance" se fait rapidement, mais la récupération de l'image pour l'UI sera lente. Conservez-les dans la même région !

Unicité des noms de buckets

Les noms de buckets constituent un espace de noms global. Si vous essayez de nommer votre bucket neighborloop-images, il est probable que quelqu'un d'autre l'ait déjà fait. Si votre création échoue, ajoutez un suffixe aléatoire.

Confusion entre "créateur" et "lecteur"

Confusion entre "Créateur" et "Lecteur" : si vous n'ajoutez que "Lecteur", votre application plantera lorsqu'un utilisateur tentera de lister un nouvel élément, car elle n'aura pas l'autorisation d'écrire le fichier. Vous aurez besoin des deux pour cette configuration de démonstration spécifique.

6. Créer l'application

Clonez ce dépôt dans votre projet et examinons-le.

  1. Pour cloner ce dépôt, exécutez la commande suivante depuis le terminal Cloud Shell (dans le répertoire racine ou à l'emplacement où vous souhaitez créer ce projet) :
git clone https://github.com/AbiramiSukumaran/neighbor-loop

Le projet devrait être créé. Vous pouvez le vérifier dans l'éditeur Cloud Shell.

53a398aff6ba7d5b.png

  1. Obtenir votre clé API Gemini
  2. Accédez à Google AI Studio : rendez-vous sur aistudio.google.com.
  3. Connexion : utilisez le même compte Google que celui de votre projet Google Cloud.
  4. Créer une clé API :
  5. Dans la barre latérale de gauche, cliquez sur "Get API key" (Obtenir une clé API).
  6. Cliquez sur le bouton "Créer une clé API dans un nouveau projet".
  7. Copiez la clé : une fois la clé générée, cliquez sur l'icône de copie.
  8. Définissez maintenant les variables d'environnement dans le fichier .env.
GEMINI_API_KEY=<<YOUR_GEMINI_API_KEY>>
DATABASE_URL=postgresql+pg8000://postgres:<<YOUR_PASSWORD>>@<<HOST_IP>>:<<PORT>>/postgres
GCS_BUCKET_NAME=<<YOUR_GCS_BUCKET>>

Remplacez les valeurs des espaces réservés <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<HOST_IP>>, <<PORT>> and <<YOUR_GCS_BUCKET>>..

Problèmes et dépannage

Confusion entre plusieurs comptes

Si vous êtes connecté à plusieurs comptes Google (personnel et professionnel), il est possible qu'AI Studio soit défini par défaut sur le mauvais compte. Vérifiez l'avatar en haut à droite pour vous assurer qu'il correspond à votre compte de projet GCP.

Dépassement du quota du niveau sans frais

Si vous utilisez le niveau sans frais, des limites de fréquence (requêtes par minute) s'appliquent. Si vous balayez trop rapidement dans la boucle de quartier, vous pouvez obtenir une erreur 429 Too Many Requests. Ralentissez !

Sécurité des clés exposées

Si vous avez accidentellement git commit votre fichier .env contenant la clé. Ajoutez toujours .env à votre .gitignore.

Le vide "Délai d'inactivité de la connexion"

Vous avez utilisé l'adresse IP privée dans votre fichier .env, mais vous essayez de vous connecter depuis l'extérieur du VPC (par exemple, depuis votre machine locale). Les adresses IP privées ne sont accessibles que depuis le même réseau Google Cloud. Passez à l'adresse IP publique.

Hypothèse concernant le port 5432

Bien que 5432 soit le port PostgreSQL standard, AlloyDB nécessite parfois des configurations de port spécifiques si vous utilisez un proxy d'authentification. Pour cet atelier, assurez-vous d'utiliser ":5432" à la fin de votre chaîne hôte.

Gatekeeper "Réseaux autorisés"

Même si vous disposez de l'adresse IP publique, AlloyDB refusera la connexion, sauf si vous avez ajouté l'adresse IP de la machine exécutant le code à la liste blanche.Solution : dans les paramètres de l'instance AlloyDB, ajoutez 0.0.0.0/0 (pour les tests temporaires uniquement) ou votre adresse IP spécifique aux réseaux autorisés.

Échec du handshake SSL/TLS

AlloyDB privilégie les connexions sécurisées. Si votre DATABASE_URL ne spécifie pas correctement le pilote (par exemple, en utilisant pg8000), l'établissement de la liaison peut échouer sans message d'erreur, ce qui vous laisse avec une erreur générique "Base de données non accessible".

Échange entre le pool principal et le pool de lecture

Si vous copiez accidentellement l'adresse IP du pool de lecture au lieu de celle de l'instance principale, votre application fonctionnera pour la recherche d'articles, mais plantera avec une erreur "Lecture seule" lorsque vous tenterez de lister un nouvel article. Utilisez toujours l'adresse IP de l'instance principale pour les opérations en écriture.

7. Vérifions le code

Le "profil de rencontre" de vos objets

c2c543562cc9b353.png

Lorsqu'un utilisateur importe la photo d'un article, il ne devrait pas avoir à écrire une longue description. J'utilise Gemini 3 Flash pour "voir" l'article et rédiger la fiche à sa place.

Dans le backend, l'utilisateur fournit simplement un titre et une photo. Gemini s'occupe du reste :

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

Embeddings en temps réel dans la base de données

aa783a459f1b02da.png

L'une des fonctionnalités les plus intéressantes d'AlloyDB est la possibilité de générer des embeddings sans quitter le contexte SQL. Au lieu d'appeler un modèle d'embedding en Python et de renvoyer le vecteur à la base de données, je fais tout en une seule instruction INSERT à l'aide de la fonction embedding() :

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
)

Cela permet de s'assurer que chaque élément est "recherchable" par sa signification dès qu'il est publié. Notez qu'il s'agit de la partie qui couvre la fonctionnalité "listing the product" (lister le produit) de l'application Neighbor Loop.

Ajouter une capture d&#39;écran de la fonctionnalité de fiche produit

Recherche vectorielle avancée et filtrage intelligent avec Gemini 3.0

La recherche de mots clés standards est limitée. Si vous recherchez "quelque chose pour réparer ma chaise", une base de données traditionnelle peut ne rien renvoyer si le mot "chaise" ne figure pas dans un titre. Neighbor Loop résout ce problème grâce à la recherche vectorielle avancée d'AlloyDB AI.

En utilisant l'extension pgvector et le stockage optimisé d'AlloyDB, nous pouvons effectuer des recherches de similarité extrêmement rapides. Mais la vraie "magie" opère lorsque nous combinons la proximité vectorielle avec la logique basée sur les LLM.

AlloyDB AI nous permet d'appeler des modèles comme Gemini directement dans nos requêtes SQL. Cela signifie que nous pouvons effectuer une découverte sémantique qui inclut une "vérification de cohérence" basée sur la logique à l'aide de la fonction ai.if() :

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

Cette requête représente un changement architectural majeur : nous déplaçons la logique vers les données. Au lieu d'extraire des milliers de résultats dans le code de l'application pour les filtrer, Gemini 3 Flash effectue une "vérification de l'ambiance" à l'intérieur du moteur de base de données. Cela réduit la latence et les coûts de sortie, et garantit que les résultats ne sont pas seulement mathématiquement similaires, mais aussi contextuellement pertinents.

Capture d&#39;écran de la fonctionnalité de recherche sémantique

La boucle "Balayer pour trouver un partenaire"

L'UI est un jeu de cartes classique.

Balayez vers la gauche : supprimez.

Balayer vers la droite : c'est un match !

Capture d&#39;écran de la fonctionnalité Balayer pour associer

Lorsque vous balayez l'écran vers la droite, le backend enregistre l'interaction dans notre tableau des balayages et marque l'élément comme correspondant. L'interface utilisateur déclenche instantanément un pop-up affichant les coordonnées du fournisseur pour que vous puissiez organiser la collecte.

8. Déployons-la sur Cloud Run.

  1. Déployez-le sur Cloud Run en exécutant la commande suivante à partir du terminal Cloud Shell où le projet est cloné. Assurez-vous d'être dans le dossier racine du projet.

Exécutez la commande suivante dans votre terminal Cloud Shell :

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

Remplacez les valeurs des espaces réservés <<YOUR_GEMINI_API_KEY>>, <<YOUR_PASSWORD>, <<PRIVATE_IP_HOST>>, <<PORT>> and <<YOUR_GCS_BUCKET>>.

Une fois la commande terminée, une URL de service est générée. Copiez-le.

  1. Attribuez le rôle Client AlloyDB au compte de service Cloud Run.Cela permet à votre application sans serveur de se connecter de manière sécurisée à la base de données.

Exécutez la commande suivante dans votre terminal Cloud Shell :

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

Utilisez maintenant l'URL du service (point de terminaison Cloud Run que vous avez copié précédemment) et testez l'application. Importez une photo de cet ancien outil électrique et laissez Gemini faire le reste !

Problèmes et dépannage

La boucle "Échec de la révision"

Si le déploiement se termine, mais que l'URL renvoie une erreur 500 Internal Server Error, consultez les journaux. Cela est généralement dû à une variable d'environnement manquante (par exemple, une faute de frappe dans votre DATABASE_URL) ou au fait que le compte de service Cloud Run ne dispose pas des autorisations nécessaires pour lire les données de votre bucket GCS.

Rôle "fantôme" IAM

Même si vous êtes autorisé à déployer, le compte de service Cloud Run (généralement [project-number]-compute@developer.gserviceaccount.com) a besoin du rôle AlloyDB Client pour établir une connexion à la base de données.

9. Dépannage de haut niveau

b6cdd3785d5461a9.jpeg

10. Démo

Vous devriez pouvoir utiliser votre point de terminaison pour les tests.

Toutefois, pour les besoins de la démonstration, vous pouvez utiliser cette commande pendant quelques jours :

11. Effectuer un nettoyage

Une fois cet atelier terminé, n'oubliez pas de supprimer le cluster et l'instance AlloyDB.

Il devrait nettoyer le cluster ainsi que ses instances.

12. Félicitations

Vous avez créé l'application Neighbor Loop pour des communautés durables avec Google Cloud. En déplaçant l'intégration et la logique d'IA Gemini 3 Flash dans AlloyDB, l'application est incroyablement rapide (en fonction des paramètres de déploiement) et le code est remarquablement propre. Nous ne stockons pas seulement des données, mais aussi des intentions.

La combinaison de la vitesse de Gemini 3 Flash et du traitement vectoriel optimisé d'AlloyDB représente une véritable avancée pour les plates-formes axées sur la communauté.