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 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
.
Verifica che il flag di database
google_ml_integration.enable_model_support
sia impostato suon
per un'istanza. Per ulteriori informazioni sull'impostazione dei flag di database, vedi Configurare i flag di database.(Facoltativo) Se l'estensione
google_ml_integration
è già installata, modificala per aggiornarla all'ultima versione:ALTER EXTENSION google_ml_integration UPDATE;
Aggiungi l'estensione
google_ml_integration
utilizzando psql:CREATE EXTENSION IF NOT EXISTS google_ml_integration;
(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.Abilita la gestione degli endpoint del modello nel tuo database:
ALTER SYSTEM SET google_ml_integration.enable_model_support=on; SELECT pg_reload_conf();
Assicurati che la connettività in uscita sia attivata.
Configura 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 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 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 intestazioni HTTP per trasmettere le informazioni di autenticazione o se non utilizza affatto l'autenticazione.
Per creare e utilizzare una chiave API o un token di accesso, segui questi passaggi:
Crea il secret in Secret Manager. Per ulteriori informazioni, vedi Creare un secret e accedere a una versione del secret.
Il percorso del secret viene utilizzato nella funzione SQL
google_ml.create_sm_secret()
.Concedi le autorizzazioni al cluster AlloyDB per accedere allo 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 dell'account di servizio creato nel passaggio precedente. Assicurati che si tratti dello stesso account utilizzato durante l'installazione di AlloyDB Omni. È incluso il suffissoPROJECT_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
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 di intestazioni che puoi utilizzare quando registri un modello.API_KEY
: la chiave API del provider del modello.
Modelli di embedding di testo
Questa sezione mostra come registrare gli endpoint del modello con la gestione degli endpoint del modello.
La gestione degli endpoint dei modelli supporta alcuni modelli generici di Vertex AI e di embedding di testo come endpoint dei modelli preregistrati. Puoi utilizzare direttamente l'ID modello per generare embedding o invocare le previsioni, in base al tipo di modello. Per ulteriori informazioni sui modelli preregistrati supportati, consulta Modelli Vertex AI preregistrati.
Ad esempio, per chiamare il modello textembedding-gecko
preregistrato, puoi chiamarlo direttamente utilizzando la funzione di embedding:
SELECT google_ml.embedding( model_id => 'textembedding-gecko', content => 'AlloyDB is a managed, cloud-hosted SQL database service');
Analogamente, per chiamare il modello gemini-1.5-pro:generateContent
preregistrato, puoi chiamarlo direttamente 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 richiedere le previsioni per gli endpoint dei modelli preregistrati.
Modelli di embedding di testo 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 qualificato come nome qualificato del modello e specificare l'URL della richiesta. La gestione degli endpoint del modello identifica automaticamente il modello e configura le funzioni di trasformazione predefinite.
Modelli di embedding Vertex AI
I passaggi riportati di seguito mostrano come registrare i modelli Vertex AI con il supporto integrato. L'endpoint del modello text-embedding-005
e text-multilingual-embedding-002
viene utilizzato come esempio.
Per AlloyDB Omni, assicurati di configurare AlloyDB Omni per eseguire query sui modelli Vertex AI basati su cloud.
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 all'account di servizio AlloyDB Omni. Se vuoi fare riferimento a un altro progetto, assicurati di specificare model_request_url
in modo esplicito.
Se il modello è archiviato in un altro progetto e in un'altra regione rispetto al tuo 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 del modello qualificato.
Inoltre, concedi il ruolo Utente Vertex AI (roles/aiplatform.user
) all'account di servizio del progetto in cui è installato AlloyDB Omni per poter accedere al modello ospitato nell'altro progetto.
Modello di embedding di testo di Open AI
L'estensione google_ml_integration
configura automaticamente le funzioni di trasformazione predefinite e richiama i modelli OpenAI remote. 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 qualificati dei modelli specifici per i modelli.
- Connettiti al database utilizzando
psql
. - Crea e attiva l'estensione
google_ml_integration
. - Aggiungi la chiave API OpenAI come segreto a Secret Manager per l'autenticazione.
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 esempiokey1
.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.
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 proceduragoogle_ml.create_sm_secret()
.
Per generare embedding, scopri come generare embedding per gli endpoint del modello con il supporto integrato.
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. Tutti gli endpoint dei modelli ospitati in modo personalizzato sono supportati 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:
Connettiti al database utilizzando
psql
.(Facoltativo) Aggiungi la chiave API come segreto a Secret Manager per l'autenticazione.
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 esempiokey1
.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.
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; $$;
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 esempiocustom-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 esempiohttps://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 proceduragoogle_ml.create_sm_secret()
.
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, Anthropic o qualsiasi altro fornitore. Questa sezione mostra esempi per registrare un endpoint del modello generico ospitato su Hugging Face, un modello gemini-pro
generico di 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, potrebbe essere necessario generare intestazioni HTTP o definire gli URL delle richieste.
Per ulteriori informazioni 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 su cloud.
L'esempio seguente utilizza l'endpoint del modello gemini-1.5-pro:generateContent
di Model Garden di Vertex AI.
- Connettiti al database utilizzando
psql
. - Crea e attiva l'estensione
google_ml_integration
. 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
facebook/bart-large-mnli
modello di classificazione personalizzato ospitato su Hugging Face.
- Connettiti al database utilizzando
psql
. - Crea e attiva l'estensione
google_ml_integration
. - 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.
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.
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 esempiocustom-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 esempiohttps://api-inference.huggingface.co/models/facebook/bart-large-mnli
.MODEL_QUALIFIED_NAME
: il nome completo della versione dell'endpoint del modello, ad esempiofacebook/bart-large-mnli
.SECRET_ID
: l'ID segreto che hai utilizzato in precedenza nella proceduragoogle_ml.create_sm_secret()
.
Modello generico di 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 registrare i modelli Anthropoietic.
Assicurati di configurare AlloyDB Omni per eseguire query sui modelli Vertex AI basati su cloud.
- Connettiti al database utilizzando
psql
. Crea e attiva l'estensione
google_ml_integration
.Secret Manager
- Aggiungi il token di accesso come secret a Secret Manager per l'autenticazione.
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.
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 esempioanthropic-opus
. 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 esempiohttps://api.anthropic.com/v1/messages
.
Intestazione autorizzazione
Utilizza la funzione di generazione di intestazioni predefinita
google_ml.anthropic_claude_header_gen_fn
o crea una funzione di generazione di 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 esempio2023-06-01
.
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 esempioanthropic-opus
. 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 esempiohttps://api.anthropic.com/v1/messages
.
Per saperne di più, scopri come richiedere le previsioni per gli endpoint dei modelli generici.
Passaggi successivi
- Scopri di più sulla documentazione di riferimento per la gestione degli endpoint dei modelli
- Utilizzare modelli di esempio per la registrazione degli endpoint dei modelli