1. Introducción
En este codelab, aprenderás a usar la integración de IA de Cloud SQL para PostgreSQL combinando la búsqueda de vectores con los embeddings de Gemini Enterprise Agent Platform.

Requisitos previos
- Conocimientos básicos de Google Cloud y la consola de Google Cloud
- Experiencia básica con la interfaz de línea de comandos y Cloud Shell
Actividades
- Implementa una instancia de Cloud SQL para PostgreSQL
- Crea una base de datos y habilita la integración de la IA de Cloud SQL
- Carga datos en la base de datos
- Usa Cloud SQL Studio
- Genera embeddings con Gemini Enterprise Agent Platform en Cloud SQL
- Usa Agent Platform Studio
- Enriquece los resultados de la búsqueda con un modelo generativo de Gemini Enterprise Agent Platform
- Mejora el rendimiento de las consultas con un índice de vectores HNSW
Requisitos
- Una cuenta de Google Cloud y un proyecto de Google Cloud
- Un navegador web, como Chrome
2. Configuración y requisitos
Configura el proyecto
- Accede a la consola de Google Cloud. Si aún no tienes una Cuenta de Google (de Gmail o Google Workspace), debes crear una.
Usa una cuenta personal en lugar de una cuenta laboral o educativa.
- Crea un proyecto nuevo o reutiliza uno existente. Para crear un proyecto nuevo en la consola de Google Cloud, haz clic en Seleccionar un proyecto en la barra de herramientas.

En el diálogo Selecciona un proyecto, haz clic en Nuevo proyecto.

En el diálogo, ingresa un Nombre del proyecto y selecciona la Ubicación.

- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Las APIs de Google no usan el nombre del proyecto, y se puede cambiar en cualquier momento.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Google Cloud genera automáticamente un ID único, pero puedes personalizarlo. Si no te gusta el ID generado, puedes generar otro aleatorio o proporcionar el tuyo para verificar su disponibilidad. En la mayoría de los codelabs, se hace referencia al ID del proyecto, que suele identificarse con el marcador de posición
. - Algunas APIs usan un tercer valor, el número de proyecto. Obtén más información sobre estos tres valores en la documentación de Creación y administración de proyectos.
Habilita la facturación
Configura una cuenta de facturación personal
Si configuraste la facturación con créditos de Google Cloud, puedes omitir este paso.
Para configurar una cuenta de facturación personal, habilita la facturación en la consola de Facturación de Google Cloud.
Notas:
- Completar este lab cuesta menos de USD 5 en recursos de Google Cloud.
- Sigue los pasos que se indican al final de este lab para borrar los recursos y evitar cargos adicionales.
- Los usuarios nuevos pueden acceder a la prueba gratuita de USD 300.
Inicie Cloud Shell
Si bien puedes operar Google Cloud de forma remota desde tu computadora, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
En la barra de herramientas de la consola de Google Cloud, haz clic en Activar Cloud Shell:

Como alternativa, presiona G y, luego, S en la consola de Google Cloud, o bien abre Cloud Shell.
El aprovisionamiento y la conexión al entorno solo tardan unos minutos. Cuando termine, deberías ver la terminal conectada:

Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que mejora el rendimiento de la red y la autenticación. Todo tu trabajo en este codelab se puede hacer en un navegador.
3. Habilita las APIs
Para usar Cloud SQL, Compute Engine, Service Networking y Gemini Enterprise Agent Platform, habilita sus respectivas APIs en tu proyecto de Google Cloud.
En la terminal de Cloud Shell, asegúrate de que esté establecido tu ID del proyecto:
gcloud config set project <PROJECT_ID>
Establece la variable de entorno PROJECT_ID:
PROJECT_ID=$(gcloud config get-value project)
Habilita todos los servicios obligatorios:
gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Resultado esperado:
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
Puedes leer sobre cada API habilitada en la documentación.
4. Cree una instancia de Cloud SQL
Crea una instancia de Cloud SQL con la integración de la base de datos de Gemini Enterprise Agent Platform.
Crea una contraseña para la base de datos
Define una contraseña para el usuario de base de datos predeterminado. Puedes definir tu propia contraseña o usar una función aleatoria para generar una:
export CLOUDSQL_PASSWORD=$(openssl rand -hex 16)
Muestra el valor de la contraseña generada:
echo $CLOUDSQL_PASSWORD
Toma nota de la contraseña generada para usarla más adelante.
Crea una instancia de Cloud SQL para PostgreSQL
Las instancias de Cloud SQL se pueden crear con varios métodos, como la consola de Google Cloud, Terraform o Google Cloud CLI (gcloud). En este codelab, usarás gcloud. Para aprender a crear una instancia con otras herramientas, consulta la documentación de Crea instancias.
En Cloud Shell, ejecuta el siguiente comando para crear la instancia:
gcloud sql instances create my-cloudsql-instance \
--database-version=POSTGRES_18 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--edition=ENTERPRISE \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on
Después de crear la instancia, establece una contraseña para el usuario predeterminado (postgres) y verifica que puedas conectarte:
gcloud sql users set-password postgres \
--instance=my-cloudsql-instance \
--password=$CLOUDSQL_PASSWORD
Conéctate a la instancia mediante gcloud sql connect. Cuando se te solicite, ingresa la contraseña:
gcloud sql connect my-cloudsql-instance --user=postgres
Para salir de la sesión de psql, presiona Ctrl + D o ingresa exit:
exit
Habilita la integración de Gemini Enterprise Agent Platform
Otorga el rol de IAM necesario a la cuenta de servicio de Cloud SQL para habilitar la integración de Gemini Enterprise Agent Platform.
Recupera el correo electrónico de la cuenta de servicio de Cloud SQL y expórtalo como una variable de entorno:
SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL
Otorga el rol roles/aiplatform.user a la cuenta de servicio de Cloud SQL:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role="roles/aiplatform.user"
Para obtener más información sobre la creación y configuración de instancias, consulta Integra Cloud SQL con Gemini Enterprise Agent Platform.
5. Prepara la base de datos
Crea una base de datos y habilita la compatibilidad con vectores.
Crea una base de datos
Crea una base de datos con el nombre quickstart_db. Puedes crear bases de datos con clientes de bases de datos (como psql), Google Cloud CLI o Cloud SQL Studio. En este paso, usa gcloud.
En Cloud Shell, ejecuta el siguiente comando para crear la base de datos:
gcloud sql databases create quickstart_db --instance=my-cloudsql-instance
Habilita las extensiones
Para trabajar con Gemini Enterprise Agent Platform y vectores, habilita dos extensiones en la base de datos quickstart_db: google_ml_integration y vector.
En Cloud Shell, conéctate a la base de datos:
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Cuando se te solicite, ingresa la contraseña de la base de datos.
En la sesión de SQL, ejecuta los siguientes comandos:
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector CASCADE;
Sal de la sesión de SQL:
exit;
6. Cargar datos
Crea tablas en la base de datos y carga datos con archivos de conjuntos de datos ficticios de Cymbal Store almacenados en un bucket público de Cloud Storage en formato CSV.
Primero, crea los objetos de esquema necesarios. Ejecuta gcloud sql connect y gcloud storage para descargar e importar el esquema:
En Cloud Shell, ejecuta el siguiente comando (cuando se te solicite, ingresa la contraseña que creaste para la instancia):
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql | gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Este comando se conecta a la base de datos y ejecuta el código SQL descargado para crear tablas, índices y secuencias.
A continuación, descarga los archivos de datos CSV de Cloud Storage:
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv .
Conéctate a la base de datos:
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Importa datos de los archivos CSV:
\copy cymbal_products from 'cymbal_products.csv' csv header
\copy cymbal_inventory from 'cymbal_inventory.csv' csv header
\copy cymbal_stores from 'cymbal_stores.csv' csv header
Si usas tus propios datos y los archivos CSV son compatibles con la herramienta de importación de Cloud SQL en la consola de Google Cloud, puedes usar la consola en lugar de la línea de comandos.
7. Crear incorporaciones
Crea embeddings para las descripciones de los productos con el modelo text-embedding-005 de Gemini Enterprise Agent Platform y almacénalos como datos vectoriales.
Si se desconectó tu sesión, conéctate a la base de datos:
gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres
Crea una columna generada llamada embedding en la tabla cymbal_products con la función embedding. Este comando crea una columna generada almacenada que contiene los embeddings de vectores generados a partir de la columna product_description para todas las filas de la tabla. El modelo se especifica como el primer parámetro y la columna de texto fuente como el segundo parámetro:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (google_ml.embedding('text-embedding-005', product_description)) STORED;
Para entre 900 y 1,000 filas, este proceso suele tardar entre 1 y 5 minutos.
Cuando insertas una fila nueva en la tabla o actualizas product_description en una fila existente, la columna embedding se actualiza automáticamente.
8. Ejecuta una búsqueda de similitud
Ejecuta una búsqueda de similitud comparando los embeddings de vectores calculados para las descripciones de los productos con el embedding de una búsqueda.
Puedes ejecutar consultas en SQL desde la línea de comandos con gcloud sql connect o desde Cloud SQL Studio. Cloud SQL Studio proporciona una forma más conveniente de editar y ejecutar sentencias de SQL largas con varias filas en el resultado.
Inicia Cloud SQL Studio
- En la consola de Google Cloud, navega a Instancias de Cloud SQL y haz clic en
my-cloudsql-instance.

- En el menú de navegación, haz clic en Cloud SQL Studio.

