Esta página descreve como consultar usando operadores SQL com tecnologia de IA fornecidos pelo
motor de consultas de IA do AlloyDB. Pode usar os operadores ai.if
para filtros,
ai.rank
e ai.generate
para combinar a linguagem natural com consultas SQL.
Para usar as instruções nesta página, tem de compreender o AlloyDB e estar familiarizado com os conceitos de IA generativa.
A IA do AlloyDB reserva e cria o esquema ai
.
Antes de começar
Antes de usar a linguagem natural nos 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
. - Integre com o Vertex AI.
- Use um modelo do Gemini suportado na sua região.
Faça a integração com o Vertex AI e instale a extensão
- Integre com o Vertex AI.
- Certifique-se de que tem instalada a versão mais recente do
google_ml_integration
.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 tiver problemas quando 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, contacte o apoio técnico do AlloyDB.
Depois de se certificar de que a versão está atualizada, instale a funcionalidade de pré-visualização 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)
Use um modelo do Gemini suportado na sua região
Se o seu cluster do AlloyDB for PostgreSQL estiver numa região onde o gemini-2.0-flash
não é suportado, pode usar um dos outros modelos Gemini disponíveis na sua região através da model_id parameter
.
Em alternativa, pode registar um ponto final do modelo Gemini e fornecer esse ID do modelo aos operadores de IA. Para mais informações, consulte o artigo Registe e chame modelos de IA remotos através da gestão de pontos finais de modelos.
O exemplo seguinte mostra como registar outro ponto final do Gemini. Neste exemplo, este segundo ponto final do Gemini é o ponto final global para gemini-2.0-flash
. Pode usar este modelo registado 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'
);
Use filtros nas suas consultas
O AlloyDB AI oferece várias funções SQL baseadas em IA que lhe permitem usar o processamento de linguagem natural e os MDIs diretamente nas suas consultas de base de dados, incluindo os operadores ai.if
e ai.rank
.
Filtros
Para avaliar se uma condição expressa em linguagem natural é cumprida, use o operador
ai.if
/google_ml.if
. A função devolve o valor booleano verdadeiro ou falso e devolve false
se a saída não for claramente detetada.
- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool
O exemplo seguinte mostra a utilização do operador ai.if
como filtro para encontrar restaurantes com mais de 500 críticas positivas localizados em cidades com uma população superior a 100 000 habitantes. O exemplo usa restaurant_reviews
e
contém dados como críticas e a localização da cidade. O operador ai.if
ajuda a
compreender o sentimento das críticas e a combinar
as localizações da base de dados com os conhecimentos gerais do Gemini
sobre a população nestas localizaçõ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;
O exemplo seguinte mostra o mesmo exemplo com o modelo que registou em Use um modelo do Gemini suportado 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;
Faça uma junção numa consulta que use o operador if
Para realizar uma operação de união, use o operador ai.if
/google_ml.if
com a união. A consulta de exemplo seguinte encontra o número de críticas que mencionam cada item do menu 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;
Geração e resumo de texto
A função ai.generate
produz texto combinando os dados fornecidos com o pedido do utilizador.
-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT
Por exemplo, pode usar a seguinte consulta para gerar um resumo conciso de cada crítica do utilizador.
SELECT
ai.generate(
prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews
Atribua uma pontuação aos resultados da consulta
Se precisar de ordenar os resultados da consulta através de instruções personalizadas em linguagem natural,
use o operador ai.rank
. Esta função permite-lhe fornecer um comando que descreve os critérios de classificação e devolve uma pontuação para cada item.
-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real
Por exemplo, a seguinte consulta recebe as 20 críticas de restaurantes mais positivas, usando pontuações de um GML.
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;
O que se segue?
Registe um ponto final do modelo com a gestão de pontos finais do modelo.
Filtrar semanticamente consultas SQL e classificar resultados.