O Vertex AI é a plataforma de IA generativa do Google no Google Cloud. Ela expõe os modelos Gemini através de um PredictionService gRPC, onde uma chamada GenerateContent envia seu prompt e retorna a resposta do modelo. O sgcWebSockets Enterprise inclui um cliente Vertex AI gRPC tipado que se apoia sobre o TsgcGRPCClient, para que você possa chamar o Gemini a partir do Delphi e do C++Builder diretamente sobre gRPC, sem nenhum runtime externo e sem montar Protocol Buffers à mão.
Como funciona
O gRPC são mensagens Protocol Buffers encapsuladas sobre HTTP/2, então uma chamada Vertex AI é uma requisição HTTP/2 ao endpoint regional aiplatform.googleapis.com. O transporte é um TsgcHTTP2Client apontado para o host da região na porta 443 com TLS habilitado, e o TsgcGRPCClient trata o enquadramento, os cabeçalhos, os timeouts e os trailers sobre ele.
O auxiliar Vertex AI é um conjunto de classes de mensagem tipadas em sgcGRPC_Google_VertexAI. Você monta um TsgcGRPCVertexAIGenerateContentRequest em código, o serializa com ToBytes, entrega os bytes ao cliente gRPC, então carrega os bytes da resposta de volta em um TsgcGRPCVertexAIGenerateContentResponse. A requisição espelha o schema do Vertex AI: uma requisição carrega um nome de recurso de modelo e uma lista de conteúdos, cada conteúdo tem um papel e uma ou mais partes, e uma parte contém texto ou dados binários inline.
O Vertex AI usa autenticação por conta de serviço do Google Cloud. O cliente assina um JWT de conta de serviço e o envia como um cabeçalho authorization: Bearer no metadado gRPC, para que cada chamada seja autenticada contra o endpoint regional do Vertex AI.
Autenticando com uma conta de serviço
O cliente do Google Cloud assina um JWT autoassinado de conta de serviço a partir da sua chave JSON de conta de serviço. Esse JWT é vinculado à audiência, então precisa ter como alvo o endpoint regional do Vertex AI, caso contrário aiplatform.googleapis.com o rejeita com UNAUTHENTICATED. Assim que um token é adquirido, adicione-o ao DefaultMetadata do cliente gRPC para que ele acompanhe cada chamada.
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);
Configurando o transporte
Crie um TsgcHTTP2Client para o host regional e atribua-o ao cliente gRPC. O Vertex AI fala application/grpc+proto, então deixe o tipo de conteúdo do canal em 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;
Gerando conteúdo a partir de um prompt
Monte a requisição a partir das classes de mensagem tipadas. O modelo é o nome de recurso completo, o único conteúdo tem o papel user e o prompt vai em uma parte de texto. O Call bloqueia até a resposta chegar e retorna um TsgcGRPCResponse com os bytes brutos de Data, que você carrega em uma resposta tipada.
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;
Lendo a resposta
Carregue os bytes da resposta em um TsgcGRPCVertexAIGenerateContentResponse. Ele expõe os candidatos, cada um com suas partes de conteúdo e uma razão de finalização, além de um bloco UsageMetadata com as contagens de tokens do prompt, dos candidatos e total.
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;
Configuração de geração e configurações de segurança
A requisição também carrega um GenerationConfig opcional e uma lista de configurações de segurança. Use a config para controlar a amostragem e o comprimento: Temperature, TopP, TopK, CandidateCount, MaxOutputTokens e StopSequences. Cada configuração de segurança pareia uma Category de risco com um Threshold de bloqueio.
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;
Respostas por streaming
O Vertex AI também expõe StreamGenerateContent, a contraparte server-streaming que retorna a resposta como uma sequência de pedaços parciais em vez de um bloco único. Como o auxiliar Vertex AI é construído sobre o TsgcGRPCClient, a mesma requisição tipada alimenta a API server-streaming do cliente: inicie a chamada, decodifique cada pedaço em um TsgcGRPCVertexAIGenerateContentResponse conforme ele chega e anexe o texto de seus candidatos para atualizar a interface enquanto o modelo escreve.
Disponibilidade
O cliente Vertex AI gRPC faz parte da edição Enterprise do sgcWebSockets. Um exemplo pronto para executar está em Demos\21.GRPC\17.Vertex_AI: cole ou carregue sua chave JSON de conta de serviço, defina o projeto, a região e o modelo, conecte, então envie um prompt com Generate Content. A referência completa está na página do produto gRPC Client.
Dúvidas ou comentários? Entre em contato. Você receberá uma resposta das pessoas que escreveram o código.
