Nesta página, mostramos como usar o AlloyDB como uma ferramenta de modelo de linguagem grande (LLM) 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.
Com o AlloyDB, é possível usar um LLM hospedado pela Vertex AI para traduzir uma string de texto em uma 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 a embeddings de texto, consulte Embeddings de texto.
Antes de começar
Para permitir que o AlloyDB gere embeddings, verifique se você atende aos seguintes requisitos:
Restrições regionais
É possível gerar embeddings nas 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, verifique se o cluster do AlloyDB e o modelo da Vertex AI que você está consultando estão na mesma região.
Extensão de banco de dados obrigatória
Verifique se a extensão
google_ml_integration
está instalada no seu banco de dados do AlloyDB.CREATE EXTENSION google_ml_integration;
Essa extensão está incluída no AlloyDB. É possível instalá-lo em qualquer banco de dados no cluster.
Defina a flag de banco de dados
google_ml_integration.enable_model_support
comooff
.
Configurar o acesso ao modelo
Antes de gerar embeddings de um banco de dados do AlloyDB, configure o AlloyDB para trabalhar com um modelo de embedding de texto.
Para trabalhar com o modelo de textembeddings-gecko
baseado na nuvem, você precisa instalar o AlloyDB Omni com a IA do AlloyDB.
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 fazer previsões:
Conecte um cliente
psql
à instância principal do cluster, conforme descrito em Executar e se conectar ao AlloyDB Omni.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 devem ser concedidas
USER_NAME: o nome do usuário para quem as permissões devem ser concedidas
Gerar um embedding
O AlloyDB 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, 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
textembedding-gecko@003
como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB 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
textembedding-gecko
com a Vertex AI, especifique uma das tags de versão, por exemplo,textembedding-gecko@003
, 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 003
dos modelos em inglês textembedding-gecko
para gerar um embedding com base em uma string literal fornecida:
SELECT embedding('textembedding-gecko@003', '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
textembedding-gecko@003
como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB 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
textembedding-gecko
com a Vertex AI, especifique uma das tags de versão, por exemplo,textembedding-gecko@003
, 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
Fazer pesquisa por similaridade
Você também pode usar a função embedding()
para traduzir o
texto em um vetor. Você aplica o vetor ao operador vizinho mais próximo pgvector
, <->
, para encontrar as linhas do banco de dados com os embeddings mais semanticamente 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 google_ml_integration;
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
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 seus aplicativos.
Para evitar esses problemas, sempre especifique a versão do modelo.
Resolver problemas
ERROR: Model not found for 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_integration
e tente gerar incorporações de novo.ALTER EXTENSION google_ml_integration UPDATE;
Você também pode soltar a extensão e criá-la novamente.
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_id
correto na consulta.