Vertex AI is Google's generatieve-AI-platform op Google Cloud. Het biedt de Gemini-modellen aan via een gRPC-PredictionService, waar een GenerateContent-call je prompt verstuurt en het antwoord van het model retourneert. sgcWebSockets Enterprise levert een getypeerde Vertex AI gRPC-client die bovenop TsgcGRPCClient draait, zodat je Gemini rechtstreeks via gRPC kunt aanroepen vanuit Delphi en C++Builder, zonder enige externe runtime en zonder Protocol Buffers met de hand samen te stellen.
Hoe het werkt
gRPC bestaat uit Protocol Buffers-berichten ingekapseld over HTTP/2, dus een Vertex AI-call is een HTTP/2-request naar het regionale aiplatform.googleapis.com-endpoint. De transport is een TsgcHTTP2Client gericht op de regiohost op poort 443 met TLS ingeschakeld, en TsgcGRPCClient verzorgt de framing, headers, timeouts en trailers daarbovenop.
De Vertex AI-helper is een set getypeerde berichtklassen in sgcGRPC_Google_VertexAI. Je bouwt in code een TsgcGRPCVertexAIGenerateContentRequest, serialiseert het met ToBytes, geeft de bytes door aan de gRPC-client, en laadt vervolgens de antwoordbytes terug in een TsgcGRPCVertexAIGenerateContentResponse. De request weerspiegelt het Vertex AI-schema: een request draagt een modelresourcenaam en een lijst met contents, elke content heeft een rol en een of meer parts, en een part bevat ofwel tekst ofwel inline binaire data.
Vertex AI gebruikt Google Cloud-service-account-authenticatie. De client ondertekent een service-account-JWT en verstuurt het als een authorization: Bearer-header in de gRPC-metadata, zodat elke call wordt geauthenticeerd tegen het regionale Vertex AI-endpoint.
Authenticeren met een service-account
De Google Cloud-client ondertekent een zelfondertekende service-account-JWT vanuit je service-account-JSON-sleutel. Die JWT is audience-gebonden, dus het moet gericht zijn op het regionale Vertex AI-endpoint, anders weigert aiplatform.googleapis.com het met UNAUTHENTICATED. Zodra een token is verkregen, voeg je het toe aan de DefaultMetadata van de gRPC-client zodat het met elke call meereist.
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);
De transport opzetten
Maak een TsgcHTTP2Client voor de regionale host en wijs het toe aan de gRPC-client. Vertex AI spreekt application/grpc+proto, dus laat het kanaal-contenttype op 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;
Content genereren uit een prompt
Bouw de request uit de getypeerde berichtklassen. Het model is de volledige resourcenaam, de enkele content heeft de user-rol, en de prompt gaat in een tekst-part. Call blokkeert totdat het antwoord arriveert en retourneert een TsgcGRPCResponse met de ruwe Data-bytes, die je in een getypeerde response laadt.
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;
De response uitlezen
Laad de antwoordbytes in een TsgcGRPCVertexAIGenerateContentResponse. Het legt de candidates bloot, elk met zijn content parts en een finish reason, plus een UsageMetadata-blok met de prompt-, candidate- en totale token-aantallen.
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;
Generation config en safety settings
De request draagt ook een optionele GenerationConfig en een lijst met safety settings. Gebruik de config om sampling en lengte te besturen: Temperature, TopP, TopK, CandidateCount, MaxOutputTokens en StopSequences. Elke safety setting koppelt een harm-Category aan een blokkerende Threshold.
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;
Streaming responses
Vertex AI biedt ook StreamGenerateContent, de server-streaming-tegenhanger die het antwoord retourneert als een reeks gedeeltelijke chunks in plaats van één blok. Omdat de Vertex AI-helper op TsgcGRPCClient is gebouwd, voedt dezelfde getypeerde request de server-streaming-API van de client: start de call, decodeer elke chunk naar een TsgcGRPCVertexAIGenerateContentResponse zodra deze arriveert, en voeg de tekst van zijn candidates toe om de UI bij te werken terwijl het model schrijft.
Beschikbaarheid
De Vertex AI gRPC-client maakt deel uit van de sgcWebSockets Enterprise-editie. Een kant-en-klaar voorbeeld staat in Demos\21.GRPC\17.Vertex_AI: plak of laad je service-account-JSON-sleutel, stel het project, de regio en het model in, maak verbinding, en verstuur vervolgens een prompt met Generate Content. De volledige referentie staat op de productpagina van de gRPC Client.
Vragen of feedback? Neem contact op. Je krijgt antwoord van de mensen die de code hebben geschreven.