- En el diálogo de autenticación, ingresa el nombre y las credenciales de la base de datos:
- Base de datos:
quickstart_db - Usuario:
postgres - Contraseña:
- Base de datos:
- Haz clic en Autenticar.

- Haz clic en la pestaña Editor para abrir el editor de SQL.

Ejecutar consulta
Ejecuta una búsqueda para recuperar los 10 productos más relevantes para la búsqueda del cliente: "¿Qué tipo de árboles frutales crecen bien aquí?"
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 10;
En Cloud SQL Studio, ingresa la consulta y haz clic en Ejecutar (o ejecuta la consulta en tu sesión de psql):

La búsqueda devuelve los productos coincidentes ordenados por distancia de coseno:
product_name | description | sale_price | zip_code | distance -------------------------+----------------------------------------------------------------------------------+------------+----------+--------------------- Cherry Tree | This is a beautiful cherry tree that will produce delicious cherries. It is an d | 75.00 | 93230 | 0.43922018972266397 Meyer Lemon Tree | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by | 34 | 93230 | 0.4685112926118228 Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.4835677149651668 California Lilac | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d | 5.00 | 93230 | 0.4947204525907498 California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e | 25.00 | 93230 | 0.5054166905547247 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d | 100.00 | 93230 | 0.5084219510932597 California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.5140519790508755 Coast Live Oak | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev | 500.00 | 93230 | 0.5143126438081371 Fremont Cottonwood | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i | 200.00 | 93230 | 0.5174774727252058 Madrone | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an | 50.00 | 93230 | 0.5227400803389093 (10 rows)
9. Mejora la respuesta del LLM con los datos recuperados
Mejora la respuesta de la IA generativa a una aplicación cliente pasando los resultados de la búsqueda como contexto fundamentado en una instrucción a un modelo de lenguaje de base de Gemini Enterprise Agent Platform.
Entonces:
- Genera una carga útil de JSON a partir del resultado de la búsqueda vectorial en Cloud SQL.
- Prueba la instrucción en Agent Platform Studio.
- Ejecuta la instrucción de extremo a extremo directamente desde SQL con la integración de
google_ml.
Genera el resultado en formato JSON
Modifica la consulta para dar formato al resultado como JSON y devolver una fila:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
Resultado JSON esperado:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
Ejecuta la instrucción en Agent Platform Studio
Proporciona el JSON generado como contexto en una instrucción a un modelo generativo en Agent Platform Studio.
- En la consola de Google Cloud, abre Agent Platform Studio.

- Ingresa la siguiente instrucción en Agent Platform Studio:

You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
<JSON_OUTPUT>
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.
Reemplaza por la respuesta JSON de tu búsqueda:
You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

- Ejecuta la instrucción.

