Gemini Delphi API-client

· Componenten

Google Gemini is een van de krachtigste multimodale AI-modelfamilies die vandaag beschikbaar is. Hij blinkt uit in tekstgeneratie, beeldbegrip, gestructureerde outputs en function-calling voor een breed scala aan use cases. Voor Delphi-ontwikkelaars die Gemini in hun toepassingen willen integreren, biedt sgcWebSockets TsgcHTTP_API_Gemini — een veelomvattend, native component dat het volledige oppervlak van de Google Gemini-API verpakt.

Of je nu conversationele assistenten bouwt, gestructureerde data genereert, afbeeldingen verwerkt, embeddings maakt voor semantische zoekopdrachten of tool-uitgebreide workflows orkestreert: dit component geeft je rechtstreeks toegang tot elke Gemini-functie via nette, type-veilige Delphi-code. Geen REST-boilerplate. Geen JSON-gepuzzel. Plaats het component, stel je API-sleutel in en begin met bouwen.

Volledige API-dekking

Elke belangrijke functie van de Google Gemini-API wordt direct ondersteund.

Content-generatie
Genereer tekst uit prompts met optionele system-instructions. Verfijn de output met temperature, top-p, top-k en stop-sequences.
Realtime-streaming
Stream antwoorden token voor token via Server-Sent Events. Bouw responsive UI's die antwoorden tonen terwijl ze worden gegenereerd.
Vision
Analyseer afbeeldingen door base64-gecodeerde data met een tekst-prompt te versturen. Gemini beschrijft, interpreteert en redeneert over visuele inhoud.
Gestructureerde JSON-output
Dwing Gemini om geldige JSON terug te geven die aan jouw schema voldoet. Stel een response-MIME-type en -schema in voor gegarandeerd parsbare resultaten.
Function-calling
Definieer eigen functies met JSON Schema. Gemini beslist wanneer hij ze aanroept, waardoor agentische, meerstaps workflows mogelijk worden.
Embeddings
Genereer vector-embeddings voor tekst. Voed semantische zoekopdrachten, clustering, classificatie en aanbevelingssystemen.
Token-telling
Tel tokens voordat je requests verstuurt. Schat kosten nauwkeurig en beheer budgets voor context-windows.
Modelbeheer
Vraag alle beschikbare Gemini-modellen op of haal details op voor een specifiek model, inclusief invoer-/uitvoer-tokenlimieten.
Ingebouwde retry & logging
Automatisch opnieuw proberen bij tijdelijke storingen met instelbare pogingen en wachttijden. Volledige request/response-logging voor debuggen.

Aan de slag

Integreer Google Gemini binnen een minuut in je Delphi-project. Plaats het component, configureer je API-sleutel en verstuur je eerste bericht.

// Create the component and configure the API key
var
  Gemini: TsgcHTTP_API_Gemini;
  vResponse: string;
begin
  Gemini := TsgcHTTP_API_Gemini.Create(nil);
  Try
    Gemini.GeminiOptions.ApiKey := 'YOUR_API_KEY';
    // Send a simple message to Gemini
    vResponse := Gemini._CreateContent(
      'gemini-2.5-flash', 'Hello, Gemini!');
    ShowMessage(vResponse);
  Finally
    Gemini.Free;
  End;
end;

Twee API-stijlen. Elke functie biedt zowel gemaks-methoden (op basis van strings, minimale code) als getypte request/response-klassen (volledige controle, typeveiligheid). Kies de aanpak die het beste past bij jouw use case.

Content-generatie & streaming

De GenerateContent-API is de basis van elke Gemini-interactie. Verstuur tekst met optionele system-instructions en ontvang antwoorden synchroon of in realtime gestreamd.

System-instructions

Stuur het gedrag van Gemini bij door een system-instruction mee te geven die de context, persoonlijkheid of beperkingen voor het gesprek vastlegt.

vResponse := Gemini._CreateContentWithSystem(
  'gemini-2.5-flash',
  'You are a helpful assistant that responds in Spanish.',
  'What is the capital of France?');
// Returns: "La capital de Francia es París."

Realtime-streaming

