Registrar e chamar modelos de IA remotos usando o gerenciamento de endpoints de modelo

Nesta página, descrevemos como invocar previsões ou gerar incorporações usando um modelo, registrando o endpoint do modelo com o gerenciamento de endpoints de modelo.

Antes de começar

Configurar a extensão

  1. Conecte-se ao banco de dados usando psql ou o AlloyDB para PostgreSQL Studio usando o usuário postgres.

  2. Opcional: Solicite acesso para interagir com os recursos do mecanismo de consulta de IA do AlloyDB para PostgreSQL (prévia), incluindo suporte para modelos multimodais, modelos de classificação e funções de operador.

  3. 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 a seguinte variável:

    • NON_SUPER_USER: o nome de usuário do PostgreSQL que não é superusuário.
  4. Verifique se o IP de saída está ativado para acessar modelos hospedados fora da sua VPC, como modelos de terceiros. Para mais informações, consulte Adicionar conectividade de saída.

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 do AlloyDB baseada no IAM que você usa para se conectar ao banco de dados. Para mais informações sobre a integração com a Vertex AI, consulte Integrar com a Vertex AI.

Configurar a autenticação usando o Secret Manager

Nesta seção, explicamos como configurar a autenticação se você estiver usando o Secret Manager para armazenar detalhes de autenticação de provedores terceirizados.

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 autenticação, siga estas etapas:

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

  2. 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 baseada no IAM no formato serviceAccount:service-PROJECT_ID@gcp-sa-alloydb.iam.gserviceaccount.com. Por exemplo, service-212340152456@gcp-sa-alloydb.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. A função retorna um objeto JSON que contém os cabeçalhos necessários para fazer uma solicitação ao 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;
  $$;

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 incorporação 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 embeddings 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.

O modelo gemini-embedding-001 está disponível apenas na região us-central1.

Por exemplo, para chamar o modelo gemini-embedding-001 pré-registrado, use diretamente a função de incorporação:

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

Se o cluster do AlloyDB e o endpoint da Vertex AI estiverem em projetos diferentes, defina model_id como o caminho qualificado do endpoint, por exemplo, projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001.

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 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 gerar embeddings, saiba como gerar embeddings de texto. Para invocar previsões, saiba como invocar previsões.

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 gemini-embedding-001 e text-multilingual-embedding-002 é usado como exemplo.

Verifique se o cluster do AlloyDB e o modelo da Vertex AI que você está consultando estão na mesma região.

  1. Conecte-se ao seu banco de dados usando psql.

  2. Configure a extensão google_ml_integration.

  3. Chame a função de criação de modelo para adicionar o endpoint do 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');
    

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 AlloyDB do projeto em que a instância do AlloyDB reside para que o AlloyDB possa acessar o modelo hospedado no outro projeto.

Modelo de embedding de texto da Open AI

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 para os modelos.

  1. Conecte-se ao banco de dados usando psql.
  2. Configure a extensão google_ml_integration.
  3. Adicione a chave de API da OpenAI como um secret ao Secret Manager para autenticação.
  4. 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 Google Cloud projeto.
    • VERSION_NUMBER: o número da versão do ID do secret.
  5. 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 procedimento google_ml.create_sm_secret().

Para gerar embeddings, consulte gerar embeddings de texto.

Modelo de embedding de texto hospedado de forma 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:

  1. Conecte-se ao seu banco de dados usando psql.

  2. Configure a extensão google_ml_integration.

  3. Opcional: adicione a chave de API como um secret ao Secret Manager para autenticação.

  4. 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 Google Cloud projeto.
    • VERSION_NUMBER: o número da versão do ID do secret.
  5. Crie as funções de transformação de entrada e saída com base na seguinte assinatura para a função de previsão dos endpoints do 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;
    $$;
    
  6. 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. Verifique se o endpoint do modelo pode ser acessado por um endereço IP interno. O gerenciamento de endpoints de modelo não é compatível com endereços IP públicos.
    • 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 procedimento google_ml.create_sm_secret().

Modelo multimodal com suporte integrado

Integrar com a Vertex AI e instalar a extensão

  1. Integrar com a Vertex AI.
  2. Verifique se a versão mais recente do google_ml_integration está instalada.
    1. Para verificar a versão instalada, execute o seguinte comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. Se a extensão não estiver instalada ou se a versão instalada for anterior à 1.4.3, atualize a extensão executando os seguintes comandos:

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

      Se você tiver problemas ao executar os comandos anteriores ou se a extensão não for atualizada para a versão 1.4.3 depois de executar os comandos anteriores, entre em contato com o suporte do AlloyDB.

    3. Depois de verificar se a versão está atualizada, instale a funcionalidade de prévia executando o procedimento 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)
            

Chamar o modelo para gerar embeddings multimodais

Como o gerenciamento de endpoints de modelo oferece suporte integrado ao modelo multimodalembedding@001 da Vertex AI, é possível chamar o modelo diretamente para gerar embeddings multimodais.

O exemplo a seguir usa o nome qualificado do modelo multimodalembedding@001 como ID para gerar embeddings de imagens multimodais:

  1. Conecte-se ao banco de dados usando psql.
  2. Configure a extensão google_ml_integration.
  3. Gerar embeddings de imagens multimodais:

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

Substitua:

  • IMAGE_PATH_OR_TEXT com o caminho do Cloud Storage para a imagem, por exemplo, gs://cymbal_user_data/image-85097193-cd9788aacebb.jpeg para traduzir em uma incorporação de vetor ou string base64 da imagem.
  • MIMETYPE com o tipo MIME da imagem.

Modelos de classificação

Modelos de classificação da Vertex AI

É possível usar os modelos da Vertex AI mencionados em Modelos compatíveis sem registro.

Para saber como classificar os resultados da pesquisa usando um modelo de classificação da Vertex AI, consulte Classificar resultados da pesquisa.

Registrar um modelo de classificação de terceiros

O exemplo a seguir mostra como registrar um modelo de reclassificação da 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

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 gemini-pro genérico 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.

Modelos genéricos do Gemini

Esta seção mostra como registrar modelos genéricos do Gemini.

Modelo gemini-1.5-pro

Como alguns modelos gemini-pro são pré-registrados, é possível chamar diretamente o ID do modelo para invocar previsões.

O exemplo a seguir usa o endpoint do modelo gemini-1.5-pro:generateContent do Model Garden da Vertex AI.

  1. Conecte-se ao banco de dados usando psql.
  2. Configure a extensão google_ml_integration.
  3. Invoque 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.

  1. Conecte-se ao banco de dados usando psql.
  2. Configure a extensão google_ml_integration.
  3. Adicione a chave de API da OpenAI como um secret ao Secret Manager para autenticação. Se você já tiver criado um secret para outro modelo da OpenAI, poderá reutilizar o mesmo.
  4. 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 Google Cloud projeto.
    • VERSION_NUMBER: o número da versão do ID do secret.
  5. 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 procedimento google_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.

  1. Conecte-se ao banco de dados usando psql.
  2. Crie e ative a extensão google_ml_integration.

    Secret Manager

    1. Adicione o token do portador como um secret ao Secret Manager para autenticação.
    2. 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 Google Cloud projeto.
      • VERSION_NUMBER: o número da versão do ID do secret.
    3. 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

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