Registra e chiama modelli di IA remoti in AlloyDB Omni

Seleziona una versione della documentazione:

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

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

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

Abilitare l'estensione

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

  1. Verifica che il flag di database google_ml_integration.enable_model_support sia impostato su on per un'istanza. Per saperne di più sull'impostazione dei flag di database, consulta Configurare i flag di database.

  2. (Facoltativo) Se l'estensione google_ml_integration è già installata, modificala per eseguire l'aggiornamento alla versione più recente:

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

      CREATE EXTENSION IF NOT EXISTS google_ml_integration;
    
  4. (Facoltativo) Concedi a un utente PostgreSQL non superuser l'autorizzazione per 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 superuser.

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

      ALTER SYSTEM SET google_ml_integration.enable_model_support=on;
      SELECT pg_reload_conf();
    
  6. Assicurati che la connettività in uscita sia abilitata.

Configurare l'autenticazione

Le sezioni seguenti mostrano come configurare l'autenticazione prima di registrare un endpoint del modello.

Configurare l'autenticazione per Vertex AI

Per utilizzare gli endpoint dei modelli di Google Vertex AI, devi aggiungere le autorizzazioni di Vertex AI al account di servizio che hai utilizzato durante l'installazione di AlloyDB Omni. Per saperne di più, consulta Configurare l'installazione di AlloyDB Omni per eseguire query sui modelli basati sul cloud.

Configurare l'autenticazione utilizzando 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 le intestazioni HTTP per trasmettere le informazioni di autenticazione o non utilizza affatto l'autenticazione.

Per creare e utilizzare una chiave API o un token di autenticazione, completa i seguenti passaggi:

  1. Crea il secret in Secret Manager. Per saperne di più, consulta Creare un secret e accedere a una versione del secret.

    Il percorso del secret viene utilizzato nella google_ml.create_sm_secret() funzione SQL.

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

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

    Sostituisci quanto segue:

    • SECRET_NAME: il nome del secret in Secret Manager.
    • SERVICE_ACCOUNT_ID: l'ID del account di servizio che hai creato nel passaggio precedente. Assicurati che sia lo stesso account che hai utilizzato durante l'installazione di AlloyDB Omni. Include il suffisso PROJECT_ID.iam.gserviceaccount.com completo. Ad esempio: my-service@my-project.iam.gserviceaccount.com

      Puoi anche assegnare questo ruolo al account di servizio a livello di progetto. Per saperne di più, consulta Aggiungere un binding di policy Identity and Access Management.

Configurare l'autenticazione utilizzando le intestazioni

L'esempio seguente mostra come configurare l'autenticazione utilizzando una funzione che restituisce un oggetto JSON contenente le intestazioni necessarie per effettuare una richiesta al modello di 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;
  $$;

Sostituisci quanto segue:

  • HEADER_GEN_FUNCTION: il nome della funzione di generazione delle intestazioni che puoi utilizzare durante la registrazione di un modello.
  • API_KEY: la chiave API del provider del modello.

Modelli di text embedding

Questa sezione mostra come registrare gli endpoint dei modelli con la gestione degli endpoint dei modelli.

La gestione degli endpoint dei modelli supporta alcuni modelli di text embedding e generici di Vertex AI come endpoint dei modelli preregistrati. Puoi utilizzare direttamente l'ID modello per generare embedding o richiamare le previsioni, in base al tipo di modello. Per saperne di più sui modelli preregistrati supportati, consulta Modelli Vertex AI preregistrati.

Ad esempio, per chiamare il modello textembedding-gecko preregistrato, puoi chiamare direttamente il modello utilizzando la funzione di embedding:

SELECT
      google_ml.embedding(
        model_id => 'textembedding-gecko',
        content => 'AlloyDB is a managed, cloud-hosted SQL database service');

Allo stesso modo, per chiamare il modello gemini-1.5-pro:generateContent preregistrato, puoi chiamare direttamente il modello utilizzando la funzione di previsione:

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

Per generare embedding, scopri come generare embedding per gli endpoint dei modelli preregistrati. Per richiamare le previsioni, scopri come richiamare le previsioni per gli endpoint dei modelli preregistrati.

Modelli di text embedding con supporto integrato

La gestione degli endpoint dei modelli fornisce il supporto integrato per alcuni modelli di Vertex AI e OpenAI. Per l'elenco dei modelli con supporto integrato, consulta Modelli con supporto integrato.

Per i modelli con supporto integrato, puoi impostare il nome completo come nome completo del modello e specificare l'URL della richiesta. La gestione degli endpoint dei modelli identifica automaticamente il modello e configura le funzioni di trasformazione predefinite.

Modelli di embedding Vertex AI

