Registra e chiama modelli di AI remoti in AlloyDB Omni

Per richiamare le previsioni o generare embedding utilizzando un modello, registra l'endpoint del modello con la gestione degli endpoint del modello.

Per ulteriori informazioni sulla funzione google_ml.create_model(), consulta la documentazione di riferimento per la gestione degli endpoint dei modelli.

Prima di registrare un endpoint modello con la gestione degli endpoint modello, devi attivare l'estensione google_ml_integration e configurare l'autenticazione in base al provider del modello, se l'endpoint modello richiede l'autenticazione.

Assicurati di accedere al database con il nome utente predefinito postgres.

Attivare l'estensione

Devi aggiungere e attivare l'estensione google_ml_integration prima di poter iniziare a utilizzare le funzioni associate. La gestione degli endpoint dei modelli richiede l'installazione dell'estensione google_ml_integration.

  1. Connettiti al database utilizzando psql.

  2. (Facoltativo) Se l'estensione google_ml_integration è già installata, modificala per aggiornarla all'ultima versione:

        ALTER EXTENSION google_ml_integration UPDATE;
    
  3. Aggiungi l'estensione google_ml_integration utilizzando psql:

      CREATE EXTENSION google_ml_integration;
    
  4. (Facoltativo) Concedi l'autorizzazione a un utente PostgreSQL non super di gestire i metadati del modello:

      GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA google_ml TO NON_SUPER_USER;
    

    Sostituisci NON_SUPER_USER con il nome utente PostgreSQL non super.

  5. Abilita la gestione degli endpoint del modello nel tuo database:

      ALTER SYSTEM SET google_ml_integration.enable_model_support=on;
      SELECT pg_reload_conf();
    

Configura l'autenticazione

Le sezioni seguenti mostrano come configurare l'autenticazione prima di aggiungere un endpoint del modello Vertex AI o endpoint del modello di altri provider.

Configurare l'autenticazione per Vertex AI

Per utilizzare gli endpoint del modello Google Vertex AI, devi aggiungere le autorizzazioni Vertex AI all'account di servizio utilizzato durante l'installazione di AlloyDB Omni. Per saperne di più, consulta Configurare l'installazione di AlloyDB Omni per eseguire query sui modelli basati su cloud.

Configurare l'autenticazione per altri provider di modelli

Per tutti i modelli, ad eccezione di quelli Vertex AI, puoi archiviare le chiavi API o i token bearer in Secret Manager. Questo passaggio è facoltativo se l'endpoint del modello non gestisce l'autenticazione tramite Secret Manager, ad esempio se l'endpoint del modello utilizza intestazioni HTTP per trasmettere le informazioni di autenticazione o se non utilizza affatto l'autenticazione.

Questa sezione spiega come configurare l'autenticazione se utilizzi Secret Manager.

Per creare e utilizzare una chiave API o un token di accesso, segui questi passaggi:

  1. Crea il secret in Secret Manager. Per ulteriori informazioni, vedi Creare un secret e accedere a una versione del secret.

    Il nome e il percorso del secret vengono utilizzati nella funzione SQL google_ml.create_sm_secret().

  2. Concedi le autorizzazioni al cluster AlloyDB per accedere allo secret.

      gcloud secrets add-iam-policy-binding 'SECRET_ID' \
          --member="serviceAccount:SERVICE_ACCOUNT_ID" \
          --role="roles/secretmanager.secretAccessor"
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID segreto in Secret Manager.
    • SERVICE_ACCOUNT_ID: l'ID dell'account di servizio creato nel passaggio precedente. Assicurati che si tratti dello stesso account utilizzato durante l'installazione di AlloyDB Omni. È incluso il suffisso PROJECT_ID.iam.gserviceaccount.com completo. Ad esempio: my-service@my-project.iam.gserviceaccount.com

      Puoi anche concedere questo ruolo all'account di servizio a livello di progetto. Per ulteriori informazioni, consulta Aggiungere l'associazione dei criteri di Identity and Access Management

Modelli di embedding di testo con supporto integrato

Questa sezione mostra come registrare gli endpoint del modello per i quali la gestione degli endpoint del modello fornisce il supporto integrato.

Modelli di embedding Vertex AI