La respuesta incluye el precio, la descripción y la información complementaria que el modelo obtiene de fuentes externas en función de la información sobre el árbol y la ubicación.
Ejecuta la instrucción en psql
También puedes usar la integración de IA de Cloud SQL con Gemini Enterprise Agent Platform para obtener respuestas de un modelo generativo directamente en SQL. Primero, registra el modelo.
- Si es necesario, actualiza la extensión a la versión 1.4.3 o posterior. Conéctate a
quickstart_dby ejecuta lo siguiente:
SELECT extversion from pg_extension where extname='google_ml_integration';
Si la versión que se muestra es inferior a 1.4.3, ejecuta el siguiente comando:
ALTER EXTENSION google_ml_integration UPDATE TO '1.4.3';
- Verifica la marca de base de datos
google_ml_integration.enable_model_support:
SHOW google_ml_integration.enable_model_support;
Si la marca es off, actualiza la marca de base de datos en Cloud Shell:
gcloud sql instances patch my-cloudsql-instance \
--database-flags google_ml_integration.enable_model_support=on,cloudsql.enable_google_ml_integration=on
Esta operación tarda entre 1 y 3 minutos. Vuelve a verificar el parámetro de configuración:
SHOW google_ml_integration.enable_model_support;
- Registra el modelo
gemini-3.5-flashpara generar respuestas (reemplazapor el ID de tu proyecto):
CALL
google_ml.create_model(
model_id => 'gemini-3.5-flash',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.5-flash:generateContent',
model_provider => 'google',
model_auth_type => 'cloudsql_service_agent_iam');
Verifica los modelos registrados:
SELECT model_id, model_type FROM google_ml.model_info_view WHERE model_id='gemini-3.5-flash';
- Ejecuta la consulta en SQL completa para recuperar los resultados de la búsqueda vectorial y pasarlos directamente a
gemini-3.5-flash:
WITH trees AS (
SELECT
cp.product_name,
cp.product_description AS description,
cp.sale_price,
cs.zip_code,
cp.uniq_id AS product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci ON
ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
cs.store_id = ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005',
'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
trees),
response AS (
SELECT
google_ml.predict_row( model_id =>'gemini-3.5-flash',
request_body => json_build_object('contents',
json_build_object('role',
'user',
'parts',
json_build_object('text',
prompt_text))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
prompt)
SELECT
REPLACE(resp::text, '\n', CHR(10))
FROM
response;
Resultado esperado:
"Hello there! If you're looking for a wonderful fruit tree to plant, I have a fantastic option for you: ### **Cherry Tree** * **Price:** $75.00 * **Product ID:** `d536e9e823296a2eba198e52dd23e712` --- ### **Why it's a great choice:** * **Fruit & Shade:** Not only will it produce delicious, sweet cherries, but it also grows into a beautiful 15-foot deciduous tree that provides excellent shade and privacy for your yard. * **Seasonal Beauty:** Its leaves are a lovely dark green throughout the summer and transition into a striking red during the fall. * **Ideal Growing Conditions:** Cherry trees thrive best in cool, moist climates with sandy soil and are suitable for **USDA hardiness zones 4–9**. If your local climate matches these conditions, this Cherry Tree would make a beautiful and tasty addition to your garden! Let me know if you'd like more details or help placing an order."
10. Crea un índice de vecinos más cercanos
Para los conjuntos de datos grandes con millones de vectores, la búsqueda de vectores puede requerir una gran cantidad de recursos de procesamiento. Para mejorar el rendimiento de las consultas, crea un índice en los embeddings de vectores.
Crea un índice de HNSW
El índice de vectores Hierarchical Navigable Small World (HNSW) se basa en un gráfico.
Para compilar un índice HNSW en la columna embedding, especifica la función de distancia (vector_cosine_ops) y los parámetros opcionales, como m y ef_construction. Para obtener más información, consulta Trabaja con embeddings vectoriales.
CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
Resultado esperado:
quickstart_db=> CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64); CREATE INDEX quickstart_db=>
Compara el rendimiento de las búsquedas
Ejecuta la búsqueda vectorial con EXPLAIN (ANALYZE) para verificar que el optimizador de consultas use el índice:
EXPLAIN (ANALYZE)
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
Resultado esperado:
Aggregate (cost=779.12..779.13 rows=1 width=32) (actual time=1.066..1.069 rows=1 loops=1)
-> Subquery Scan on trees (cost=769.05..779.12 rows=1 width=142) (actual time=1.038..1.041 rows=1 loops=1)
-> Limit (cost=769.05..779.11 rows=1 width=158) (actual time=1.022..1.024 rows=1 loops=1)
-> Nested Loop (cost=769.05..9339.69 rows=852 width=158) (actual time=1.020..1.021 rows=1 loops=1)
-> Nested Loop (cost=768.77..9316.48 rows=852 width=945) (actual time=0.858..0.859 rows=1 loops=1)
-> Index Scan using cymbal_products_embeddings_hnsw on cymbal_products cp (cost=768.34..2572.47 rows=941 width=941) (actual time=0.532..0.539 rows=3 loops=1)
...
Planning Time: 112.398 ms
Execution Time: 1.221 ms
El plan de ejecución muestra Index Scan using cymbal_products_embeddings_hnsw.
Ejecuta la consulta sin EXPLAIN:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
Resultado esperado:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
Para obtener más información y ejemplos con LangChain y los índices vectoriales, consulta la documentación de la descripción general de la IA de Cloud SQL.
11. Limpia los recursos
Borra la instancia de Cloud SQL después de terminar el codelab.
En Cloud Shell, configura el proyecto y las variables de entorno si se desconectó tu sesión:
export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)
Borra la instancia:
gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
Resultado esperado:
student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID All of the instance data will be lost when the instance is deleted. Do you want to continue (Y/n)? y Deleting Cloud SQL instance...done. Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].
12. ¡Felicitaciones!
¡Felicitaciones! Completaste el codelab.
Este lab forma parte de la ruta de aprendizaje de IA lista para producción con Google Cloud.
- Explora el plan de estudios completo para cerrar la brecha entre el prototipo y la producción.
- Comparte tu progreso con el hashtag
#ProductionReadyAI.
Resumen
Aprendiste todo esto:
- Implementa una instancia de Cloud SQL para PostgreSQL
- Crea una base de datos y habilita la integración de la IA de Cloud SQL
- Carga datos en la base de datos
- Usa Cloud SQL Studio
- Usa un modelo de lenguaje integrado de Gemini Enterprise Agent Platform en Cloud SQL
- Usa Agent Platform Studio
- Enriquece los resultados de la búsqueda con un modelo generativo de Gemini Enterprise Agent Platform
- Mejora el rendimiento de las consultas con un índice de vectores
Prueba el codelab de embeddings de vectores de AlloyDB AI con el índice ScaNN en lugar de HNSW.