Nesta página, mostramos como usar o AlloyDB Omni 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 Omni, é 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 Omni gere incorporações, 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 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 obrigatória
Verifique se a extensão
google_ml_integration
está instalada no seu 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á-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 Omni, configure o AlloyDB Omni para trabalhar com um modelo de embedding de texto.
Para trabalhar com o modelo de text-embedding-005
baseado na nuvem, você precisa
integrar seu 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 fazer previsões:
Conecte um cliente
psql
à instância principal do cluster, conforme descrito em Conectar um clientepsql
a 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 devem ser concedidas
USER_NAME: o nome do usuário para quem as permissões devem 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 com 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-005
como 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-embedding
com 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-005
como 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-embedding
com 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
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 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 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 IF NOT EXISTS 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.