Vertex AI è la piattaforma di AI generativa di Google su Google Cloud. Espone i modelli Gemini tramite un PredictionService gRPC, dove una chiamata GenerateContent invia il tuo prompt e restituisce la risposta del modello. sgcWebSockets Enterprise include un client gRPC Vertex AI tipizzato che poggia sopra TsgcGRPCClient, così puoi chiamare Gemini da Delphi e C++Builder direttamente su gRPC, senza alcun runtime esterno e senza assemblare a mano i Protocol Buffers.
Come funziona
gRPC è costituito da messaggi Protocol Buffers incapsulati su HTTP/2, quindi una chiamata Vertex AI è una richiesta HTTP/2 verso l'endpoint regionale aiplatform.googleapis.com. Il trasporto è un TsgcHTTP2Client puntato all'host della regione sulla porta 443 con TLS abilitato e TsgcGRPCClient gestisce sopra di esso l'incapsulamento, gli header, i timeout e i trailer.
L'helper Vertex AI è un insieme di classi di messaggi tipizzate in sgcGRPC_Google_VertexAI. Costruisci un TsgcGRPCVertexAIGenerateContentRequest nel codice, lo serializzi con ToBytes, consegni i byte al client gRPC, poi ricarichi i byte della risposta in un TsgcGRPCVertexAIGenerateContentResponse. La richiesta rispecchia lo schema di Vertex AI: una richiesta porta un nome di risorsa del modello e una lista di contenuti, ogni contenuto ha un ruolo e una o più parti e una parte contiene testo oppure dati binari inline.
Vertex AI usa l'autenticazione con account di servizio Google Cloud. Il client firma un JWT dell'account di servizio e lo invia come header authorization: Bearer nei metadata gRPC, così ogni chiamata è autenticata verso l'endpoint regionale di Vertex AI.
Autenticarsi con un account di servizio
Il client Google Cloud firma un JWT autofirmato dell'account di servizio dalla tua chiave JSON dell'account di servizio. Quel JWT è vincolato all'audience, quindi deve puntare all'endpoint regionale di Vertex AI, altrimenti aiplatform.googleapis.com lo rifiuta con UNAUTHENTICATED. Una volta acquisito un token, aggiungilo al DefaultMetadata del client gRPC in modo che viaggi con ogni chiamata.
uses
sgcHTTP_Google_Cloud, sgcGRPC_Client;
// CloudClient is a TsgcHTTPGoogleCloud_PubSub_Client used here only to sign the JWT
CloudClient.GoogleCloudOptions.Authentication := gcaJWT;
CloudClient.GoogleCloudOptions.JWT.ClientEmail := ClientEmail;
CloudClient.GoogleCloudOptions.JWT.PrivateKeyId := PrivateKeyId;
CloudClient.GoogleCloudOptions.JWT.PrivateKey.Text := PrivateKey;
CloudClient.GoogleCloudOptions.JWT.ProjectId := ProjectId;
CloudClient.GoogleCloudOptions.JWT.API_Endpoint :=
'https://' + Region + '-aiplatform.googleapis.com/';
// after the token arrives in OnAuthToken
GRPC.DefaultMetadata.Clear;
GRPC.DefaultMetadata.Add('authorization', 'Bearer ' + Token);
Configurare il trasporto
Crea un TsgcHTTP2Client per l'host regionale e assegnalo al client gRPC. Vertex AI parla application/grpc+proto, quindi lascia il content type del canale su grpcProto.
uses
sgcHTTP2_Client, sgcGRPC_Client, sgcGRPC_Types;
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.Host := Region + '-aiplatform.googleapis.com'; // e.g. us-central1-...
HTTP2.Port := 443;
HTTP2.TLS := True;
GRPC := TsgcGRPCClient.Create(nil);
GRPC.Client := HTTP2;
GRPC.ChannelOptions.ContentType := grpcProto;
GRPC.ChannelOptions.Compression := grpcNoCompression;
HTTP2.Active := True;
Generare contenuto da un prompt
Costruisci la richiesta dalle classi di messaggi tipizzate. Il modello è il nome di risorsa completo, l'unico contenuto ha il ruolo user e il prompt va in una parte di testo. Call blocca finché non arriva la risposta e restituisce un TsgcGRPCResponse con i byte grezzi di Data, che carichi in una risposta tipizzata.
uses
sgcGRPC_Client, sgcGRPC_Types, sgcGRPC_Google_VertexAI;
var
oRequest: TsgcGRPCVertexAIGenerateContentRequest;
oContent: TsgcGRPCVertexAIContent;
oPart: TsgcGRPCVertexAIPart;
oResponse: TsgcGRPCResponse;
begin
oRequest := TsgcGRPCVertexAIGenerateContentRequest.Create;
try
oRequest.Model := 'projects/' + ProjectId + '/locations/' + Region +
'/publishers/google/models/' + Model; // e.g. gemini-2.0-flash
oContent := oRequest.AddContent;
oContent.Role := 'user';
oPart := oContent.AddPart;
oPart.Text := 'Explain gRPC in one sentence.';
oResponse := GRPC.Call(
'google.cloud.aiplatform.v1.PredictionService', 'GenerateContent',
oRequest.ToBytes);
if oResponse.StatusCode = grpcOK then
ParseResponse(oResponse.Data)
else
ShowMessage('gRPC error: ' + oResponse.StatusMessage);
finally
oRequest.Free;
end;
end;
Leggere la risposta
Carica i byte della risposta in un TsgcGRPCVertexAIGenerateContentResponse. Espone i candidati, ognuno con le sue parti di contenuto e un motivo di terminazione, più un blocco UsageMetadata con i conteggi dei token del prompt, dei candidati e totali.
procedure ParseResponse(const aData: TBytes);
var
oResponse: TsgcGRPCVertexAIGenerateContentResponse;
oCandidate: TsgcGRPCVertexAICandidate;
i, j: Integer;
begin
oResponse := TsgcGRPCVertexAIGenerateContentResponse.Create;
try
oResponse.LoadFromBytes(aData);
for i := 0 to oResponse.CandidateCount - 1 do
begin
oCandidate := oResponse.Candidate(i);
for j := 0 to oCandidate.Content.PartCount - 1 do
Memo1.Lines.Add(oCandidate.Content.Part(j).Text);
end;
Memo1.Lines.Add('Total tokens: ' +
IntToStr(oResponse.UsageMetadata.TotalTokenCount));
finally
oResponse.Free;
end;
end;
Configurazione della generazione e impostazioni di sicurezza
La richiesta porta anche un GenerationConfig opzionale e una lista di impostazioni di sicurezza. Usa la config per controllare il campionamento e la lunghezza: Temperature, TopP, TopK, CandidateCount, MaxOutputTokens e StopSequences. Ogni impostazione di sicurezza accoppia una Category di danno con una Threshold di blocco.
oRequest.GenerationConfig.Temperature := 0.7;
oRequest.GenerationConfig.MaxOutputTokens := 1024;
oRequest.GenerationConfig.StopSequences.Add('END');
with oRequest.AddSafetySetting do
begin
Category := 7; // HARM_CATEGORY_DANGEROUS_CONTENT
Threshold := 2; // BLOCK_MEDIUM_AND_ABOVE
end;
Risposte in streaming
Vertex AI espone anche StreamGenerateContent, la controparte server-streaming che restituisce la risposta come una sequenza di blocchi parziali invece di un unico blocco. Poiché l'helper Vertex AI è costruito su TsgcGRPCClient, la stessa richiesta tipizzata alimenta l'API server-streaming del client: avvii la chiamata, decodifichi ogni blocco in un TsgcGRPCVertexAIGenerateContentResponse man mano che arriva e accodi il testo dai suoi candidati per aggiornare l'interfaccia mentre il modello scrive.
Disponibilità
Il client gRPC Vertex AI fa parte dell'edizione Enterprise di sgcWebSockets. Un esempio pronto all'uso è in Demos\21.GRPC\17.Vertex_AI: incolla o carica la tua chiave JSON dell'account di servizio, imposta progetto, regione e modello, connettiti, poi invia un prompt con Generate Content. Il riferimento completo è sulla pagina prodotto gRPC Client.
Domande o feedback? Contattaci. Riceverai una risposta dalle persone che hanno scritto il codice.
