En esta página, se describe cómo realizar consultas con los operadores de SQL potenciados por IA que proporciona 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 en SQL.
Para usar las instrucciones de esta página, debes comprender AlloyDB y conocer los conceptos de la IA generativa.
AlloyDB AI reserva y crea el esquema ai
.
Antes de comenzar
Antes de usar el lenguaje natural en los operadores de SQL, haz lo siguiente:
- Verifica que la extensión
google_ml_integration
esté instalada. - Verifica que la marca
google_ml_integration.enable_model_support
esté establecida enon
. - Integración en Vertex AI
- Usa un modelo de Gemini compatible con tu región.
Integra la extensión en Vertex AI y, luego, instálala
- Integración en Vertex AI
- Asegúrate de que esté instalada la versión más reciente de
google_ml_integration
.Para verificar 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 si la versión instalada es anterior a la 1.4.3, ejecuta los siguientes comandos para actualizarla:
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Si tienes problemas cuando ejecutas 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, comunícate con el equipo de asistencia de AlloyDB.
Después de asegurarte de que la versión esté actualizada, instala la funcionalidad 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)
Usa un modelo de Gemini compatible con tu región
Si tu clúster de AlloyDB para PostgreSQL se encuentra en una región en la que no se admite gemini-2.0-flash
, puedes usar uno de los otros modelos de Gemini disponibles en tu región con model_id parameter
.
También puedes registrar un extremo del modelo de Gemini y proporcionar ese ID del modelo a los operadores de IA. Para obtener más información, consulta Cómo registrar y llamar a modelos de IA remotos con la administración de extremos de modelos.
En el siguiente ejemplo, se muestra cómo registrar otro extremo de Gemini. En este ejemplo, el segundo extremo de Gemini es el extremo global para gemini-2.0-flash
. Puedes usar este modelo registrado con operadores de IA pasando 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'
);
Usa filtros en tus consultas
AlloyDB AI ofrece varias funciones de SQL potenciadas por IA que te permiten usar el procesamiento de lenguaje natural y los LLM directamente en tus consultas de bases de datos, incluidos los operadores ai.if
y ai.rank
.
Filtros
Para evaluar si se cumple una condición establecida en lenguaje natural, usa el operador ai.if
/google_ml.if
. La función devuelve un valor booleano verdadero o falso, y devuelve false
si no se detecta claramente la salida.
- 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 opiniones positivas ubicados en ciudades con una población superior a 100,000 habitantes. En el ejemplo, se usa restaurant_reviews
y se incluyen datos como opiniones y la ubicación de la ciudad. El operador ai.if
te ayuda a comprender el sentimiento de la opinión y a combinar las ubicaciones de la base de datos con el conocimiento general de Gemini sobre la población en 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 registraste en Usa un modelo de Gemini compatible con 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;
Realiza una unió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 la unión. La siguiente consulta de ejemplo busca la cantidad de opiniones 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;
Creación y resumen de textos
La función ai.generate
produce texto combinando los datos proporcionados con la instrucció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 opinión del usuario.
SELECT
ai.generate(
prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews
Cómo calificar los resultados de tu búsqueda
Si necesitas ordenar los resultados de la búsqueda con instrucciones personalizadas en lenguaje natural, usa el operador ai.rank
. Esta función te permite proporcionar una instrucció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 opiniones más positivas sobre restaurantes, utilizando 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;
¿Qué sigue?
Registra un extremo del modelo con la administración de extremos del modelo.
Clasifica y califica los resultados de la búsqueda para la RAG.
Filtrar semánticamente las consultas en SQL y clasificar los resultados