La gestione degli endpoint dei modelli fornisce il supporto integrato per tutte le versioni del text-embedding-gecko modello di Vertex AI. Utilizza il nome completo per impostare la versione del modello su textembedding-gecko@001 o textembedding-gecko@002.

Poiché l'ID endpoint del modello textembedding-gecko e textembedding-gecko@001 è preregistrato con la gestione degli endpoint del modello, puoi utilizzarli direttamente come ID modello. Per questi modelli, l'estensione configura automaticamente le funzioni di trasformazione predefinite.

Per registrare la versione dell'endpoint del modello textembedding-gecko@002:

Per AlloyDB Omni, assicurati di configurare AlloyDB Omni per eseguire query sui modelli Vertex AI basati su cloud.

  1. Crea e attiva l'estensione google_ml_integration.

  2. Connettiti al database utilizzando psql.

  3. Crea e attiva l'estensione google_ml_integration.

  4. Chiama la funzione di creazione del modello per aggiungere l'endpoint del modello textembedding-gecko@002:

    CALL
      google_ml.create_model(
        model_id => 'textembedding-gecko@002',
        model_provider => 'google',
        model_qualified_name => 'textembedding-gecko@002',
        model_type => 'text_embedding',
        model_auth_type => 'alloydb_service_agent_iam');
    
      The request URL that the function generates refers to the project associated with the AlloyDB Omni service account. If you want to refer to another project, then ensure that you specify the `model_request_url` explicitly.
    

Modello di embedding di testo di Open AI

La gestione degli endpoint del modello fornisce il supporto integrato per il modello text-embedding-ada-002 di OpenAI.L'estensione google_ml_integration configura automaticamente le funzioni di trasformazione predefinite e richiama le chiamate al modello remoto.

L'esempio seguente aggiunge l'endpoint del modello OpenAI text-embedding-ada-002.

  1. Connettiti al database utilizzando psql.
  2. Crea e attiva l'estensione google_ml_integration.
  3. Aggiungi la chiave API OpenAI come segreto a Secret Manager per l'autenticazione.
  4. Chiama il secret archiviato in 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');
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID segreto impostato e successivamente utilizzato per registrare un endpoint del modello, ad esempio key1.
    • SECRET_MANAGER_SECRET_ID: l'ID segreto impostato in Secret Manager quando hai creato il segreto.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • VERSION_NUMBER: il numero di versione dell'ID segreto.
  5. Chiama la funzione di creazione del modello per registrare l'endpoint del modello 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');
    

    Sostituisci quanto segue:

    • MODEL_ID: un ID univoco per l'endpoint del modello che definisci. A questo ID modello viene fatto riferimento per i metadati di cui l'endpoint del modello ha bisogno per generare embedding o invocare le previsioni.
    • SECRET_ID: l'ID segreto che hai utilizzato in precedenza nella procedura google_ml.create_sm_secret().

Per generare embedding, scopri come generare embedding per gli endpoint del modello con il supporto integrato.

Altri modelli di incorporamento del testo

Questa sezione mostra come registrare qualsiasi endpoint del modello di embedding di testo ospitato in modo personalizzato o gli endpoint del modello di embedding di testo forniti dai fornitori di hosting dei modelli. In base ai metadati dell'endpoint del modello, potresti dover aggiungere funzioni di trasformazione, generare intestazioni HTTP o definire endpoint.

Modello di embedding di testo ospitato in modo personalizzato

Questa sezione mostra come registrare un endpoint del modello ospitato in modo personalizzato, nonché come creare funzioni di trasformazione e, facoltativamente, intestazioni HTTP personalizzate. AlloyDB Omni supporta tutti gli endpoint dei modelli ospitati in modo personalizzato, indipendentemente da dove sono ospitati.

L'esempio seguente aggiunge l'endpoint del modello personalizzato custom-embedding-model ospitato da Cymbal. Le funzioni di trasformazione cymbal_text_input_transform e cymbal_text_output_transform vengono utilizzate per trasformare il formato di input e di output del modello nel formato di input e di output della funzione di previsione.

