Client API Delphi Gemini

· Composants

Google Gemini est l'une des familles de modèles IA multimodaux les plus puissantes disponibles aujourd'hui, excellant dans la génération de texte, la compréhension d'images, les sorties structurées et l'appel de fonctions sur une large gamme de cas d'usage. Pour les développeurs Delphi qui cherchent à intégrer Gemini dans leurs applications, sgcWebSockets fournit TsgcHTTP_API_Gemini — un composant natif complet qui encapsule toute la surface de l'API Google Gemini.

Que tu construises des assistants conversationnels, génères des données structurées, traites des images, crées des embeddings pour la recherche sémantique ou orchestres des workflows augmentés par des outils, ce composant te donne un accès direct à chaque fonctionnalité de Gemini via du code Delphi propre et typé. Pas de code REST répétitif. Pas de manipulation JSON. Il te suffit de poser le composant, de définir ta clé API et de commencer à construire.

Couverture complète de l'API

Chaque fonctionnalité majeure de l'API Google Gemini est prise en charge nativement.

Génération de contenu
Génère du texte à partir de prompts avec des instructions système optionnelles. Affine la sortie avec temperature, top-p, top-k et stop sequences.
Streaming en temps réel
Diffuse les réponses token par token via Server-Sent Events. Construis des interfaces réactives qui affichent les réponses au fur et à mesure de leur génération.
Vision
Analyse des images en envoyant des données encodées en base64 avec un prompt texte. Gemini décrit, interprète et raisonne sur le contenu visuel.
Sortie JSON structurée
Force Gemini à renvoyer du JSON valide conforme à ton schéma. Définis un type MIME de réponse et un schéma pour des résultats parseables garantis.
Appel de fonctions
Définis des fonctions personnalisées avec JSON Schema. Gemini décide quand les invoquer, ce qui permet des workflows agentiques en plusieurs étapes.
Embeddings
Génère des embeddings vectoriels pour du texte. Alimente la recherche sémantique, le clustering, la classification et les systèmes de recommandation.
Comptage de tokens
Compte les tokens avant d'envoyer des requêtes. Estime précisément les coûts et gère les budgets de fenêtre de contexte.
Gestion des modèles
Liste tous les modèles Gemini disponibles ou récupère les détails d'un modèle spécifique, y compris les limites de tokens d'entrée/sortie.
Réessai et journalisation intégrés
Réessai automatique en cas d'échecs transitoires avec nombre de tentatives et intervalles d'attente configurables. Journalisation complète des requêtes/réponses pour le débogage.

Premiers pas

Intègre Google Gemini dans ton projet Delphi en moins d'une minute. Pose le composant, configure ta clé API et envoie ton premier message.

// 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;

Deux styles d'API. Chaque fonctionnalité propose à la fois des méthodes pratiques (basées sur des chaînes, code minimal) et des classes typées de requête/réponse (contrôle total, sécurité de typage). Choisis l'approche qui convient le mieux à ton cas d'usage.

Génération de contenu et streaming

L'API GenerateContent est le fondement de chaque interaction avec Gemini. Envoie du texte avec des instructions système optionnelles et reçois des réponses de manière synchrone ou en streaming temps réel.

Instructions système

Contrôle le comportement de Gemini en fournissant une instruction système qui définit le contexte, la personnalité ou les contraintes de la conversation.

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."

Streaming en temps réel

Pour des interfaces utilisateur réactives, diffuse la réponse de Gemini token par token via Server-Sent Events. Assigne le gestionnaire d'événements OnHTTPAPISSE et appelle _CreateContentStream.

// 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;

API typée avancée

Pour un contrôle total sur les paramètres de la requête — temperature, top-p, top-k, stop sequences, max output tokens — utilise les classes typées de requête et de réponse.

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 — compréhension des images

Gemini est nativement multimodal. Envoie des photographies, captures d'écran, diagrammes ou graphiques en parallèle d'un prompt texte et reçois des descriptions détaillées, l'extraction de données ou du Q&R visuel.

// 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;

Cas d'usage. Automatise l'inspection qualité, génère du texte alt pour l'accessibilité, extrais des données de graphiques ou construis des fonctionnalités de recherche visuelle — le tout depuis du code Delphi natif.

Sortie JSON structurée

Garantis que Gemini renvoie du JSON valide et parseable conforme à ton schéma exact. Définis un type MIME de réponse et un schéma pour éliminer le post-traitement — la réponse est prête à être désérialisée directement dans tes records Delphi.

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;

Application du schéma. En définissant ResponseMimeType à 'application/json' et en fournissant un ResponseSchema, Gemini garantit une sortie structurellement valide à chaque fois.

Appel de fonctions

Définis des fonctions personnalisées avec JSON Schema, et Gemini décidera quand et comment les invoquer. C'est la base pour construire des workflows agentiques en plusieurs étapes qui connectent l'IA à ta logique métier.

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

Génère des embeddings vectoriels de haute qualité pour du texte. Les embeddings alimentent la recherche sémantique, le clustering de documents, les moteurs de recommandation et les tâches de classification.

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

Pour un contrôle total, utilise l'API typée pour accéder au tableau brut de valeurs d'embedding.

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;

Comptage de tokens

Estime les coûts et gère précisément les budgets de fenêtre de contexte avant d'envoyer des requêtes.

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

Gestion des modèles

Interroge les modèles Gemini disponibles par programme. Liste tous les modèles ou récupère les détails d'un ID de modèle spécifique, y compris le nom d'affichage, la description et les limites de tokens.

// 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;

Configuration et options

Affine le comportement du composant avec des options de configuration complètes.

Propriété Description
GeminiOptions.ApiKey Ta clé API Google Gemini (obligatoire)
HttpOptions.ReadTimeout Délai de lecture HTTP en millisecondes (par défaut : 60000)
LogOptions.Enabled Active la journalisation des requêtes/réponses
LogOptions.FileName Chemin du fichier journal pour la capture des requêtes/réponses
RetryOptions.Enabled Réessai automatique en cas d'échecs transitoires (429, 503)
RetryOptions.Retries Nombre maximum de tentatives de réessai (par défaut : 3)
RetryOptions.Wait Temps d'attente entre les réessais en millisecondes (par défaut : 3000)

Paramètres de requête

Paramètre Description
Temperature Température d'échantillonnage (0.0–2.0). Des valeurs plus basses = plus déterministe.
TopP Échantillonnage nucleus (0.0–1.0). Contrôle le seuil de probabilité cumulative.
TopK Échantillonnage Top-K. Limite la sélection de tokens aux K meilleurs candidats.
MaxOutputTokens Nombre maximum de tokens dans la réponse (par défaut : 4096).
StopSequences Séquences personnalisées qui arrêtent la génération quand elles sont rencontrées.
ResponseMimeType Format de sortie : 'application/json' pour JSON, 'text/plain' pour du texte.
ToolChoice Contrôle comment le modèle sélectionne les fonctions à appeler.