Registra y llama a modelos de IA remotos con la administración de extremos de modelos

En esta página, se describe cómo invocar predicciones o generar incorporaciones con un modelo registrando el extremo del modelo en la administración de extremos del modelo.

Antes de comenzar

Configura la extensión

  1. Conéctate a tu base de datos con psql o AlloyDB para PostgreSQL Studio con el usuario postgres.

  2. Opcional: Solicita acceso para interactuar con las funciones del motor de consultas de IA de AlloyDB para PostgreSQL (vista previa), incluido el soporte para modelos multimodales, modelos de clasificación y funciones de operadores.

  3. 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 la siguiente variable:

    • NON_SUPER_USER: Es el nombre de usuario de PostgreSQL que no es de superusuario.
  4. Asegúrate de que la IP saliente esté habilitada para acceder a los modelos alojados fuera de tu VPC, como los modelos de terceros. Para obtener más información, consulta Cómo agregar conectividad saliente.

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 de AlloyDB basada en IAM que usas para conectarte a la base de datos. Para obtener más información sobre la integración con Vertex AI, consulta Integración con Vertex AI.

Configura la autenticación con Secret Manager

En esta sección, se explica cómo configurar la autenticación si usas Secret Manager para almacenar los detalles de autenticación de proveedores externos.

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:

  1. 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().

  2. 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 basada en IAM en formato serviceAccount:service-PROJECT_ID@gcp-sa-alloydb.iam.gserviceaccount.com, por ejemplo, service-212340152456@gcp-sa-alloydb.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. La función devuelve un objeto JSON que contiene los encabezados necesarios para realizar una solicitud al modelo de embedding.

  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.

El modelo gemini-embedding-001 solo está disponible en la región us-central1.

Por ejemplo, para llamar al modelo gemini-embedding-001 registrado previamente, puedes llamarlo directamente con la función de incorporación:

SELECT
      embedding(
        model_id => 'gemini-embedding-001',
        content => 'AlloyDB is a managed, cloud-hosted SQL database service');

Si tu clúster de AlloyDB y el extremo de Vertex AI se encuentran en proyectos diferentes, configura model_id en la ruta calificada del extremo, por ejemplo, projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001.

Del mismo modo, para llamar al modelo gemini-1.5-pro:generateContent registrado previamente, puedes llamar al modelo directamente con la función de predicción:

 SELECT 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. Only provide SQL query with no explanation."
                    }
                ]
            }
        ]
        }')-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';

Para generar embeddings, consulta cómo generar embeddings de texto. Para invocar predicciones, consulta cómo invocar predicciones.

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 gemini-embedding-001 y text-multilingual-embedding-002 se usa como ejemplo.