Per registrare gli endpoint dei modelli di embedding di testo ospitati in modo personalizzato:

  1. Connettiti al database utilizzando psql.

  2. Crea e attiva l'estensione google_ml_integration.

  3. (Facoltativo) Aggiungi la chiave API come segreto a Secret Manager per l'autenticazione.

  4. Chiama il secret archiviato in 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');
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID segreto impostato e successivamente utilizzato per registrare un endpoint del modello, ad esempio key1.
    • SECRET_MANAGER_SECRET_ID: l'ID segreto impostato in Secret Manager quando hai creato il segreto.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • VERSION_NUMBER: il numero di versione dell'ID segreto.
  5. Crea le funzioni di trasformazione di input e output in base alla seguente firma per la funzione di previsione per gli endpoint del modello di embedding del testo. Per ulteriori informazioni su come creare funzioni di trasformazione, consulta l'esempio di funzioni di trasformazione.

    Di seguito sono riportati esempi di funzioni di trasformazione specifiche per l'endpoint del modello di embedding del testo 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. Chiama la funzione di creazione del modello per registrare l'endpoint del modello di embedding personalizzato:

    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');
    

    Sostituisci quanto segue:

    • MODEL_ID: obbligatorio. Un ID univoco per l'endpoint del modello che definisci, ad esempio custom-embedding-model. A questo ID modello viene fatto riferimento per i metadati di cui l'endpoint del modello ha bisogno per generare embedding o invocare le previsioni.
    • REQUEST_URL: obbligatorio. L'endpoint specifico del modello quando aggiungi l'embedding di testo personalizzato e gli endpoint del modello generico, ad esempio https://cymbal.com/models/text/embeddings/v1.
    • MODEL_QUALIFIED_NAME: obbligatorio se l'endpoint del modello utilizza un nome qualificato. Il nome completo nel caso in cui l'endpoint del modello abbia più versioni.
    • SECRET_ID: l'ID segreto che hai utilizzato in precedenza nella procedura google_ml.create_sm_secret().

Modelli OpenAI Text Embedding 3 piccoli e grandi

Puoi registrare gli endpoint dei modelli OpenAI text-embedding-3-small e text-embedding-3-large utilizzando la funzione di previsione dell'embedding e le funzioni di trasformazione specifiche per l'endpoint del modello. L'esempio seguente mostra come registrare l'endpoint del modello OpenAI text-embedding-3-small.

Per registrare l'endpoint del modello di embedding text-embedding-3-small:

  1. Connettiti al database utilizzando psql.
  2. Crea e attiva l'estensione google_ml_integration.
  3. Aggiungi la chiave API OpenAI come segreto a Secret Manager per l'autenticazione. Se hai già creato un segreto per qualsiasi altro modello OpenAI, puoi riutilizzarlo.
  4. Chiama il secret archiviato in 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');
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID segreto impostato e successivamente utilizzato per registrare un endpoint del modello.
    • SECRET_MANAGER_SECRET_ID: l'ID segreto impostato in Secret Manager quando hai creato il segreto.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • VERSION_NUMBER: il numero di versione dell'ID segreto.
  5. Crea le funzioni di trasformazione di input e output in base alla seguente firma per la funzione di previsione per i modelli di embedding di testo. Per ulteriori informazioni su come creare funzioni di trasformazione, consulta l'esempio di funzioni di trasformazione. Per informazioni sui formati di input e output previsti dagli endpoint dei modelli OpenAI, consulta Embedding.

    Di seguito sono riportati esempi di funzioni di trasformazione per gli endpoint dei modelli di incorporamento del testo di OpenAI text-embedding-ada-002, text-embedding-3-small e text-embedding-3-large.

    -- Input Transform Function corresponding to openai_text_embedding model endpoint family
    CREATE OR REPLACE FUNCTION openai_text_input_transform(model_id VARCHAR(100), input_text TEXT)
    RETURNS JSON
    LANGUAGE plpgsql
    AS $$
    #variable_conflict use_variable
    DECLARE
      transformed_input JSON;
      model_qualified_name TEXT;
    BEGIN
      SELECT google_ml.model_qualified_name_of(model_id) INTO model_qualified_name;
      SELECT json_build_object('input', input_text, 'model', model_qualified_name)::JSON INTO transformed_input;
      RETURN transformed_input;
    END;
    $$;
    
    -- Output Transform Function corresponding to openai_text_embedding model endpoint family
    CREATE OR REPLACE FUNCTION openai_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->'data'->0->'embedding')) INTO transformed_output;
      RETURN transformed_output;
    END;
    $$;
    
  6. Chiama la funzione di creazione del modello per registrare l'endpoint del modello di embedding text-embedding-3-small:

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'open_ai',
        model_type => 'text_embedding',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID',
        model_qualified_name => 'text-embedding-3-small',
        model_in_transform_fn => 'openai_text_input_transform',
        model_out_transform_fn => 'openai_text_output_transform');
    

    Sostituisci quanto segue:

    • MODEL_ID: un ID univoco per l'endpoint del modello che definisci, ad esempio openai-te-3-small. A questo ID modello viene fatto riferimento per i metadati di cui l'endpoint del modello ha bisogno per generare embedding o invocare le previsioni.
    • SECRET_ID: l'ID segreto che hai utilizzato in precedenza nella procedura google_ml.create_sm_secret().

