Faça consultas SQL inteligentes com funções de IA

Esta página descreve como consultar através de operadores SQL com tecnologia de IA fornecidos por funções de IA. 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 linguagem natural em operadores SQL, faça o seguinte:

Faça a integração com o Vertex AI e instale a extensão

  1. Configure o acesso dos utilizadores aos modelos do Vertex AI.
  2. Verifique se tem a versão mais recente do google_ml_integration instalada.
    1. Para verificar a versão instalada, execute o seguinte comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion 
              ------------
              1.5.2
              (1 row)
            
    2. Se a extensão não estiver instalada ou se a versão instalada for anterior à 1.5.2, atualize a extensão.

              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.5.2 depois de executar os comandos anteriores, contacte o Google Cloud apoio técnico.

  3. Para usar a funcionalidade do motor de consultas de IA do AlloyDB, defina a flag google_ml_integration.enable_ai_query_engine como true.

    SQL

    1. Ative o motor de consultas de IA para a sessão atual.
                    SET google_ml_integration.enable_ai_query_engine = true;
                    
    2. Ative funcionalidades para uma base de dados específica em várias sessões.
                    ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
                    
    3. Ative o motor de consultas de IA para um utilizador específico em sessões e bases de dados.
                    ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
                  

    Consola

    Para modificar o valor da flag google_ml_integration.enable_ai_query_engine, siga os passos descritos em Configure as flags da base de dados de uma instância.

    gcloud

    Para usar a CLI gcloud, pode instalar e inicializar a CLI Google Cloud ou usar a Cloud Shell.

    Pode modificar o valor da flag google_ml_integration.enable_ai_query_engine. Para mais informações, consulte o artigo Configure as flags da base de dados de uma instância.

                 gcloud alloydb instances update INSTANCE_ID \
                   --database-flags google_ml_integration.enable_ai_query_engine=on \
                   --region=REGION_ID \
                   --cluster=CLUSTER_ID \
                   --project=PROJECT_ID
                

Use um modelo do Gemini compatível na sua região

Se o seu cluster do AlloyDB for PostgreSQL estiver numa região onde o gemini-2.0-flashnão é suportado, pode usar um dos outros modelos do 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 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;

Realize 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 obtém 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?