I passaggi seguenti mostrano come registrare i modelli Vertex AI con supporto integrato. Come esempio viene utilizzato l'endpoint del modello text-embedding-005 e text-multilingual-embedding-002.

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

  1. Crea e abilita l'estensione google_ml_integration.

  2. Connettiti al database utilizzando psql.

  3. Chiama la funzione di creazione del modello per aggiungere l'endpoint del modello:

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

L'URL della richiesta generato dalla funzione fa riferimento al progetto associato al account di servizio AlloyDB Omni. Se vuoi fare riferimento a un altro progetto, assicurati di specificare esplicitamente model_request_url.

Se il modello è archiviato in un progetto e in una regione diversi dal cluster AlloyDB, imposta l'URL della richiesta su projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID, dove REGION_ID è la regione in cui è ospitato il modello e MODEL_ID è il nome completo del modello.

Inoltre, concedi il ruolo Utente Vertex AI (roles/aiplatform.user) al account di servizio del progetto in cui è installato AlloyDB Omni in modo che sia possibile accedere al modello ospitato nell'altro progetto.

Modello di text embedding OpenAI

L'estensione google_ml_integration configura automaticamente le funzioni di trasformazione predefinite e richiama le chiamate ai modelli OpenAI remoti. Per l'elenco dei modelli OpenAI con supporto integrato, consulta Modelli con supporto integrato.

L'esempio seguente aggiunge l'endpoint del modello OpenAI text-embedding-ada-002. Puoi registrare gli endpoint dei modelli OpenAI text-embedding-3-small e text-embedding-3-large seguendo gli stessi passaggi e impostando i nomi completi dei modelli specifici per i modelli.

  1. Connettiti al database utilizzando psql.
  2. Crea e abilita l'estensione google_ml_integration.
  3. Aggiungi la chiave API OpenAI 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/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID del secret che hai impostato e che viene utilizzato in seguito durante la registrazione di un endpoint del modello, ad esempio key1.
    • SECRET_MANAGER_SECRET_ID: l'ID del secret impostato in Secret Manager quando hai creato il secret.
    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • VERSION_NUMBER: il numero di versione dell'ID del secret.
  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. Questo ID modello viene utilizzato come riferimento per i metadati necessari all'endpoint del modello per generare embedding o richiamare le previsioni.
    • SECRET_ID: l'ID del secret che hai utilizzato in precedenza nella procedura google_ml.create_sm_secret().

Per generare embedding, scopri come generare embedding per gli endpoint dei modelli con supporto integrato.

Modello di text embedding ospitato dal cliente

Questa sezione mostra come registrare un endpoint del modello ospitato dal cliente, creare funzioni di trasformazione e, facoltativamente, intestazioni HTTP personalizzate. Tutti gli endpoint dei modelli ospitati dal cliente sono supportati indipendentemente dalla loro posizione.

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 output del modello nel formato di input e output della funzione di previsione.

Per registrare gli endpoint dei modelli di text embedding ospitati dal cliente, completa i seguenti passaggi:

  1. Connettiti al database utilizzando psql.

  2. Crea e abilita l'estensione google_ml_integration.

  3. (Facoltativo) Aggiungi la chiave API 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/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    Sostituisci quanto segue:

    • SECRET_ID: l'ID del secret che hai impostato e che viene utilizzato in seguito durante la registrazione di un endpoint del modello, ad esempio key1.
    • SECRET_MANAGER_SECRET_ID: l'ID del secret impostato in Secret Manager quando hai creato il secret.
    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • VERSION_NUMBER: il numero di versione dell'ID del secret.
  5. Crea le funzioni di trasformazione di input e output in base alla seguente firma per la funzione di previsione per gli endpoint dei modelli di text embedding. Per saperne di più su come creare funzioni di trasformazione, consulta Esempio di funzioni di trasformazione.

    Di seguito sono riportate le funzioni di trasformazione di esempio specifiche per l'endpoint del modello di text embedding 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. Questo ID modello viene utilizzato come riferimento per i metadati necessari all'endpoint del modello per generare embedding o richiamare le previsioni.
    • REQUEST_URL: obbligatorio. L'endpoint specifico del modello quando si aggiungono endpoint di modelli generici e di text embedding personalizzati, ad esempio https://cymbal.com/models/text/embeddings/v1.
    • MODEL_QUALIFIED_NAME: obbligatorio se l'endpoint del modello utilizza un nome completo. Il nome completo nel caso in cui l'endpoint del modello abbia più versioni.
    • SECRET_ID: l'ID del secret che hai utilizzato in precedenza nella procedura google_ml.create_sm_secret().

Modelli generici

