Google Gemini ist eine der leistungsstärksten multimodalen KI-Modellfamilien heute und glänzt bei Textgenerierung, Bildverständnis, strukturierten Ausgaben und Function Calling über ein breites Anwendungsspektrum. Für Delphi-Entwickler, die Gemini in ihre Anwendungen integrieren möchten, bietet sgcWebSockets TsgcHTTP_API_Gemini — eine umfassende, native Komponente, die die gesamte Google-Gemini-API-Oberfläche kapselt.
Egal, ob du Konversationsassistenten baust, strukturierte Daten erzeugst, Bilder verarbeitest, Embeddings für semantische Suche erstellst oder werkzeuggestützte Workflows orchestrierst — diese Komponente verschafft dir über sauberen, typsicheren Delphi-Code direkten Zugriff auf jede Gemini-Funktion. Kein REST-Boilerplate. Kein JSON-Gefummel. Komponente ablegen, API-Key setzen und loslegen.
Vollständige API-Abdeckung
Jede wichtige Funktion der Google-Gemini-API wird out of the box unterstützt.
|
Content-Generierung Erzeuge Text aus Prompts mit optionalen System Instructions. Stimme die Ausgabe per Temperatur, Top-p, Top-k und Stopp-Sequenzen ab. |
Echtzeit-Streaming Streame Antworten Token für Token per Server-Sent Events. Baue responsive Oberflächen, die Antworten während der Generierung anzeigen. |
Vision Analysiere Bilder, indem du base64-codierte Daten zusammen mit einem Text-Prompt sendest. Gemini beschreibt, interpretiert und argumentiert über visuelle Inhalte. |
|
Strukturierte JSON-Ausgabe Zwinge Gemini, gültiges JSON gemäß deinem Schema zurückzugeben. Setze einen Response-MIME-Type und ein Schema für garantiert parsebare Ergebnisse. |
Function Calling Definiere eigene Funktionen mit JSON Schema. Gemini entscheidet, wann es sie aufruft, und ermöglicht agentische, mehrstufige Workflows. |
Embeddings Erzeuge Vektor-Embeddings für Texte. Treibe semantische Suche, Clustering, Klassifikation und Empfehlungssysteme an. |
|
Token-Zählung Zähle Tokens, bevor du Anfragen sendest. Schätze Kosten präzise ab und steuere dein Kontextfenster-Budget. |
Modellverwaltung Liste alle verfügbaren Gemini-Modelle auf oder rufe Details zu einem bestimmten Modell ab, einschließlich Input-/Output-Token-Limits. |
Eingebautes Retry & Logging Automatisches Retry bei vorübergehenden Fehlern mit konfigurierbaren Versuchen und Wartezeiten. Vollständiges Request-/Response-Logging fürs Debugging. |
Erste Schritte
Integriere Google Gemini in unter einer Minute in dein Delphi-Projekt. Komponente ablegen, API-Key konfigurieren und erste Nachricht senden.
// 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;
Zwei API-Stile. Jede Funktion bietet sowohl Convenience-Methoden (string-basiert, minimaler Code) als auch typisierte Request-/Response-Klassen (volle Kontrolle, Typsicherheit). Wähle den Ansatz, der am besten zu deinem Anwendungsfall passt.
Content-Generierung & Streaming
Die GenerateContent-API ist die Grundlage jeder Gemini-Interaktion. Sende Text mit optionalen System Instructions und empfange Antworten synchron oder per Stream in Echtzeit.
System Instructions
Steuere Geminis Verhalten, indem du eine System Instruction mitgibst, die Kontext, Persönlichkeit oder Einschränkungen für die Konversation festlegt.
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."
Echtzeit-Streaming
Für responsive Benutzeroberflächen streamst du Geminis Antwort Token für Token per Server-Sent Events. Weise den Event-Handler OnHTTPAPISSE zu und rufe _CreateContentStream auf.
// 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;
Fortgeschrittene typisierte API
Für die volle Kontrolle über Anfrageparameter — Temperatur, Top-p, Top-k, Stopp-Sequenzen, Max Output Tokens — verwendest du die typisierten Request- und Response-Klassen.
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 — Bildverständnis
Gemini ist nativ multimodal. Sende Fotos, Screenshots, Diagramme oder Charts zusammen mit einem Text-Prompt und erhalte detaillierte Beschreibungen, Datenextraktion oder visuelle 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;
Anwendungsfall. Automatisiere die Qualitätsprüfung, erzeuge Alt-Texte für Barrierefreiheit, extrahiere Daten aus Charts oder baue visuelle Suchfunktionen — alles aus nativem Delphi-Code.
Strukturierte JSON-Ausgabe
Garantiere, dass Gemini gültiges, parsebares JSON gemäß deinem genauen Schema zurückgibt. Setze einen Response-MIME-Type und ein Schema, um Nachbearbeitung zu vermeiden — die Antwort lässt sich direkt in deine Delphi-Records deserialisieren.
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-Durchsetzung. Indem du ResponseMimeType auf 'application/json' setzt und ein ResponseSchema angibst, garantiert Gemini jedes Mal strukturell gültige Ausgaben.
Function Calling
Definiere eigene Funktionen mit JSON Schema; Gemini entscheidet, wann und wie sie aufgerufen werden. Das ist die Grundlage für agentische, mehrstufige Workflows, die die KI mit deiner Geschäftslogik verbinden.
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
Erzeuge hochwertige Vektor-Embeddings für Texte. Embeddings treiben semantische Suche, Dokumenten-Clustering, Empfehlungssysteme und Klassifikationsaufgaben an.
// Generate embeddings for a text
var
vEmbedding: string;
begin
vEmbedding := Gemini._EmbedContent(
'text-embedding-004',
'Delphi is a powerful programming language.');
ShowMessage(vEmbedding);
end;
Für die volle Kontrolle greifst du über die typisierte API direkt auf das rohe Werte-Array der Embeddings zu.
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-Zählung
Schätze Kosten und steuere dein Kontextfenster-Budget präzise, bevor du Anfragen sendest.
var
vTokens: string;
begin
vTokens := Gemini._CountTokens(
'gemini-2.5-flash',
'How many tokens does this message consume?');
ShowMessage(vTokens);
end;
Modellverwaltung
Frage verfügbare Gemini-Modelle programmatisch ab. Liste alle Modelle auf oder rufe Details zu einer bestimmten Modell-ID ab, einschließlich Anzeigename, Beschreibung und Token-Limits.
// 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;
Konfiguration & Optionen
Stelle das Verhalten der Komponente über umfangreiche Konfigurationsoptionen fein ein.
| Eigenschaft | Beschreibung |
|---|---|
GeminiOptions.ApiKey |
Dein Google-Gemini-API-Key (erforderlich) |
HttpOptions.ReadTimeout |
HTTP-Read-Timeout in Millisekunden (Standard: 60000) |
LogOptions.Enabled |
Request-/Response-Logging aktivieren |
LogOptions.FileName |
Pfad zur Log-Datei für Request-/Response-Aufzeichnung |
RetryOptions.Enabled |
Automatisches Retry bei vorübergehenden Fehlern (429, 503) |
RetryOptions.Retries |
Maximale Anzahl an Wiederholungsversuchen (Standard: 3) |
RetryOptions.Wait |
Wartezeit zwischen Versuchen in Millisekunden (Standard: 3000) |
Anfrageparameter
| Parameter | Beschreibung |
|---|---|
Temperature |
Sampling-Temperatur (0,0–2,0). Niedrigere Werte = deterministischer. |
TopP |
Nucleus-Sampling (0,0–1,0). Steuert die kumulative Wahrscheinlichkeitsgrenze. |
TopK |
Top-K-Sampling. Beschränkt die Token-Auswahl auf die Top-K-Kandidaten. |
MaxOutputTokens |
Maximale Anzahl an Tokens in der Antwort (Standard: 4096). |
StopSequences |
Eigene Sequenzen, die die Generierung beim Auftreten stoppen. |
ResponseMimeType |
Ausgabeformat: 'application/json' für JSON, 'text/plain' für Text. |
ToolChoice |
Steuert, wie das Modell aufzurufende Funktionen auswählt. |
