En esta página se describe cómo hacer consultas con operadores de SQL basados en IA proporcionados por el motor de consultas de AlloyDB AI. Puedes usar los operadores ai.if
para filtros, ai.rank
y ai.generate
para combinar lenguaje natural con consultas SQL.
Para seguir las instrucciones de esta página, debes tener conocimientos de AlloyDB y estar familiarizado con los conceptos de IA generativa.
AlloyDB AI reserva y crea el esquema ai
.
Antes de empezar
Antes de usar el lenguaje natural en los operadores de SQL, haz lo siguiente:
- Comprueba que la extensión
google_ml_integration
esté instalada. - Verifica que la marca
google_ml_integration.enable_model_support
esté definida comoon
. - Integración con Vertex AI.
- Usa un modelo de Gemini que esté disponible en tu zona.
Integrar con Vertex AI e instalar la extensión
- Integración con Vertex AI.
- Asegúrate de que esté instalada la versión más reciente de
google_ml_integration
.Para comprobar la versión instalada, ejecuta el siguiente comando:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.3 (1 row)
Si la extensión no está instalada o la versión instalada es anterior a la 1.4.3, actualízala ejecutando los siguientes comandos:
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Si tienes problemas al ejecutar los comandos anteriores o si la extensión no se actualiza a la versión 1.4.3 después de ejecutar los comandos anteriores, ponte en contacto con el equipo de Asistencia de AlloyDB.
Una vez que te hayas asegurado de que la versión está actualizada, instala la función de vista previa ejecutando el procedimiento
upgrade_to_preview_version
:CALL google_ml.upgrade_to_preview_version(); SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.4 (1 row)
Usar un modelo de Gemini que esté disponible en tu zona
Si tu clúster de AlloyDB para PostgreSQL se encuentra en una región en la que gemini-2.0-flash
no está disponible, puedes usar uno de los otros modelos de Gemini disponibles en tu región mediante la model_id parameter
.
También puedes registrar un endpoint de modelo de Gemini y proporcionar ese ID de modelo a los operadores de IA. Para obtener más información, consulta Registrar y llamar a modelos de IA remotos con la gestión de endpoints de modelos.
En el siguiente ejemplo se muestra cómo registrar otro endpoint de Gemini. En este ejemplo, este segundo endpoint de Gemini es el endpoint global de gemini-2.0-flash
. Puedes usar este modelo registrado con operadores de IA si pasas model_id =>
gemini-2.0-flash-global` como argumento adicional.
CALL
google_ml.create_model(
model_id => 'gemini-2.0-flash-global',
model_type => 'llm',
model_provider => 'google',
model_qualified_name => 'gemini-2.0-flash',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/<project_id>/locations/global/publishers/google/models/gemini-2.0-flash:generateContent',
model_auth_type => 'alloydb_service_agent_iam'
);
Usar filtros en las consultas
AlloyDB AI ofrece varias funciones de SQL basadas en IA que te permiten usar el procesamiento del lenguaje natural y los LLMs directamente en tus consultas de la base de datos, incluidos los operadores ai.if
y ai.rank
.
Filtros
Para evaluar si se cumple una condición expresada en lenguaje natural, usa el operador ai.if
/google_ml.if
. La función devuelve el valor booleano true o false y devuelve false
si la salida no se detecta claramente.
- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool
En el siguiente ejemplo se muestra el uso del operador ai.if
como filtro para encontrar restaurantes con más de 500 reseñas positivas ubicados en ciudades con una población superior a 100.000 habitantes. En el ejemplo se usan restaurant_reviews
y
contiene datos como reseñas y la ubicación de la ciudad. El operador ai.if
te ayuda a entender el sentimiento de las reseñas y a combinar las ubicaciones de la base de datos con el conocimiento general de Gemini sobre la población de esas ubicaciones.
SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
AI.IF(r.location_city || ' has a population OF more than 100,000 AND the following is a positive review; Review: ' || r.review)
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;
A continuación, se muestra el mismo ejemplo con el modelo que has registrado en Usar un modelo de Gemini compatible en tu región.
SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
AI.IF(r.location_city || ' has a population of more than 100,000 AND the following is a positive review; Review: ' || r.review, model_id => 'gemini-2.0-flash-global')
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;
Realizar una combinación en una consulta que usa el operador if
Para realizar una operación de unión, usa el operador ai.if
/google_ml.if
con join. La siguiente consulta de ejemplo busca el número de reseñas que mencionan cada elemento del menú del restaurante.
SELECT item_name, COUNT(*)
FROM menu_items JOIN user_reviews
ON ai.if(
prompt => 'Does the following user review talk about the menu item mentioned ? review: ' || user_reviews.review_text || ' menu item: ' || item_name)
GROUP BY item_name;
Generación y resumen de texto
La función ai.generate
genera texto combinando los datos proporcionados con la petición del usuario.
-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT
Por ejemplo, puedes usar la siguiente consulta para generar un resumen conciso de cada reseña de usuario.
SELECT
ai.generate(
prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews
Puntuación de los resultados de las consultas
Si necesitas ordenar los resultados de una consulta mediante instrucciones personalizadas en lenguaje natural, usa el operador ai.rank
. Esta función te permite proporcionar una petición que describe los criterios de clasificación y devuelve una puntuación para cada elemento.
-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real
Por ejemplo, la siguiente consulta obtiene las 20 reseñas de restaurantes más positivas mediante las puntuaciones de un LLM.
SELECT review AS top20
FROM user_reviews
ORDER BY ai.rank(
'Score the following review according to these rules:
(1) Score OF 8 to 10 IF the review says the food IS excellent.
(2) 4 to 7 IF the review says the food is ok.
(3) 1 to 3 IF the review says the food is not good. Here is the review:' || review) DESC
LIMIT 20;
Siguientes pasos
Registra un endpoint de modelo con la gestión de endpoints de modelo.
Filtrar semánticamente las consultas de SQL y clasificar los resultados.