Questa sezione mostra come registrare qualsiasi endpoint del modello generico disponibile su un provider di modelli ospitati come Hugging Face, OpenAI, Vertex AI, Anthropic o qualsiasi altro provider. Questa sezione mostra esempi di registrazione di un endpoint del modello generico ospitato su Hugging Face, un modello generico gemini-pro da Vertex AI Model Garden e l'endpoint del modello claude-haiku.

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, potresti dover generare intestazioni HTTP o definire URL di richiesta.

Per saperne di più sui modelli generici preregistrati e sui modelli con supporto integrato, consulta Modelli supportati.

Modello Gemini

Poiché alcuni modelli gemini-pro sono preregistrati, puoi chiamare direttamente l'ID modello per richiamare le previsioni. Assicurati di configurare AlloyDB Omni per eseguire query sui modelli Vertex AI basati sul cloud.

L'esempio seguente utilizza l'endpoint del modello gemini-1.5-pro:generateContent di Vertex AI Model Garden.

  1. Connettiti al database utilizzando psql.
  2. Crea e abilita l'estensione google_ml_integration.
  3. Richiama le previsioni utilizzando l'ID modello preregistrato:

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

Modello generico su Hugging Face

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

  1. Connettiti al database utilizzando psql.
  2. Crea e abilita l'estensione google_ml_integration.
  3. Aggiungi la chiave API OpenAI come secret a Secret Manager per l'autenticazione. Se hai già creato un secret per un altro modello OpenAI, puoi riutilizzare lo stesso secret.
  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 del secret che hai impostato e che viene utilizzato in seguito durante la registrazione di un endpoint del modello.
    • SECRET_MANAGER_SECRET_ID: l'ID del secret impostato in Secret Manager quando hai creato il secret.
    • PROJECT_ID: l'ID del tuo Google Cloud progetto.
    • VERSION_NUMBER: il numero di versione dell'ID del secret.
  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 => 'hugging_face',
        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. Questo ID modello viene utilizzato come riferimento per i metadati necessari all'endpoint del modello per generare embedding o richiamare le previsioni.
    • REQUEST_URL: l'endpoint specifico del modello quando si aggiungono endpoint di modelli generici e di text embedding personalizzati, 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 del secret che hai utilizzato in precedenza nella procedura google_ml.create_sm_secret().

Modello generico Anthropic

L'esempio seguente aggiunge l'endpoint del modello claude-3-opus-20240229. La gestione degli endpoint dei modelli fornisce la funzione di intestazione necessaria per la registrazione dei modelli Anthropic.

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

  1. Connettiti al database utilizzando psql.
  2. Crea e abilita l'estensione google_ml_integration.

    Secret Manager

    1. Aggiungi il token di autenticazione come secret a Secret Manager per l'autenticazione.
    2. 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 del secret che hai impostato e che viene utilizzato in seguito durante la registrazione di un endpoint del modello.
      • SECRET_MANAGER_SECRET_ID: l'ID del secret impostato in Secret Manager quando hai creato il secret.
      • PROJECT_ID: l'ID del tuo Google Cloud progetto.
      • VERSION_NUMBER: il numero di versione dell'ID del secret.
    3. Chiama la funzione di creazione del modello per registrare l'endpoint del modello 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');
      

      Sostituisci quanto segue:

      • MODEL_ID: un ID univoco per l'endpoint del modello che definisci, ad esempio anthropic-opus. Questo ID modello viene utilizzato come riferimento per i metadati necessari all'endpoint del modello per generare embedding o richiamare le previsioni.
      • REQUEST_URL: l'endpoint specifico del modello quando si aggiungono endpoint di modelli generici e di text embedding personalizzati, ad esempio https://api.anthropic.com/v1/messages.

    Intestazione autorizzazione

    1. Utilizza la funzione di generazione delle intestazioni predefinita google_ml.anthropic_claude_header_gen_fn o crea una funzione di generazione delle intestazioni.

        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;
        $$;
      

      Sostituisci quanto segue:

      • ANTHROPIC_API_KEY: la chiave API Anthropic.
      • ANTHROPIC_VERSION(facoltativo): la versione specifica del modello che vuoi utilizzare, ad esempio 2023-06-01.
    2. Chiama la funzione di creazione del modello per registrare l'endpoint del modello 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');
      

      Sostituisci quanto segue:

      • MODEL_ID: un ID univoco per l'endpoint del modello che definisci, ad esempio anthropic-opus. Questo ID modello viene utilizzato come riferimento per i metadati necessari all'endpoint del modello per generare embedding o richiamare le previsioni.
      • REQUEST_URL: l'endpoint specifico del modello quando si aggiungono endpoint di modelli generici e di text embedding personalizzati, ad esempio https://api.anthropic.com/v1/messages.

Per saperne di più, consulta Come richiamare le previsioni per gli endpoint dei modelli generici.

Passaggi successivi