Antes de registrar um endpoint de modelo com o gerenciamento de endpoints de modelo, ative a extensão google_ml_integration
e configure a autenticação com base no provedor do modelo, se o endpoint de modelo exigir autenticação.
Acesse o banco de dados com o nome de usuário padrão postgres
.
Ativar a extensão
É preciso adicionar e ativar a extensão google_ml_integration
antes de começar a usar as funções associadas. O gerenciamento de endpoints de modelo exige que a extensão google_ml_integration
esteja instalada.
Verifique se a flag de banco de dados
google_ml_integration.enable_model_support
está definida comoon
para uma instância. Para mais informações sobre como definir flags de banco de dados, consulte Configurar flags de banco de dados.Opcional: se a extensão
google_ml_integration
já estiver instalada, altere-a para atualizar para a versão mais recente:ALTER EXTENSION google_ml_integration UPDATE;
Adicione a extensão
google_ml_integration
usando psql:CREATE EXTENSION IF NOT EXISTS google_ml_integration;
Opcional: conceda permissão a um usuário do PostgreSQL que não seja superadministrador para gerenciar metadados do modelo:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA google_ml TO NON_SUPER_USER;
Substitua
NON_SUPER_USER
pelo nome de usuário do PostgreSQL que não é superusuário.Ative o gerenciamento de endpoints de modelo no seu banco de dados:
ALTER SYSTEM SET google_ml_integration.enable_model_support=on; SELECT pg_reload_conf();
Verifique se a conectividade de saída está ativada.
Configurar a autenticação
As seções a seguir mostram como configurar a autenticação antes de registrar um endpoint de modelo.
Configurar a autenticação para a Vertex AI
Para usar os endpoints de modelo da Vertex AI do Google, adicione permissões da Vertex AI à conta de serviço usada durante a instalação do AlloyDB Omni. Para mais informações, consulte Configurar a instalação do AlloyDB Omni para consultar modelos baseados na nuvem.
Configurar a autenticação usando o Secret Manager
Esta etapa é opcional se o endpoint do modelo não processar a autenticação pelo Secret Manager. Por exemplo, se o endpoint do modelo usar cabeçalhos HTTP para transmitir informações de autenticação ou não usar autenticação.
Para criar e usar uma chave de API ou um token de acesso, siga estas etapas:
Crie o secret no Secret Manager. Para mais informações, consulte Criar um secret e acessar uma versão dele.
O caminho secreto é usado na função SQL
google_ml.create_sm_secret()
.Conceda permissões ao cluster do AlloyDB para acessar o secret.
gcloud secrets add-iam-policy-binding 'SECRET_NAME' \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role="roles/secretmanager.secretAccessor"
Substitua:
SECRET_NAME
: o nome do secret no Secret Manager.SERVICE_ACCOUNT_ID
: o ID da conta de serviço que você criou na etapa anterior. Confira se é a mesma conta usada durante a instalação do AlloyDB Omni. Isso inclui o sufixoPROJECT_ID.iam.gserviceaccount.com
completo. Por exemplo:my-service@my-project.iam.gserviceaccount.com
Também é possível conceder esse papel à conta de serviço no nível do projeto. Para mais informações, consulte Adicionar uma vinculação de política do Identity and Access Management.
Configurar a autenticação usando cabeçalhos
O exemplo a seguir mostra como configurar a autenticação usando uma função que retorna um objeto JSON com os cabeçalhos necessários para fazer uma solicitação ao modelo de incorporação.
CREATE OR REPLACE FUNCTION HEADER_GEN_FUNCTION(
model_id VARCHAR(100),
input_text TEXT
)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
api_key VARCHAR(255) := 'API_KEY';
header_json JSON;
BEGIN
header_json := json_build_object(
'Content-Type', 'application/json',
'Authorization', 'Bearer ' || api_key
);
RETURN header_json;
END;
$$;
Substitua:
HEADER_GEN_FUNCTION
: o nome da função de geração de cabeçalho que você pode usar ao registrar um modelo.API_KEY
: a chave de API do provedor do modelo.
Modelos de embedding de texto
Nesta seção, mostramos como registrar endpoints de modelo com o gerenciamento de endpoints de modelo.
O gerenciamento de endpoints de modelo é compatível com alguns modelos de embedding de texto e genéricos da Vertex AI como endpoints de modelo pré-registrados. Você pode usar diretamente o ID do modelo para gerar embeddings ou invocar previsões, com base no tipo de modelo. Para mais informações sobre os modelos pré-registrados compatíveis, consulte Modelos pré-registrados da Vertex AI.
Por exemplo, para chamar o modelo textembedding-gecko
pré-registrado, use diretamente a função de embedding:
SELECT google_ml.embedding( model_id => 'textembedding-gecko', content => 'AlloyDB is a managed, cloud-hosted SQL database service');
Da mesma forma, para chamar o modelo gemini-1.5-pro:generateContent
pré-registrado, você pode chamar diretamente o modelo usando a função de previsão:
SELECT json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5-pro:generateContent', request_body => '{ "contents": [ { "role": "user", "parts": [ { "text": "For TPCH database schema as mentioned here https://www.tpc.org/TPC_Documents_Current_Versions/pdf/TPC-H_v3.0.1.pdf , generate a SQL query to find all supplier names which are located in the India nation." } ] } ] }'))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';
Para gerar embeddings, saiba como gerar embeddings para endpoints de modelos pré-registrados. Para invocar previsões, saiba como invocar previsões para endpoints de modelo pré-registrados.
Modelos de embedding de texto com suporte integrado
O gerenciamento de endpoints de modelo oferece suporte integrado a alguns modelos da Vertex AI e da OpenAI. Para conferir a lista de modelos com suporte integrado, consulte Modelos com suporte integrado.
Para modelos com suporte integrado, defina o nome qualificado como o nome qualificado do modelo e especifique o URL da solicitação. O gerenciamento de endpoints de modelo identifica automaticamente o modelo e configura funções de transformação padrão.
Modelos de embedding da Vertex AI
As etapas a seguir mostram como registrar modelos da Vertex AI com suporte integrado. O endpoint do modelo text-embedding-005
e text-multilingual-embedding-002
é usado como exemplo.
Para o AlloyDB Omni, configure o AlloyDB Omni para consultar modelos da Vertex AI baseados na nuvem.
Conecte-se ao banco de dados usando
psql
.Chame a função de criação de modelo para adicionar o endpoint do modelo:
text-embedding-005
CALL google_ml.create_model( model_id => 'text-embedding-005', model_request_url => 'publishers/google/models/text-embedding-005', model_provider => 'google', model_qualified_name => 'text-embedding-005', model_type => 'text_embedding', model_auth_type => 'alloydb_service_agent_iam');
text-multilingual-embedding-002
CALL google_ml.create_model( model_id => 'text-multilingual-embedding-002', model_request_url => 'publishers/google/models/text-multilingual-embedding-002', model_provider => 'google', model_qualified_name => 'text-multilingual-embedding-002', model_type => 'text_embedding', model_auth_type => 'alloydb_service_agent_iam' model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform', model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform');
O URL de solicitação gerado pela função se refere ao projeto associado à conta de serviço do AlloyDB Omni. Se você quiser se referir a outro projeto, especifique o model_request_url
explicitamente.
Se o modelo estiver armazenado em outro projeto e região que não o cluster do AlloyDB, defina o URL da solicitação como projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID
, em que REGION_ID
é a região em que o modelo está hospedado e MODEL_ID
é o nome qualificado do modelo.
Além disso, conceda o papel de usuário da Vertex AI (roles/aiplatform.user
) à conta de serviço do projeto em que o AlloyDB Omni está instalado para que o modelo hospedado no outro projeto possa ser acessado.
Modelo de embedding de texto da OpenAI
A extensão google_ml_integration
configura automaticamente funções de transformação padrão e invoca chamadas aos
modelos remotos da OpenAI. Para conferir a lista de modelos da OpenAI com suporte integrado, consulte Modelos com suporte integrado.
O exemplo a seguir adiciona o endpoint do modelo text-embedding-ada-002
da OpenAI.
É possível registrar os endpoints de modelo text-embedding-3-small
e text-embedding-3-large
da OpenAI usando as mesmas etapas e definindo os nomes qualificados específicos dos modelos.
- Conecte-se ao banco de dados usando
psql
. - Crie e ative a extensão
google_ml_integration
. - Adicione a chave de API da OpenAI como um secret ao Secret Manager para autenticação.
Chame o secret armazenado no Secret Manager:
CALL google_ml.create_sm_secret( secret_id => 'SECRET_ID', secret_path => 'projects/PROJECT_ID/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
Substitua:
SECRET_ID
: o ID do secret que você definiu e que é usado posteriormente ao registrar um endpoint de modelo, por exemplo,key1
.SECRET_MANAGER_SECRET_ID
: o ID do secret definido no Secret Manager quando você criou o secret.PROJECT_ID
: o ID do seu projeto do Google Cloud .VERSION_NUMBER
: o número da versão do ID do secret.
Chame a função de criação de modelo para registrar o endpoint do modelo
text-embedding-ada-002
:CALL google_ml.create_model( model_id => 'MODEL_ID', model_provider => 'open_ai', model_type => 'text_embedding', model_qualified_name => 'text-embedding-ada-002', model_auth_type => 'secret_manager', model_auth_id => 'SECRET_ID');
Substitua:
MODEL_ID
: um ID exclusivo para o endpoint do modelo que você define. Esse ID é referenciado para metadados que o endpoint do modelo precisa gerar embeddings ou invocar previsões.SECRET_ID
: o ID do secret usado anteriormente no procedimentogoogle_ml.create_sm_secret()
.
Para gerar embeddings, saiba como gerar embeddings para endpoints de modelos com suporte integrado.
Modelo de embedding de texto hospedado de maneira personalizada
Esta seção mostra como registrar um endpoint de modelo hospedado de forma personalizada, além de criar funções de transformação e, opcionalmente, cabeçalhos HTTP personalizados. Todos os endpoints de modelos hospedados de forma personalizada são compatíveis, não importa onde estejam hospedados.
O exemplo a seguir adiciona o endpoint do modelo personalizado custom-embedding-model
hospedado pelo
Cymbal. As funções de transformação cymbal_text_input_transform
e cymbal_text_output_transform
são usadas para transformar o formato de entrada e saída do modelo no formato de entrada e saída da função de previsão.
Para registrar endpoints de modelos de incorporação de texto hospedados de forma personalizada, siga estas etapas:
Conecte-se ao banco de dados usando
psql
.Opcional: adicione a chave de API como um secret ao Secret Manager para autenticação.
Chame o secret armazenado no Secret Manager:
CALL google_ml.create_sm_secret( secret_id => 'SECRET_ID', secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
Substitua:
SECRET_ID
: o ID do secret que você definiu e que é usado posteriormente ao registrar um endpoint de modelo, por exemplo,key1
.SECRET_MANAGER_SECRET_ID
: o ID do secret definido no Secret Manager quando você criou o secret.PROJECT_ID
: o ID do seu projeto do Google Cloud .VERSION_NUMBER
: o número da versão do ID do secret.
Crie as funções de transformação de entrada e saída com base na seguinte assinatura da função de previsão para endpoints de modelo de embedding de texto. Para mais informações sobre como criar funções de transformação, consulte Exemplo de funções de transformação.
Confira a seguir exemplos de funções de transformação específicas para o endpoint do modelo de embedding de texto
custom-embedding-model
:-- Input Transform Function corresponding to the custom model endpoint CREATE OR REPLACE FUNCTION cymbal_text_input_transform(model_id VARCHAR(100), input_text TEXT) RETURNS JSON LANGUAGE plpgsql AS $$ DECLARE transformed_input JSON; model_qualified_name TEXT; BEGIN SELECT json_build_object('prompt', json_build_array(input_text))::JSON INTO transformed_input; RETURN transformed_input; END; $$; -- Output Transform Function corresponding to the custom model endpoint CREATE OR REPLACE FUNCTION cymbal_text_output_transform(model_id VARCHAR(100), response_json JSON) RETURNS REAL[] LANGUAGE plpgsql AS $$ DECLARE transformed_output REAL[]; BEGIN SELECT ARRAY(SELECT json_array_elements_text(response_json->0)) INTO transformed_output; RETURN transformed_output; END; $$;
Chame a função de criação de modelo para registrar o endpoint do modelo de embedding personalizado:
CALL google_ml.create_model( model_id => 'MODEL_ID', model_request_url => 'REQUEST_URL', model_provider => 'custom', model_type => 'text_embedding', model_auth_type => 'secret_manager', model_auth_id => 'SECRET_ID', model_qualified_name => 'MODEL_QUALIFIED_NAME', model_in_transform_fn => 'cymbal_text_input_transform', model_out_transform_fn => 'cymbal_text_output_transform');
Substitua:
MODEL_ID
: obrigatório. Um ID exclusivo para o endpoint do modelo que você define, por exemplo,custom-embedding-model
. Esse ID é referenciado para metadados que o endpoint do modelo precisa gerar embeddings ou invocar previsões.REQUEST_URL
: obrigatório. O endpoint específico do modelo ao adicionar embeddings de texto personalizados e endpoints de modelo genéricos, por exemplo,https://cymbal.com/models/text/embeddings/v1
.MODEL_QUALIFIED_NAME
: obrigatório se o endpoint do modelo usar um nome qualificado. O nome totalmente qualificado caso o endpoint do modelo tenha várias versões.SECRET_ID
: o ID do secret usado anteriormente no procedimentogoogle_ml.create_sm_secret()
.
Modelos genéricos
Esta seção mostra como registrar qualquer endpoint de modelo genérico disponível em um provedor de modelos hospedados, como Hugging Face, OpenAI, Vertex AI, Anthropic ou qualquer outro provedor. Esta seção mostra exemplos para registrar um endpoint de modelo genérico hospedado no Hugging Face, um modelo genérico gemini-pro
do Model Garden da Vertex AI e o endpoint do modelo claude-haiku
.
É possível registrar qualquer endpoint de modelo genérico, desde que a entrada e a saída estejam no formato JSON. Com base nos metadados do endpoint do modelo, talvez seja necessário gerar cabeçalhos HTTP ou definir URLs de solicitação.
Para mais informações sobre modelos genéricos pré-registrados e modelos com suporte integrado, consulte Modelos compatíveis.
Modelo do Gemini
Como alguns modelos gemini-pro
são pré-registrados, é possível chamar diretamente o ID do modelo para invocar previsões.
Verifique se você configurou o AlloyDB Omni para consultar modelos da Vertex AI baseados na nuvem.
O exemplo a seguir usa o endpoint do modelo gemini-1.5-pro:generateContent
do Model Garden da Vertex AI.
- Conecte-se ao banco de dados usando
psql
. - Crie e ative a extensão
google_ml_integration
. Invocar previsões usando o ID do modelo pré-registrado:
SELECT json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5-pro:generateContent', request_body => '{ "contents": [ { "role": "user", "parts": [ { "text": "For TPCH database schema as mentioned here https://www.tpc.org/TPC_Documents_Current_Versions/pdf/TPC-H_v3.0.1.pdf , generate a SQL query to find all supplier names which are located in the India nation." } ] } ] }'))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';
Modelo genérico no Hugging Face
O exemplo a seguir adiciona o endpoint do modelo de classificação
personalizado facebook/bart-large-mnli
hospedado no Hugging Face.
- Conecte-se ao banco de dados usando
psql
. - Crie e ative a extensão
google_ml_integration
. - Adicione a chave de API da OpenAI como um secret ao Secret Manager para autenticação. Se você já tiver criado um secret para qualquer outro modelo da OpenAI, poderá reutilizar o mesmo.
Chame o secret armazenado no Secret Manager:
CALL google_ml.create_sm_secret( secret_id => 'SECRET_ID', secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
Substitua:
SECRET_ID
: o ID secreto que você definiu e que é usado posteriormente ao registrar um endpoint de modelo.SECRET_MANAGER_SECRET_ID
: o ID do secret definido no Secret Manager quando você criou o secret.PROJECT_ID
: o ID do seu projeto do Google Cloud .VERSION_NUMBER
: o número da versão do ID do secret.
Chame a função de criação de modelo para registrar o endpoint do modelo
facebook/bart-large-mnli
:CALL google_ml.create_model( model_id => 'MODEL_ID', model_provider => 'hugging_face', model_request_url => 'REQUEST_URL', model_qualified_name => 'MODEL_QUALIFIED_NAME', model_auth_type => 'secret_manager', model_auth_id => 'SECRET_ID');
Substitua:
MODEL_ID
: um ID exclusivo para o endpoint do modelo que você define, por exemplo,custom-classification-model
. Esse ID é referenciado para metadados que o endpoint do modelo precisa gerar embeddings ou invocar previsões.REQUEST_URL
: o endpoint específico do modelo ao adicionar incorporação de texto personalizada e endpoints de modelo genéricos, por exemplo,https://api-inference.huggingface.co/models/facebook/bart-large-mnli
.MODEL_QUALIFIED_NAME
: o nome totalmente qualificado da versão do endpoint do modelo. Por exemplo,facebook/bart-large-mnli
.SECRET_ID
: o ID do secret usado anteriormente no procedimentogoogle_ml.create_sm_secret()
.
Modelo genérico da Anthropic
O exemplo a seguir adiciona o endpoint do modelo claude-3-opus-20240229
.
O gerenciamento de endpoints de modelo fornece a função de cabeçalho necessária para registrar modelos da Anthropic.
Verifique se você configurou o AlloyDB Omni para consultar modelos da Vertex AI baseados na nuvem.
- Conecte-se ao banco de dados usando
psql
. Crie e ative a extensão
google_ml_integration
.Secret Manager
- Adicione o token do portador como um secret ao Secret Manager para autenticação.
Chame o secret armazenado no Secret Manager:
CALL google_ml.create_sm_secret( secret_id => 'SECRET_ID', secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
Substitua:
SECRET_ID
: o ID secreto que você definiu e que é usado posteriormente ao registrar um endpoint de modelo.SECRET_MANAGER_SECRET_ID
: o ID do secret definido no Secret Manager quando você criou o secret.PROJECT_ID
: o ID do seu projeto do Google Cloud .VERSION_NUMBER
: o número da versão do ID do secret.
Chame a função de criação de modelo para registrar o endpoint do modelo
claude-3-opus-20240229
.CALL google_ml.create_model( model_id => 'MODEL_ID', model_provider => 'anthropic', model_request_url => 'REQUEST_URL', model_auth_type => 'secret_manager', model_auth_id => 'SECRET_ID', generate_headers_fn => 'google_ml.anthropic_claude_header_gen_fn');
Substitua:
MODEL_ID
: um ID exclusivo para o endpoint do modelo que você define, por exemplo,anthropic-opus
. Esse ID é referenciado para metadados que o endpoint do modelo precisa gerar embeddings ou invocar previsões.REQUEST_URL
: o endpoint específico do modelo ao adicionar incorporação de texto personalizada e endpoints de modelo genéricos, por exemplo,https://api.anthropic.com/v1/messages
.
Cabeçalho do Auth
Use a função padrão de geração de cabeçalho
google_ml.anthropic_claude_header_gen_fn
ou crie uma.CREATE OR REPLACE FUNCTION anthropic_sample_header_gen_fn(model_id VARCHAR(100), request_body JSON) RETURNS JSON LANGUAGE plpgsql AS $$ #variable_conflict use_variable BEGIN RETURN json_build_object('x-api-key', 'ANTHROPIC_API_KEY', 'anthropic-version', 'ANTHROPIC_VERSION')::JSON; END; $$;
Substitua:
ANTHROPIC_API_KEY
: a chave de API da Anthropic.ANTHROPIC_VERSION
(opcional): a versão específica do modelo que você quer usar. Por exemplo,2023-06-01
.
Chame a função de criação de modelo para registrar o endpoint do modelo
claude-3-opus-20240229
.CALL google_ml.create_model( model_id => 'MODEL_ID', model_provider => 'anthropic', model_request_url => 'REQUEST_URL', generate_headers_fn => 'google_ml.anthropic_claude_header_gen_fn');
Substitua:
MODEL_ID
: um ID exclusivo para o endpoint do modelo que você define, por exemplo,anthropic-opus
. Esse ID é referenciado para metadados que o endpoint do modelo precisa gerar embeddings ou invocar previsões.REQUEST_URL
: o endpoint específico do modelo ao adicionar incorporação de texto personalizada e endpoints de modelo genéricos, por exemplo,https://api.anthropic.com/v1/messages
.
Para mais informações, consulte como invocar previsões para endpoints de modelos genéricos.
A seguir
- Aprenda mais sobre a referência de gerenciamento de endpoints de modelo.
- Use modelos de exemplo para registrar endpoints de modelo.