Acelerar consultas usando funções otimizadas

As funções otimizadas permitem usar um modelo de proxy menor e mais rápido para processar a maioria das consultas e recorrer a um LLM maior somente quando necessário. Essa abordagem reduz os custos operacionais e melhora a capacidade de resposta da consulta. As funções otimizadas minimizam o uso de LLMs para tarefas de classificação ou filtragem linha por linha, que podem ser melhor processadas pelo modelo de proxy.

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 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 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 plataforma de agentes do Gemini Enterprise. Para mais informações, consulte Integrar seu banco de dados à plataforma de agentes.

  • 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 do Agent Platform estão disponíveis. Para 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 da 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 prompt 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 o 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 novamente

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 prompt fornecido à função ai.if(), será necessário emitir uma nova instrução PREPARE. O AlloyDB treina a função otimizada para aproximar o comportamento de uma combinação exclusiva de prompt e dados de entrada.

A seguir