Antes de registrar un extremo del modelo con la administración de extremos del modelo, debes habilitar la extensión google_ml_integration
y configurar la autenticación según el proveedor del modelo, si tu extremo del modelo requiere autenticación.
Asegúrate de acceder a tu base de datos con el nombre de usuario predeterminado postgres
.
Habilita la extensión
Debes agregar y habilitar la extensión google_ml_integration
antes de poder comenzar a usar las funciones asociadas. La administración de extremos de modelos requiere que se instale la extensión google_ml_integration
.
Verifica que la marca de base de datos
google_ml_integration.enable_model_support
esté configurada comoon
para una instancia. Para obtener más información sobre cómo configurar marcas de bases de datos, consulta Configura marcas de bases de datos.Opcional: Si la extensión
google_ml_integration
ya está instalada, modifícala para actualizarla a la versión más reciente:ALTER EXTENSION google_ml_integration UPDATE;
Agrega la extensión
google_ml_integration
con psql:CREATE EXTENSION IF NOT EXISTS google_ml_integration;
Opcional: Otorga permiso a un usuario de PostgreSQL que no sea administrador avanzado para administrar los metadatos del modelo:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA google_ml TO NON_SUPER_USER;
Reemplaza
NON_SUPER_USER
por el nombre de usuario de PostgreSQL que no es de superusuario.Habilita la administración de extremos del modelo en tu base de datos:
ALTER SYSTEM SET google_ml_integration.enable_model_support=on; SELECT pg_reload_conf();
Asegúrate de que la conectividad saliente esté habilitada.
Configura la autenticación
En las siguientes secciones, se muestra cómo configurar la autenticación antes de registrar un extremo del modelo.
Configura la autenticación para Vertex AI
Para usar los extremos del modelo de Google Vertex AI, debes agregar permisos de Vertex AI a la cuenta de servicio que usaste cuando instalaste AlloyDB Omni. Para obtener más información, consulta Configura tu instalación de AlloyDB Omni para consultar modelos basados en la nube.
Configura la autenticación con Secret Manager
Este paso es opcional si el extremo del modelo no controla la autenticación a través de Secret Manager, por ejemplo, si el extremo del modelo usa encabezados HTTP para pasar información de autenticación o no usa autenticación en absoluto.
Para crear y usar una clave de API o un token de portador, completa los siguientes pasos:
Crea el secreto en Secret Manager. Para obtener más información, consulta Crea un secreto y accede a su versión.
La ruta de acceso al secreto se usa en la función de SQL
google_ml.create_sm_secret()
.Otorga permisos al clúster de AlloyDB para acceder al secreto.
gcloud secrets add-iam-policy-binding 'SECRET_NAME' \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role="roles/secretmanager.secretAccessor"
Reemplaza lo siguiente:
SECRET_NAME
: Es el nombre del secreto en Secret Manager.SERVICE_ACCOUNT_ID
: Es el ID de la cuenta de servicio que creaste en el paso anterior. Asegúrate de que sea la misma cuenta que usaste durante la instalación de AlloyDB Omni. Esto incluye el sufijoPROJECT_ID.iam.gserviceaccount.com
completo. Por ejemplo:my-service@my-project.iam.gserviceaccount.com
También puedes otorgar este rol a la cuenta de servicio a nivel del proyecto. Para obtener más información, consulta Cómo agregar una vinculación de política de Identity and Access Management.
Configura la autenticación con encabezados
En el siguiente ejemplo, se muestra cómo configurar la autenticación con una función que devuelve un objeto JSON que contiene los encabezados necesarios para realizar una solicitud al modelo de incorporación.
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;
$$;
Reemplaza lo siguiente:
HEADER_GEN_FUNCTION
: Es el nombre de la función de generación de encabezados que puedes usar cuando registras un modelo.API_KEY
: Es la clave de API del proveedor del modelo.
Modelos de incorporación de texto
En esta sección, se muestra cómo registrar extremos de modelos con la administración de extremos de modelos.
La administración de extremos de modelos admite algunos modelos de Vertex AI genéricos y de incorporación de texto como extremos de modelos previamente registrados. Puedes usar directamente el ID del modelo para generar incorporaciones o invocar predicciones, según el tipo de modelo. Para obtener más información sobre los modelos pre registrados admitidos, consulta Modelos pre registrados de Vertex AI.
Por ejemplo, para llamar al modelo textembedding-gecko
previamente registrado, puedes llamarlo directamente con la función de incorporación:
SELECT google_ml.embedding( model_id => 'textembedding-gecko', content => 'AlloyDB is a managed, cloud-hosted SQL database service');
Del mismo modo, para llamar al modelo gemini-1.5-pro:generateContent
registrado previamente, puedes llamarlo directamente con la función de predicción:
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 generar embeddings, consulta cómo generar embeddings para extremos de modelos previamente registrados. Para invocar predicciones, consulta cómo invocar predicciones para extremos de modelos previamente registrados.
Modelos de incorporación de texto con compatibilidad integrada
La administración de extremos de modelos proporciona compatibilidad integrada para algunos modelos de Vertex AI y OpenAI. Para obtener la lista de modelos con compatibilidad integrada, consulta Modelos con compatibilidad integrada.
En el caso de los modelos con compatibilidad integrada, puedes establecer el nombre calificado como el nombre calificado del modelo y especificar la URL de la solicitud. La administración de extremos del modelo identifica automáticamente el modelo y configura funciones de transformación predeterminadas.
Modelos de embeddings de Vertex AI
En los siguientes pasos, se muestra cómo registrar modelos de Vertex AI con asistencia integrada. El extremo del modelo text-embedding-005
y text-multilingual-embedding-002
se usa como ejemplo.
En el caso de AlloyDB Omni, asegúrate de configurar AlloyDB Omni para consultar modelos de Vertex AI basados en la nube.
Conéctate a tu base de datos con
psql
.Llama a la función de creación del modelo para agregar el extremo del 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');
La URL de la solicitud que genera la función hace referencia al proyecto asociado con la cuenta de servicio de AlloyDB Omni. Si deseas hacer referencia a otro proyecto, asegúrate de especificar model_request_url
de forma explícita.
Si el modelo se almacena en otro proyecto y región que tu clúster de AlloyDB, establece la URL de la solicitud en projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID
, donde REGION_ID
es la región en la que se aloja tu modelo y MODEL_ID
es el nombre calificado del modelo.
Además, otorga el rol de usuario de Vertex AI (roles/aiplatform.user
) a la cuenta de servicio del proyecto en el que está instalado AlloyDB Omni para que se pueda acceder al modelo alojado en el otro proyecto.
Modelo de incorporación de texto de IA abierta
La extensión google_ml_integration
configura automáticamente las funciones de transformación predeterminadas y llama a los modelos remotos de OpenAI. Para ver la lista de modelos de OpenAI con compatibilidad integrada, consulta Modelos con compatibilidad integrada.
En el siguiente ejemplo, se agrega el extremo del modelo text-embedding-ada-002
de OpenAI.
Puedes registrar los extremos de los modelos text-embedding-3-small
y text-embedding-3-large
de OpenAI con los mismos pasos y configurar los nombres calificados de los modelos específicos para los modelos.
- Conéctate a tu base de datos con
psql
. - Crea y habilita la extensión
google_ml_integration
. - Agrega la clave de la API de OpenAI como secreto a Secret Manager para la autenticación.
Llama al secreto almacenado en 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');
Reemplaza lo siguiente:
SECRET_ID
: Es el ID del secreto que estableciste y que se usa posteriormente cuando se registra un extremo del modelo, por ejemplo,key1
.SECRET_MANAGER_SECRET_ID
: Es el ID del secreto que se configuró en Secret Manager cuando creaste el secreto.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .VERSION_NUMBER
: Es el número de versión del ID del secreto.
Llama a la función de creación de modelos para registrar el extremo del 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');
Reemplaza lo siguiente:
MODEL_ID
: Es un ID único para el extremo del modelo que defines. Se hace referencia a este ID de modelo para los metadatos que el extremo del modelo necesita para generar incorporaciones o invocar predicciones.SECRET_ID
: Es el ID del secreto que usaste antes en el procedimientogoogle_ml.create_sm_secret()
.
Para generar embeddings, consulta cómo generar embeddings para extremos de modelos con compatibilidad integrada.
Modelo de incorporación de texto alojado de forma personalizada
En esta sección, se muestra cómo registrar un extremo de modelo alojado de forma personalizada y cómo crear funciones de transformación y, de manera opcional, encabezados HTTP personalizados. Se admiten todos los extremos de modelos alojados de forma personalizada, independientemente de dónde estén alojados.
En el siguiente ejemplo, se agrega el extremo del modelo personalizado custom-embedding-model
alojado por Cymbal. Las funciones de transformación cymbal_text_input_transform
y cymbal_text_output_transform
se usan para transformar el formato de entrada y salida del modelo al formato de entrada y salida de la función de predicción.
Para registrar extremos de modelos de embeddings de texto alojados de forma personalizada, completa los siguientes pasos:
Conéctate a tu base de datos con
psql
.Opcional: Agrega la clave de API como un secreto a Secret Manager para la autenticación.
Llama al secreto almacenado en 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');
Reemplaza lo siguiente:
SECRET_ID
: Es el ID del secreto que estableciste y que se usa posteriormente cuando se registra un extremo del modelo, por ejemplo,key1
.SECRET_MANAGER_SECRET_ID
: Es el ID del secreto que se configuró en Secret Manager cuando creaste el secreto.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .VERSION_NUMBER
: Es el número de versión del ID del secreto.
Crea las funciones de transformación de entrada y salida según la siguiente firma para la función de predicción de los extremos del modelo de incorporación de texto. Para obtener más información sobre cómo crear funciones de transformación, consulta el ejemplo de funciones de transformación.
A continuación, se incluyen ejemplos de funciones de transformación específicas del extremo del modelo de incorporación 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; $$;
Llama a la función de creación de modelos para registrar el extremo del modelo de incorporación 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');
Reemplaza lo siguiente:
MODEL_ID
: Obligatorio. Es un ID único para el extremo del modelo que defines, por ejemplo,custom-embedding-model
. Se hace referencia a este ID de modelo para los metadatos que el extremo del modelo necesita para generar incorporaciones o invocar predicciones.REQUEST_URL
: Obligatorio. Es el extremo específico del modelo cuando se agregan extremos de modelos genéricos y de incorporación de texto personalizados, por ejemplo,https://cymbal.com/models/text/embeddings/v1
.MODEL_QUALIFIED_NAME
: Se requiere si el extremo del modelo usa un nombre calificado. Es el nombre completamente calificado en caso de que el extremo del modelo tenga varias versiones.SECRET_ID
: Es el ID del secreto que usaste antes en el procedimientogoogle_ml.create_sm_secret()
.
Modelos genéricos
En esta sección, se muestra cómo registrar cualquier extremo de modelo genérico que esté disponible en un proveedor de modelos alojados, como Hugging Face, OpenAI, Vertex AI, Anthropic o cualquier otro proveedor. En esta sección, se muestran ejemplos para registrar un extremo de modelo genérico alojado en Hugging Face, un modelo genérico gemini-pro
de Vertex AI Model Garden y el extremo del modelo claude-haiku
.
Puedes registrar cualquier extremo de modelo genérico, siempre y cuando la entrada y la salida estén en formato JSON. Según los metadatos del extremo del modelo, es posible que debas generar encabezados HTTP o definir URLs de solicitud.
Para obtener más información sobre los modelos genéricos preregistrados y los modelos con compatibilidad integrada, consulta Modelos compatibles.
Modelo de Gemini
Dado que algunos modelos de gemini-pro
están registrados previamente, puedes llamar directamente al ID del modelo para invocar predicciones.
Asegúrate de configurar AlloyDB Omni para consultar modelos de Vertex AI basados en la nube.
En el siguiente ejemplo, se usa el extremo del modelo gemini-1.5-pro:generateContent
de Vertex AI Model Garden.
- Conéctate a tu base de datos con
psql
. - Crea y habilita la extensión
google_ml_integration
. Invoca predicciones con el ID del modelo registrado previamente:
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 en Hugging Face
En el siguiente ejemplo, se agrega el extremo del modelo de clasificación personalizado facebook/bart-large-mnli
alojado en Hugging Face.
- Conéctate a tu base de datos con
psql
. - Crea y habilita la extensión
google_ml_integration
. - Agrega la clave de la API de OpenAI como secreto a Secret Manager para la autenticación. Si ya creaste un secreto para cualquier otro modelo de OpenAI, puedes reutilizar el mismo.
Llama al secreto almacenado en 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');
Reemplaza lo siguiente:
SECRET_ID
: Es el ID secreto que estableces y que se usa posteriormente cuando registras un extremo del modelo.SECRET_MANAGER_SECRET_ID
: Es el ID del secreto que se configuró en Secret Manager cuando creaste el secreto.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .VERSION_NUMBER
: Es el número de versión del ID del secreto.
Llama a la función de creación de modelos para registrar el extremo del 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');
Reemplaza lo siguiente:
MODEL_ID
: Es un ID único para el extremo del modelo que defines, por ejemplo,custom-classification-model
. Se hace referencia a este ID de modelo para los metadatos que el extremo del modelo necesita para generar incorporaciones o invocar predicciones.REQUEST_URL
: Es el extremo específico del modelo cuando se agregan extremos de modelos genéricos y de incorporación de texto personalizados, por ejemplo,https://api-inference.huggingface.co/models/facebook/bart-large-mnli
.MODEL_QUALIFIED_NAME
: Es el nombre completamente calificado de la versión del extremo del modelo, por ejemplo,facebook/bart-large-mnli
.SECRET_ID
: Es el ID del secreto que usaste antes en el procedimientogoogle_ml.create_sm_secret()
.
Modelo genérico de Anthropic
En el siguiente ejemplo, se agrega el extremo del modelo claude-3-opus-20240229
.
La administración de extremos de modelos proporciona la función de encabezado necesaria para registrar modelos de Anthropic.
Asegúrate de configurar AlloyDB Omni para consultar modelos de Vertex AI basados en la nube.
- Conéctate a tu base de datos con
psql
. Crea y habilita la extensión
google_ml_integration
.Secret Manager
- Agrega el token de portador como un secreto a Secret Manager para la autenticación.
Llama al secreto almacenado en 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');
Reemplaza lo siguiente:
SECRET_ID
: Es el ID secreto que estableces y que se usa posteriormente cuando registras un extremo del modelo.SECRET_MANAGER_SECRET_ID
: Es el ID del secreto que se configuró en Secret Manager cuando creaste el secreto.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .VERSION_NUMBER
: Es el número de versión del ID del secreto.
Llama a la función de creación del modelo para registrar el extremo del 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');
Reemplaza lo siguiente:
MODEL_ID
: Es un ID único para el extremo del modelo que defines, por ejemplo,anthropic-opus
. Se hace referencia a este ID de modelo para los metadatos que el extremo del modelo necesita para generar incorporaciones o invocar predicciones.REQUEST_URL
: Es el extremo específico del modelo cuando se agregan extremos de modelos genéricos y de incorporación de texto personalizados, por ejemplo,https://api.anthropic.com/v1/messages
.
Encabezado de la autenticación
Usa la función predeterminada de generación de encabezados
google_ml.anthropic_claude_header_gen_fn
o crea una función de generación de encabezados.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; $$;
Reemplaza lo siguiente:
ANTHROPIC_API_KEY
: Es la clave de API de Anthropic.ANTHROPIC_VERSION
(opcional): Es la versión específica del modelo que deseas usar, por ejemplo,2023-06-01
.
Llama a la función de creación del modelo para registrar el extremo del 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');
Reemplaza lo siguiente:
MODEL_ID
: Es un ID único para el extremo del modelo que defines, por ejemplo,anthropic-opus
. Se hace referencia a este ID de modelo para los metadatos que el extremo del modelo necesita para generar incorporaciones o invocar predicciones.REQUEST_URL
: Es el extremo específico del modelo cuando se agregan extremos de modelos genéricos y de incorporación de texto personalizados, por ejemplo,https://api.anthropic.com/v1/messages
.
Para obtener más información, consulta cómo invocar predicciones para extremos de modelos genéricos.
¿Qué sigue?
- Obtén más información sobre la referencia de administración de extremos de modelos.
- Utiliza plantillas de ejemplo para registrar extremos de modelos.