Acelerar consultas usando funções otimizadas

As funções otimizadas no AlloyDB para PostgreSQL permitem usar um modelo de proxy menor e mais rápido para processar a maioria das consultas SQL que usam funções de IA, recorrendo a um modelo de linguagem grande (LLM) maior apenas quando necessário. Essa abordagem reduz os custos operacionais e melhora a capacidade de resposta da consulta, minimizando as chamadas de LLM remotas para tarefas de classificação ou filtragem linha por linha.

As funções de IA do AlloyDB, como ai.if(), podem ter alta latência devido a chamadas remotas para modelos de linguagem grandes (LLMs). As funções otimizadas resolvem esse problema de latência usando modelos de proxy menores e treinados localmente para processar suas consultas. Esses modelos são treinados em uma amostra dos seus dados, usando a saída do LLM como fonte única de verdade.

As verificações de acurácia são realizadas no ambiente de execução em uma amostra de linhas usando o LLM. Para realizar essa verificação, o AlloyDB usa o LLM para gerar rótulos para as linhas de amostra e os compara com as previsões do modelo de proxy para verificar a acurácia. Se a verificação de acurácia falhar, a consulta vai usar o LLM.

Ao usar uma função otimizada, o AlloyDB faz o seguinte:

  1. Treina um modelo de proxy: o AlloyDB treina um modelo de proxy leve em uma amostra dos seus dados. Isso acontece em segundo plano quando você usa a instrução PREPARE com a função ai.if() para treinar o modelo para consultas otimizadas.
  2. Executa a consulta: quando você usa a instrução EXECUTE, o AlloyDB usa o modelo de proxy treinado para processar a consulta localmente.
  3. Recorre ao LLM: se a acurácia do modelo for baixa ou se o AlloyDB não conseguir encontrar um modelo, ele vai usar o LLM automaticamente.

Diagrama de fluxo de funções otimizadas

Antes de começar

Antes de usar as funções otimizadas, faça o seguinte:

  • Conecte-se ao banco de dados usando o psql ou o AlloyDB Studio como o usuário postgres ou como um usuário que tenha acesso à tabela em que os dados residem.
  • Verifique se a extensão google_ml_integration está instalada e disponível na versão 1.5.8 ou mais recente.

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    extversion
    ------------
    1.5.8
    (1 row)
    
  • Configure o AlloyDB para trabalhar com a Gemini Enterprise Agent Platform. Para mais informações, consulte Integrar seu banco de dados à Agent Platform.

  • Verifique se as flags de banco de dados a seguir estão ativadas. Para mais informações, consulte Configurar flags de banco de dados de uma instância.

    • google_ml_integration.enable_model_support
    • google_ml_integration.enable_ai_query_engine
    • google_ml_integration.enable_cost_optimized_ai_functions
  • Gere embeddings para a tabela que você quer consultar. Para mais informações, consulte Gerar e gerenciar embeddings automáticos para tabelas.

  • Considere o seguinte:

    • A coluna de dados de origem precisa ser do tipo TEXT ou VARCHAR.
    • A coluna de embedding que fornece entrada para a função de IA otimizada precisa ser do tipo REAL[] ou VECTOR.
    • As funções otimizadas estão disponíveis apenas em regiões em que os modelos generativos da Agent Platform estão disponíveis. Para conferir uma lista de regiões disponíveis, consulte Implantações e endpoints.

Usar funções otimizadas

Para usar uma função otimizada, use as instruções PREPARE e EXECUTE com a função ai.if(). Confira a seguir um exemplo de como usar uma função otimizada:

  1. Crie uma tabela restaurant_reviews. A coluna review que contém os dados de origem é do tipo TEXT, e a coluna review_embedding usada para consultas é do tipo VECTOR(768).

    CREATE TABLE restaurant_reviews (
        id SERIAL,
        name VARCHAR(64),
        city VARCHAR(64),
        review TEXT,
        review_embedding VECTOR(768)
    );
    
  2. Use uma instrução PREPARE com a função ai.if() para indicar que a consulta precisa usar uma função otimizada. Essa instrução aciona o treinamento assíncrono do modelo em segundo plano.

    O modelo é treinado apenas nas seguintes condições:

    • Há exatamente uma função ai.if() na consulta.
    • ai.if() não está dentro de uma subconsulta.
    PREPARE positive_reviews_query AS
    SELECT r.name, r.city
    FROM restaurant_reviews r
    WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding)
    GROUP BY r.name, r.city
    HAVING COUNT(*) > 500;
    
  3. Execute a consulta usando a instrução EXECUTE. Como a instrução PREPARE é específica para a sessão atual, é necessário executar a instrução EXECUTE na mesma conexão:

    EXECUTE positive_reviews_query;
    
    conn2=> SELECT r.name, r.city
        FROM restaurant_reviews r
        WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding)
        GROUP BY r.name, r.city
        HAVING COUNT(*) > 500;
    

    O modelo de proxy treinado não será usado se alguma das seguintes condições for atendida:

    • O conteúdo ou a coluna de embedding referenciada em ai.if() muda. As duas colunas precisam pertencer à mesma tabela.
    • O comando fornecido à coluna de conteúdo muda.
    • A estrutura da consulta muda, resultando em um query_id diferente.
    • A consulta não atende ao limite de verificação de acurácia no início da consulta.

    Nesses casos, a consulta volta a usar o LLM, e o AlloyDB retorna um aviso.

  4. Opcional. Para desativar a verificação de validação de acurácia para todo o ambiente de banco de dados, o que é necessário porque as verificações de acurácia também são realizadas durante treinamento de modelo, execute o comando a seguir.

    ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;
    

    Substitua DATABASE_NAME pelo nome do seu banco de dados.

Treinar um modelo de proxy de novo

Se os dados da tabela subjacente mudarem significativamente, você poderá treinar o modelo de proxy novamente executando a instrução PREPARE. A preparação de uma consulta substitui o modelo de proxy atual, iniciando uma nova solicitação de treinamento.

Limitações

Se você mudar a coluna de conteúdo de origem, a coluna de embedding ou o comando fornecido à função ai.if(), será necessário emitir uma nova instrução PREPARE. O AlloyDB treina a função otimizada para se aproximar do comportamento de uma combinação exclusiva de comando e dados de entrada.

A seguir