Stream voor responsive-gebruikersinterfaces het antwoord van Gemini token voor token via Server-Sent Events. Wijs de event-handler OnHTTPAPISSE toe en roep _CreateContentStream aan.

// Enable streaming via SSE
Gemini.OnHTTPAPISSE := OnSSEEvent;
Gemini._CreateContentStream('gemini-2.5-flash',
  'Tell me a story about a brave explorer.');
procedure TForm1.OnSSEEvent(Sender: TObject;
  const aEvent, aData: string; var Cancel: Boolean);
begin
  // aData: JSON payload with generated content
  Memo1.Lines.Add(aData);
end;

Geavanceerde getypeerde API

Gebruik de getypte request- en response-klassen voor volledige controle over request-parameters — temperature, top-p, top-k, stop-sequences, max output tokens.

var
  oRequest: TsgcGeminiClass_Request_GenerateContent;
  oResponse: TsgcGeminiClass_Response_GenerateContent;
begin
  oRequest := TsgcGeminiClass_Request_GenerateContent.Create;
  Try
    oRequest.Model := 'gemini-2.5-flash';
    oRequest.SystemInstruction := 'You are a helpful assistant.';
    oRequest.MaxOutputTokens := 2048;
    oRequest.Temperature := 0.7;
    oRequest.TopP := 0.9;
    oRequest.TopK := 40;
    oRequest.Contents.Add('user', 'Explain quantum computing in simple terms.');
    oResponse := Gemini.CreateContent(oRequest);
    Try
      if Length(oResponse.Candidates) > 0 then
        ShowMessage(oResponse.Candidates[0].Parts[0].Text);
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Vision — beeldherkenning

Gemini is van nature multimodaal. Stuur foto's, screenshots, diagrammen of grafieken naast een tekst-prompt mee en ontvang gedetailleerde beschrijvingen, data-extractie of visuele Q&A.

// Load an image and ask Gemini to describe it
var
  vBase64: string;
begin
  vBase64 := sgcBase64Encode(LoadFileToBytes('product-photo.png'));
  ShowMessage(Gemini._CreateVisionContent(
    'gemini-2.5-flash',
    'Describe this product image for an e-commerce listing.',
    vBase64, 'image/png'));
end;

Use case. Automatiseer kwaliteitsinspectie, genereer alt-tekst voor toegankelijkheid, extraheer data uit grafieken of bouw visuele zoekfuncties — allemaal vanuit native Delphi-code.

Gestructureerde JSON-output

Garandeer dat Gemini geldige, parsbare JSON retourneert die exact aan jouw schema voldoet. Stel een response-MIME-type en -schema in om nabewerking te elimineren — de respons is direct klaar om te deserialiseren naar je Delphi-records.

var
  vSchema, vResponse: string;
begin
  vSchema :=
    '{"type":"object","properties":{"name":{"type":"string"},' +
    '"age":{"type":"integer"}},"required":["name","age"]}';
  vResponse := Gemini._CreateContentJSON(
    'gemini-2.5-flash',
    'Extract the name and age: John is 30 years old.',
    vSchema);
  // Returns: {"name": "John", "age": 30}
end;

Schema-handhaving. Door ResponseMimeType op 'application/json' te zetten en een ResponseSchema mee te geven, garandeert Gemini elke keer structureel geldige output.

Function-calling

Definieer eigen functies met JSON Schema en Gemini beslist wanneer en hoe hij ze aanroept. Dit is de basis voor het bouwen van agentische, meerstaps workflows die de AI verbinden met je bedrijfslogica.

var
  oRequest: TsgcGeminiClass_Request_GenerateContent;
  oFunc: TsgcGeminiClass_Request_FunctionDeclaration;
  oResponse: TsgcGeminiClass_Response_GenerateContent;