Per saperne di più, scopri come generare embedding per altri endpoint dei modelli di embedding di testo.

Modelli generici

Questa sezione mostra come registrare qualsiasi endpoint del modello generico disponibile su un fornitore di modelli ospitato come Hugging Face, OpenAI, Vertex AI o qualsiasi altro fornitore. Questa sezione mostra esempi per registrare un endpoint del modello generico ospitato su Hugging Face e un modello gemini-pro generico di Vertex AI Model Garden, che non ha il supporto integrato.

Puoi registrare qualsiasi endpoint del modello generico, purché l'input e l'output siano in formato JSON. In base ai metadati dell'endpoint del modello, potrebbe essere necessario generare intestazioni HTTP o definire endpoint.

Modello generico su Hugging Face

L'esempio seguente aggiunge l'endpoint del facebook/bart-large-mnli modello di classificazione personalizzato ospitato su Hugging Face.

  1. Connettiti al database utilizzando psql.
  2. Crea e attiva l'estensione google_ml_integration.
  3. Aggiungi il token di accesso come secret a Secret Manager per l'autenticazione.
  4. Chiama il secret archiviato in Secret Manager:

    CALL
      google_ml.create_sm_secret(
        secret_id => 'SECRET_ID',
        secret_path => 'projects/project-id/secrets/SECRE_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID segreto impostato e successivamente utilizzato per registrare un endpoint del modello.
    • SECRET_MANAGER_SECRET_ID: l'ID segreto impostato in Secret Manager quando hai creato il segreto.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • VERSION_NUMBER: il numero di versione dell'ID segreto.
  5. Chiama la funzione di creazione del modello per registrare l'endpoint del modello facebook/bart-large-mnli:

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'custom',
        model_request_url => 'REQUEST_URL',
        model_qualified_name => 'MODEL_QUALIFIED_NAME',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID');
    

    Sostituisci quanto segue:

    • MODEL_ID: un ID univoco per l'endpoint del modello che definisci, ad esempio custom-classification-model. A questo ID modello viene fatto riferimento per i metadati di cui l'endpoint del modello ha bisogno per generare embedding o invocare le previsioni.
    • REQUEST_URL: l'endpoint specifico del modello quando aggiungi l'embedding di testo personalizzato e gli endpoint del modello generico, ad esempio https://api-inference.huggingface.co/models/facebook/bart-large-mnli.
    • MODEL_QUALIFIED_NAME: il nome completo della versione dell'endpoint del modello, ad esempio facebook/bart-large-mnli.
    • SECRET_ID: l'ID segreto che hai utilizzato in precedenza nella procedura google_ml.create_sm_secret().

Modello Gemini

Assicurati di configurare AlloyDB Omni per eseguire query sui modelli Vertex AI basati su cloud.

L'esempio seguente aggiunge l'endpoint del modello gemini-1.0-pro da Model Garden di Vertex AI.

  1. Connettiti al database utilizzando psql.
  2. Crea e attiva l'estensione google_ml_integration.
  3. Chiama la funzione create model per registrare il modello gemini-1.0-pro:

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:streamGenerateContent',
        model_provider => 'google',
        model_auth_type => 'alloydb_service_agent_iam');
    

    Sostituisci quanto segue:

    • MODEL_ID: un ID univoco per l'endpoint del modello che definisci, ad esempio gemini-1. A questo ID modello viene fatto riferimento per i metadati di cui l'endpoint del modello ha bisogno per generare embedding o invocare le previsioni.
    • PROJECT_ID: l'ID del tuo progetto Google Cloud .

Per saperne di più, scopri come richiedere le previsioni per gli endpoint dei modelli generici.

Passaggi successivi