Asegúrate de que tanto el clúster de AlloyDB como el modelo de Vertex AI que consultas estén en la misma región.

  1. Conéctate a tu base de datos con psql.

  2. Configura la extensión de google_ml_integration.

  3. Llama a la función de creación del modelo para agregar el extremo del modelo:

    gemini-embedding-001

      CALL
        google_ml.create_model(
          model_id => 'gemini-embedding-001',
          model_request_url => 'publishers/google/models/gemini-embedding-001',
          model_provider => 'google',
          model_qualified_name => 'gemini-embedding-001',
          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');
    

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 de AlloyDB del proyecto en el que reside la instancia de AlloyDB para que AlloyDB 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.

  1. Conéctate a tu base de datos con psql.
  2. Configura la extensión de google_ml_integration.
  3. Agrega la clave de la API de OpenAI como secreto a Secret Manager para la autenticación.
  4. 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.
  5. 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 procedimiento google_ml.create_sm_secret().

Para generar embeddings, consulta Cómo generar embeddings de texto.

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:

  1. Conéctate a tu base de datos con psql.

  2. Configura la extensión de google_ml_integration.

  3. Opcional: Agrega la clave de API como un secreto a Secret Manager para la autenticación.

  4. 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.
  5. 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 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;
    $$;
    
  6. 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. Asegúrate de que se pueda acceder al extremo del modelo a través de una dirección IP interna. La administración de extremos de modelos no admite direcciones IP públicas.
    • 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 procedimiento google_ml.create_sm_secret().

Modelo multimodal con compatibilidad integrada

Integra la extensión en Vertex AI y, luego, instálala

  1. Integración en Vertex AI
  2. Asegúrate de que esté instalada la versión más reciente de google_ml_integration.
    1. Para verificar la versión instalada, ejecuta el siguiente comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. Si la extensión no está instalada o si la versión instalada es anterior a la 1.4.3, ejecuta los siguientes comandos para actualizarla:

              CREATE EXTENSION IF NOT EXISTS google_ml_integration;
              ALTER EXTENSION google_ml_integration UPDATE;
            

      Si tienes problemas cuando ejecutas los comandos anteriores o si la extensión no se actualiza a la versión 1.4.3 después de ejecutar los comandos anteriores, comunícate con el equipo de asistencia de AlloyDB.

    3. Después de asegurarte de que la versión esté actualizada, instala la funcionalidad de vista previa ejecutando el procedimiento upgrade_to_preview_version:

              CALL google_ml.upgrade_to_preview_version();
              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.4
              (1 row)
            

Llama al modelo para generar embeddings multimodales

Dado que la administración de extremos de modelos proporciona compatibilidad integrada con el modelo multimodalembedding@001 de Vertex AI, puedes llamar directamente al modelo para generar incorporaciones multimodales.

En el siguiente ejemplo, se usa el nombre calificado del modelo multimodalembedding@001 como ID del modelo para generar incorporaciones de imágenes multimodales:

  1. Conéctate a tu base de datos con psql.
  2. Configura la extensión de google_ml_integration.
  3. Genera incorporaciones de imágenes multimodales:

    SELECT
      ai.image_embedding(
        model_id => 'multimodalembedding@001',
        image => 'IMAGE_PATH_OR_TEXT',
        mimetype => 'MIMETYPE');
    

Reemplaza lo siguiente:

  • IMAGE_PATH_OR_TEXT con la ruta de acceso de Cloud Storage a la imagen, por ejemplo, gs://cymbal_user_data/image-85097193-cd9788aacebb.jpeg para traducir a una incorporación de vector o una cadena base64 de la imagen.
  • MIMETYPE con el tipo de MIME de la imagen.

Modelos de clasificación

Modelos de clasificación de Vertex AI

Puedes usar los modelos de Vertex AI que se mencionan en Modelos compatibles sin necesidad de registrarlos.

Para obtener información sobre cómo clasificar tus resultados de la búsqueda con un modelo de clasificación de Vertex AI, consulta Clasifica los resultados de la búsqueda.

Cómo registrar un modelo de clasificación de terceros

En el siguiente ejemplo, se muestra cómo registrar un modelo de nuevo ranking de Cohere.

CREATE OR REPLACE FUNCTION cohere_rerank_input_transform(
    model_id VARCHAR(100),
    search_string TEXT,
    documents TEXT[],
    top_n INT DEFAULT NULL
)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
  transformed_input JSONB;
BEGIN
  -- Basic Input Validation
  IF search_string IS NULL OR search_string = '' THEN
    RAISE EXCEPTION 'Invalid input: search_string cannot be NULL or empty.';
  END IF;

  IF documents IS NULL OR array_length(documents, 1) IS NULL OR array_length(documents, 1) = 0 THEN
    RAISE EXCEPTION 'Invalid input: documents array cannot be NULL or empty.';
  END IF;

  IF top_n IS NOT NULL AND top_n < 0 THEN
    RAISE EXCEPTION 'Invalid input: top_n must be greater than or equal to zero. Provided value: %', top_n;
  END IF;

  -- Construct the base JSON payload for Cohere Rerank API
  transformed_input := jsonb_build_object(
    'model', google_ml.model_qualified_name_of(model_id),
    'query', search_string,
    'documents', to_jsonb(documents), -- Convert TEXT[] directly to JSON array
    'return_documents', false -- Explicitly set to false (optional, as its default)
  );

  -- Add top_n to the payload only if it's provided and valid
  IF top_n IS NOT NULL THEN
     transformed_input := transformed_input || jsonb_build_object('top_n', top_n);
  END IF;

  -- Return the final JSON payload
  RETURN transformed_input::JSON;

END;
$$;

CREATE OR REPLACE FUNCTION cohere_rerank_output_transform(
    model_id VARCHAR(100),
    response_json JSON
)
RETURNS TABLE (index INT, score REAL)
LANGUAGE plpgsql
AS $$
DECLARE
  result_item JSONB;
  response_jsonb JSONB;
  cohere_index INT; -- 0-based index from Cohere response
BEGIN
  -- Validate response_json
  IF response_json IS NULL THEN
    RAISE EXCEPTION 'Invalid model response: response cannot be NULL.';
  END IF;

  -- Convert JSON to JSONB for easier processing
  response_jsonb := response_json::JSONB;

  -- Check top-level structure
  IF jsonb_typeof(response_jsonb) != 'object' THEN
    RAISE EXCEPTION 'Invalid model response: response must be a JSON object. Found: %', jsonb_typeof(response_jsonb);
  END IF;

  -- Check for the 'results' array
  IF response_jsonb->'results' IS NULL OR jsonb_typeof(response_jsonb->'results') != 'array' THEN
    -- Check for potential Cohere error structure
    IF response_jsonb->'message' IS NOT NULL THEN
       RAISE EXCEPTION 'Cohere API Error: %', response_jsonb->>'message';
    ELSE
       RAISE EXCEPTION 'Invalid model response: response does not contain a valid "results" array.';
    END IF;
  END IF;

  -- Loop through the 'results' array (JSONB array indices are 0-based)
  FOR i IN 0..jsonb_array_length(response_jsonb->'results') - 1 LOOP
    result_item := response_jsonb->'results'->i;

    -- Validate individual result item structure
    IF result_item IS NULL OR jsonb_typeof(result_item) != 'object' THEN
      RAISE WARNING 'Skipping invalid result item at array index %.', i;
      CONTINUE;
    END IF;

    IF result_item->'index' IS NULL OR jsonb_typeof(result_item->'index') != 'number' THEN
       RAISE WARNING 'Missing or invalid "index" field in result item at array index %.', i;
       CONTINUE;
    END IF;

    IF result_item->'relevance_score' IS NULL OR jsonb_typeof(result_item->'relevance_score') != 'number' THEN
       RAISE WARNING 'Missing or invalid "relevance_score" field in result item at array index %.', i;
       CONTINUE;
    END IF;

    -- Extract values
    BEGIN
      cohere_index := (result_item->>'index')::INT;
      -- Assign values to the output table columns
      -- Cohere returns 0-based index, map it to 1-based for consistency
      -- with input document array position
      index := cohere_index + 1;
      score := (result_item->>'relevance_score')::REAL;
      RETURN NEXT; -- Return the current row
    EXCEPTION WHEN others THEN
      RAISE WARNING 'Error processing result item at array index %: %', i, SQLERRM;
      CONTINUE; -- Skip this item and continue with the next
    END;
  END LOOP;

  RETURN; -- End of function
END;
$$;

CALL
  google_ml.create_sm_secret(
    '<SECRET_ID>',
    'projects/<PROJECT_NUMBER>/secrets/<SECRET_ID>/versions/latest');

CALL
  google_ml.create_model(
    model_id => 'cohere-reranker',
    model_type => 'reranking',
    model_provider => 'custom',
    model_request_url => 'https://api.cohere.com/v2/rerank',
    model_qualified_name => 'rerank-v3.5',
    model_auth_type => 'secret_manager',
    model_auth_id => '<SECRET_ID>',
    model_in_transform_fn => 'cohere_rerank_input_transform',
    model_out_transform_fn => 'cohere_rerank_output_transform'
  );

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.

Modelos de Gemini genéricos

En esta sección, se muestra cómo registrar modelos genéricos de Gemini.

Modelo gemini-1.5-pro

Dado que algunos modelos de gemini-pro están registrados previamente, puedes llamar directamente al ID del modelo para invocar predicciones.

En el siguiente ejemplo, se usa el extremo del modelo gemini-1.5-pro:generateContent de Vertex AI Model Garden.

  1. Conéctate a tu base de datos con psql.
  2. Configura la extensión de google_ml_integration.
  3. 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.

  1. Conéctate a tu base de datos con psql.
  2. Configura la extensión de google_ml_integration.
  3. 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.
  4. 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.
  5. 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 procedimiento google_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.

  1. Conéctate a tu base de datos con psql.
  2. Crea y habilita la extensión google_ml_integration.

    Secret Manager

    1. Agrega el token de portador como un secreto a Secret Manager para la autenticación.
    2. 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.
    3. 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

    1. 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.
    2. 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?