Vertex AI to platforma generatywnej sztucznej inteligencji firmy Google w Google Cloud. Udostępnia modele Gemini przez gRPC PredictionService, gdzie wywołanie GenerateContent wysyła Twój prompt i zwraca odpowiedź modelu. sgcWebSockets Enterprise dostarcza typowanego klienta gRPC Vertex AI, który działa na TsgcGRPCClient, więc możesz wywoływać Gemini z Delphi i C++Builder bezpośrednio przez gRPC, bez żadnego zewnętrznego środowiska uruchomieniowego i bez ręcznego składania Protocol Buffers.
Jak to działa
gRPC to komunikaty Protocol Buffers opakowane w HTTP/2, więc wywołanie Vertex AI to żądanie HTTP/2 do regionalnego punktu końcowego aiplatform.googleapis.com. Transportem jest TsgcHTTP2Client wskazujący na host regionu na porcie 443 z włączonym TLS, a TsgcGRPCClient obsługuje na jego podstawie opakowywanie, nagłówki, limity czasu i trailery.
Komponent pomocniczy Vertex AI to zestaw typowanych klas komunikatów w sgcGRPC_Google_VertexAI. Budujesz TsgcGRPCVertexAIGenerateContentRequest w kodzie, serializujesz go za pomocą ToBytes, przekazujesz bajty klientowi gRPC, a następnie wczytujesz bajty odpowiedzi z powrotem do TsgcGRPCVertexAIGenerateContentResponse. Żądanie odzwierciedla schemat Vertex AI: żądanie zawiera nazwę zasobu modelu i listę treści, każda treść ma rolę oraz jedną lub więcej części, a część przechowuje tekst albo osadzone dane binarne.
Vertex AI korzysta z uwierzytelniania przez konto usługi Google Cloud. Klient podpisuje JWT konta usługi i wysyła go jako nagłówek authorization: Bearer w metadanych gRPC, więc każde wywołanie jest uwierzytelniane wobec regionalnego punktu końcowego Vertex AI.
Uwierzytelnianie za pomocą konta usługi
Klient Google Cloud podpisuje samodzielnie podpisany JWT konta usługi z Twojego klucza JSON konta usługi. Ten JWT jest powiązany z odbiorcą, więc musi być skierowany na regionalny punkt końcowy Vertex AI, w przeciwnym razie aiplatform.googleapis.com odrzuci go z UNAUTHENTICATED. Gdy token zostanie uzyskany, dodaj go do DefaultMetadata klienta gRPC, aby towarzyszył każdemu wywołaniu.
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);
Konfigurowanie transportu
Utwórz TsgcHTTP2Client dla hosta regionalnego i przypisz go do klienta gRPC. Vertex AI mówi w application/grpc+proto, więc pozostaw typ zawartości kanału na 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;
Generowanie treści z promptu
Zbuduj żądanie z typowanych klas komunikatów. Model to pełna nazwa zasobu, jedyna treść ma rolę user, a prompt trafia do części tekstowej. Call blokuje, dopóki nie nadejdzie odpowiedź, i zwraca TsgcGRPCResponse z surowymi bajtami Data, które wczytujesz do typowanej odpowiedzi.
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;
Odczytywanie odpowiedzi
Wczytaj bajty odpowiedzi do TsgcGRPCVertexAIGenerateContentResponse. Udostępnia ona kandydatów, każdego z jego częściami treści i powodem zakończenia, plus blok UsageMetadata z liczbą tokenów promptu, kandydata i sumarycznych.
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;
Konfiguracja generowania i ustawienia bezpieczeństwa
Żądanie zawiera również opcjonalny GenerationConfig i listę ustawień bezpieczeństwa. Użyj konfiguracji do kontrolowania próbkowania i długości: Temperature, TopP, TopK, CandidateCount, MaxOutputTokens i StopSequences. Każde ustawienie bezpieczeństwa łączy Category szkodliwości z blokującym 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;
Odpowiedzi strumieniowe
Vertex AI udostępnia również StreamGenerateContent, strumieniowy po stronie serwera odpowiednik, który zwraca odpowiedź jako sekwencję częściowych fragmentów zamiast jednego bloku. Ponieważ komponent pomocniczy Vertex AI jest zbudowany na TsgcGRPCClient, to samo typowane żądanie zasila strumieniowe po stronie serwera API klienta: rozpocznij wywołanie, dekoduj każdy fragment do TsgcGRPCVertexAIGenerateContentResponse, gdy nadejdzie, i dołączaj tekst z jego kandydatów, aby aktualizować interfejs użytkownika w miarę jak model pisze.
Dostępność
Klient gRPC Vertex AI jest częścią edycji Enterprise sgcWebSockets. Gotowy do uruchomienia przykład znajduje się w Demos\21.GRPC\17.Vertex_AI: wklej lub wczytaj swój klucz JSON konta usługi, ustaw projekt, region i model, połącz się, a następnie wyślij prompt za pomocą Generate Content. Pełna dokumentacja jest na stronie produktu gRPC Client.
Pytania lub uwagi? Skontaktuj się z nami. Otrzymasz odpowiedź od osób, które napisały ten kod.
