Nesta página, descrevemos como consultar usando operadores SQL com tecnologia de IA fornecidos pelo
mecanismo de consulta da AlloyDB AI. Você pode usar os operadores ai.if
para filtros, ai.rank
e ai.generate
para combinar linguagem natural com consultas SQL.
Para usar as instruções desta página, você precisa entender o AlloyDB e conhecer os conceitos de IA generativa.
O AlloyDB AI reserva e cria o esquema ai
.
Antes de começar
Antes de usar a linguagem natural em operadores SQL, faça o seguinte:
- Verifique se a extensão
google_ml_integration
está instalada. - Verifique se a flag
google_ml_integration.enable_model_support
está definida comoon
. - Integrar com a Vertex AI.
- Use um modelo do Gemini disponível na sua região.
Integrar com a Vertex AI e instalar a extensão
- Integrar com a Vertex AI.
- Verifique se a versão mais recente do
google_ml_integration
está instalada.Para verificar a versão instalada, execute o seguinte comando:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.3 (1 row)
Se a extensão não estiver instalada ou se a versão instalada for anterior à 1.4.3, atualize a extensão executando os seguintes comandos:
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Se você tiver problemas ao executar os comandos anteriores ou se a extensão não for atualizada para a versão 1.4.3 depois de executar os comandos anteriores, entre em contato com o suporte do AlloyDB.
Depois de verificar se a versão está atualizada, instale a funcionalidade de prévia executando o procedimento
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 um modelo do Gemini disponível na sua região
Se o cluster do AlloyDB para PostgreSQL estiver em uma região em que gemini-2.0-flash
não é compatível, use um dos outros modelos do Gemini disponíveis
na sua região usando o model_id parameter
.
Como alternativa, é possível registrar um endpoint de modelo do Gemini e fornecer esse ID de modelo aos operadores de IA. Para mais informações, consulte Registrar e chamar modelos de IA remotos usando o gerenciamento de endpoints de modelo.
O exemplo a seguir mostra como registrar outro endpoint do Gemini. Neste exemplo, o segundo endpoint do Gemini é o
global para gemini-2.0-flash
. É possível usar esse modelo registrado com operadores de IA transmitindo model_id =>
gemini-2.0-flash-global` como um 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 nas consultas
A IA do AlloyDB oferece várias funções de SQL com tecnologia de IA que permitem usar o processamento de linguagem natural e LLMs diretamente nas consultas de banco de dados, incluindo os operadores ai.if
e ai.rank
.
Filtros
Para avaliar se uma condição declarada em linguagem natural é atendida, use o operador
ai.if
/google_ml.if
. A função retorna o valor booleano verdadeiro ou falso e false
se a saída não for detectada claramente.
- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool
O exemplo a seguir mostra o uso do operador ai.if
como um filtro para encontrar restaurantes com mais de 500 avaliações positivas localizados em cidades com uma população maior que 100.000. O exemplo usa restaurant_reviews
e
contém dados como avaliações e localização da cidade. O operador ai.if
ajuda você a entender o sentimento da avaliação e combinar os locais do banco de dados com o conhecimento geral do Gemini sobre a população dessas regiões.
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 seguir, mostramos o mesmo exemplo usando o modelo que você registrou em Usar um modelo do Gemini compatível na sua região.
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;
Fazer uma junção em uma consulta que usa o operador "if"
Para realizar uma operação de junção, use o operador ai.if
/google_ml.if
com junção. A consulta de exemplo a seguir encontra o número de avaliações que mencionam cada item do cardápio do 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;
Resumo e geração de textos
A função ai.generate
gera texto combinando os dados fornecidos com o comando do usuário.
-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT
Por exemplo, é possível usar a consulta a seguir para gerar um resumo conciso de cada avaliação do usuário.
SELECT
ai.generate(
prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews
Pontuar os resultados da consulta
Se você precisar classificar os resultados da consulta usando instruções personalizadas de linguagem natural, use o operador ai.rank
. Com essa função, você pode fornecer um comando que
descreve os critérios de classificação e retorna uma pontuação para cada item.
-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real
Por exemplo, a consulta a seguir recebe as 20 avaliações de restaurantes mais positivas, usando pontuações de um 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;
A seguir
Registre um endpoint de modelo com o gerenciamento de endpoints de modelo.
Filtre consultas SQL semanticamente e classifique os resultados.