begin
  oRequest := TsgcGeminiClass_Request_GenerateContent.Create;
  Try
    oRequest.Model := 'gemini-2.5-flash';
    // Define a function
    oFunc := TsgcGeminiClass_Request_FunctionDeclaration.Create;
    oFunc.Name := 'get_weather';
    oFunc.Description := 'Get the current weather in a location';
    oFunc.Parameters :=
      '{"type":"object","properties":{"location":{"type":"string"}}}';
    oRequest.FunctionDeclarations.Add(oFunc);
    oRequest.Contents.Add('user',
      'What is the weather in Madrid?');
    oResponse := Gemini.CreateContent(oRequest);
    Try
      // Check if Gemini wants to call a function
      if oResponse.Candidates[0].Parts[0].FunctionCallName  '' then
      begin
        ShowMessage('Function: ' + oResponse.Candidates[0].Parts[0].FunctionCallName);
        ShowMessage('Args: ' + oResponse.Candidates[0].Parts[0].FunctionCallArgs);
      end;
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Embeddings

Genereer hoogwaardige vector-embeddings voor tekst. Embeddings voeden semantische zoekopdrachten, document-clustering, aanbevelings-engines en classificatie-taken.

// Generate embeddings for a text
var
  vEmbedding: string;
begin
  vEmbedding := Gemini._EmbedContent(
    'text-embedding-004',
    'Delphi is a powerful programming language.');
  ShowMessage(vEmbedding);
end;

Gebruik voor volledige controle de getypeerde API om de ruwe embedding-waarden-array te benaderen.

var
  oResponse: TsgcGeminiClass_Response_Embedding;
  i: Integer;
begin
  oResponse := Gemini.EmbedContent(
    'text-embedding-004',
    'Delphi is a powerful programming language.');
  Try
    for i := 0 to Length(oResponse.Values) - 1 do
      Memo1.Lines.Add(FloatToStr(oResponse.Values[i]));
  Finally
    oResponse.Free;
  End;
end;

Token-telling

Schat kosten en beheer budgets voor context-windows nauwkeurig voordat je requests verstuurt.

var
  vTokens: string;
begin
  vTokens := Gemini._CountTokens(
    'gemini-2.5-flash',
    'How many tokens does this message consume?');
  ShowMessage(vTokens);
end;

Modelbeheer

Vraag beschikbare Gemini-modellen programmatisch op. Toon alle modellen of haal details op voor een specifieke model-ID, inclusief displaynaam, beschrijving en tokenlimieten.

// List all available Gemini models
vModels := Gemini._GetModels;
// Get details for a specific model
vModel := Gemini._GetModel('gemini-2.5-flash');
// Typed API: access model properties directly
var
  oModel: TsgcGeminiClass_Response_Model;
begin
  oModel := Gemini.GetModel('gemini-2.5-flash');
  Try
    ShowMessage('Name: ' + oModel.DisplayName);
    ShowMessage('Input limit: ' + IntToStr(oModel.InputTokenLimit));
    ShowMessage('Output limit: ' + IntToStr(oModel.OutputTokenLimit));
  Finally
    oModel.Free;
  End;
end;

Configuratie & opties

Verfijn het gedrag van het component met uitgebreide configuratie-opties.

EigenschapBeschrijving
GeminiOptions.ApiKeyJe Google Gemini-API-sleutel (verplicht)
HttpOptions.ReadTimeoutHTTP-leestime-out in milliseconden (standaard: 60000)
LogOptions.EnabledSchakel request/response-logging in
LogOptions.FileNamePad naar logbestand voor het vastleggen van request/response
RetryOptions.EnabledAutomatisch opnieuw proberen bij tijdelijke storingen (429, 503)
RetryOptions.RetriesMaximaal aantal nieuwe pogingen (standaard: 3)
RetryOptions.WaitWachttijd tussen pogingen in milliseconden (standaard: 3000)

Request-parameters

ParameterBeschrijving
TemperatureSampling-temperatuur (0,0–2,0). Lagere waarden = deterministischer.
TopPNucleus-sampling (0,0–1,0). Bepaalt de cumulatieve waarschijnlijkheidsgrens.
TopKTop-K-sampling. Beperkt token-selectie tot de top-K-kandidaten.
MaxOutputTokensMaximaal aantal tokens in het antwoord (standaard: 4096).
StopSequencesAangepaste sequenties die generatie stoppen wanneer ze worden aangetroffen.
ResponseMimeTypeUitvoerformaat: 'application/json' voor JSON, 'text/plain' voor tekst.
ToolChoiceBepaal hoe het model functies selecteert om aan te roepen.