Faça consultas SQL inteligentes com o motor de consultas de IA do AlloyDB

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:

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

  1. Integre com o Vertex AI.
  2. Certifique-se de que tem instalada a versão mais recente do google_ml_integration.
    1. 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)
            
    2. 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.

    3. 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?