Nesta página, mostramos como usar o AlloyDB Omni como uma ferramenta de modelo de linguagem grande (LLM, na sigla em inglês) e gerar embeddings de vetor com base em um LLM.
Para mais informações sobre como usar modelos de ML com o AlloyDB Omni, consulte Criar aplicativos de IA generativa.O AlloyDB Omni permite usar um LLM hospedado pela Vertex AI para traduzir uma string de texto em um embedding, que é a representação do modelo do significado semântico do texto fornecido como um vetor numérico. Para mais informações sobre o suporte da Vertex AI para embeddings de texto, consulte Embeddings de texto.
Antes de começar
Para permitir que o AlloyDB Omni gere embeddings, verifique se você atende aos seguintes requisitos:
Restrições regionais
É possível gerar embeddings em regiões em que a IA generativa na Vertex AI está disponível. Para uma lista de regiões, consulte Locais da IA generativa na Vertex AI .
Para o AlloyDB Omni, verifique se o cluster do AlloyDB Omni e o modelo da Vertex AI que você está consultando estão na mesma região.
Extensão de banco de dados necessária
Verifique se a extensão
google_ml_integrationestá instalada no banco de dados do AlloyDB Omni.CREATE EXTENSION IF NOT EXISTS google_ml_integration;Essa extensão está incluída no AlloyDB Omni. É possível instalá-la em qualquer banco de dados no cluster.
Defina a flag de banco de dados
google_ml_integration.enable_model_supportcomooff.
Configurar o acesso ao modelo
Antes de poder gerar embeddings de um banco de dados do AlloyDB Omni, configure o AlloyDB Omni para funcionar com um modelo de embedding de texto.
Para trabalhar com o modelo text-embedding-005 baseado na nuvem, é necessário integrar o banco de dados à Vertex AI.
Conceder acesso aos usuários do banco de dados para gerar embeddings
Conceda permissão aos usuários do banco de dados para executar a função embedding para executar previsões:
Conecte um cliente
psqlà instância principal do cluster, conforme descrito em Conectar um clientepsqla uma instância.No prompt de comando psql, conecte-se ao banco de dados e conceda permissões:
\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;Substitua:
DB_NAME: o nome do banco de dados em que as permissões precisam ser concedidas
USER_NAME: o nome do usuário para quem as permissões precisam ser concedidas
Gerar um embedding
O AlloyDB Omni fornece uma função que permite traduzir texto em um embedding de vetor. Em seguida, é possível armazenar esse embedding no banco de dados como dados vetoriais e, opcionalmente, usar funções pgvector para basear consultas nele.
Para gerar um embedding usando o AlloyDB Omni, use a função embedding() fornecida pela extensão google_ml_integration:
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
Substitua:
MODEL_ID: o ID do modelo a ser consultado.Se você estiver usando o Model Garden da Vertex AI, especifique
text-embedding-005como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB Omni pode usar para embeddings de texto. Para mais informações, consulte Embeddings de texto.Opcional:
VERSION_TAG: a tag da versão do modelo a ser consultada. Adicione@ao início da tag.Se você estiver usando um dos modelos em inglês
text-embeddingcom a Vertex AI, especifique uma das tags de versão, por exemplo,text-embedding-005, listadas em Versões de modelo.O Google recomenda que você sempre especifique a tag de versão. Se você não especificar a tag de versão, o AlloyDB sempre usará a versão mais recente do modelo, o que pode gerar resultados inesperados.
TEXT: o texto a ser traduzido em um embedding de vetor.
O exemplo a seguir usa a versão 005 dos modelos em inglês text-embedding para gerar um embedding com base em uma string literal fornecida:
SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');
Armazenamento dos embeddings
Os embeddings gerados usando a google_ml_integration
extensão são implementados como matrizes de valores real.
Esses embeddings gerados são transmitidos como entradas para funções de extensão pgvector.
Para armazenar esse valor em uma tabela, adicione uma coluna real[]:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
Depois de criar uma coluna para armazenar embeddings, é possível preenchê-la com base nos valores já armazenados em outra coluna na mesma tabela:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
Substitua:
TABLE: o nome da tabelaEMBEDDING_COLUMN: o nome da coluna de embedding
MODEL_ID: o ID do modelo a ser consultado.Se você estiver usando o Model Garden da Vertex AI, especifique
text-embedding-005como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB Omni pode usar para embeddings de texto. Para mais informações, consulte Embeddings de texto.Opcional:
VERSION_TAG: a tag da versão do modelo a ser consultada. Adicione@ao início da tag.Se você estiver usando um dos modelos em inglês
text-embeddingcom a Vertex AI, especifique uma das tags de versão, por exemplo,text-embedding-005, listadas em Versões de modelo.O Google recomenda que você sempre especifique a tag de versão. Se você não especificar a tag de versão, o AlloyDB sempre usará a versão mais recente do modelo, o que pode gerar resultados inesperados.
SOURCE_TEXT_COLUMN: o nome da coluna que armazena o texto a ser traduzido em embeddings
Realizar pesquisa de similaridade
Você também pode usar a embedding() função para traduzir o
texto em um vetor. Aplique o vetor ao
pgvector operador vizinho mais próximo, <->, para encontrar as linhas do banco de dados com os
embeddings mais semânticamente semelhantes.
Como embedding() retorna uma matriz real, é necessário transmitir explicitamente a chamada
embedding() para vector para usar esses valores com operadores pgvector.
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
Usar tags de versão do modelo para evitar erros
O Google recomenda que você sempre use uma versão estável do modelo de embeddings escolhido. Na maioria dos modelos, isso significa definir explicitamente uma tag de versão.
Chamar a função embedding() sem especificar a tag de versão do modelo é sintaticamente válido, mas também é propenso a erros.
Se você omitir a tag de versão ao usar um modelo no Model Garden da Vertex AI, a Vertex AI usará a versão mais recente do modelo. Esta pode não ser a versão estável mais recente. Para mais informações sobre as versões de modelo da Vertex AI disponíveis, consulte Versões de modelo.
Uma determinada versão de modelo da Vertex AI sempre retorna a mesma resposta embedding() para uma determinada entrada de texto. Se você não especificar versões de modelo nas chamadas para embedding(), uma nova versão de modelo publicada poderá mudar abruptamente o vetor retornado para uma determinada entrada, causando erros ou outros comportamentos inesperados nos aplicativos.
Para evitar esses problemas, sempre especifique a versão do modelo.
Resolver problemas
ERRO: Modelo não encontrado para model_id
Mensagem de erro
Quando você tenta gerar um embedding usando a função embedding() ou google_ml.embedding(), ocorre o seguinte erro:
ERROR: 'Model not found for model_id:
Correção recomendada
Faça upgrade da extensão
google_ml_integratione tente gerar embeddings novamente.ALTER EXTENSION IF NOT EXISTS google_ml_integration UPDATE;Também é possível remover a extensão e criar outra.
DROP extension google_ml_integration; CREATE EXTENSION google_ml_integration;Se você gerar embeddings usando a função
google_ml.embedding(), verifique se o modelo está registrado e se você está usando omodel_idcorreto na consulta.