Cliente Gemini API para Delphi

· Componentes
Cliente Gemini API para Delphi

Google Gemini es una de las familias de modelos de IA multimodal más potentes disponibles hoy en día, destacando en generación de texto, comprensión de imágenes, salidas estructuradas y function calling en una amplia variedad de casos de uso. Para los desarrolladores Delphi que quieran integrar Gemini en sus aplicaciones, sgcWebSockets proporciona TsgcHTTP_API_Gemini — un componente nativo y completo que envuelve toda la superficie de la API de Google Gemini.

Ya estés construyendo asistentes conversacionales, generando datos estructurados, procesando imágenes, creando embeddings para búsqueda semántica u orquestando workflows aumentados con herramientas, este componente te da acceso directo a cada funcionalidad de Gemini a través de código Delphi limpio y con tipos seguros. Sin boilerplate REST. Sin pelearse con JSON. Sólo coloca el componente, configura tu API key y empieza a construir.

Cobertura completa de la API

Todas las funcionalidades principales de la API de Google Gemini están soportadas de serie.

Generación de contenido
Genera texto a partir de prompts con instrucciones de sistema opcionales. Afina la salida con temperature, top-p, top-k y stop sequences.
Streaming en tiempo real
Recibe las respuestas token a token usando Server-Sent Events. Construye interfaces responsivas que muestren las respuestas a medida que se generan.
Visión
Analiza imágenes enviando datos codificados en base64 junto con un prompt de texto. Gemini describe, interpreta y razona sobre contenido visual.
Salida JSON estructurada
Obliga a Gemini a devolver JSON válido conforme a tu schema. Configura un MIME type y schema de respuesta para garantizar resultados parseables.
Function calling
Define funciones a medida con JSON Schema. Gemini decide cuándo invocarlas, habilitando workflows agénticos de varios pasos.
Embeddings
Genera embeddings vectoriales para texto. Alimenta búsqueda semántica, clustering, clasificación y sistemas de recomendación.
Conteo de tokens
Cuenta tokens antes de enviar peticiones. Estima costes con precisión y gestiona el presupuesto de ventana de contexto.
Gestión de modelos
Lista todos los modelos Gemini disponibles o recupera detalles de uno concreto, incluidos los límites de tokens de entrada/salida.
Retry y logging integrados
Retry automático ante fallos transitorios con intentos e intervalos de espera configurables. Logging completo de petición/respuesta para depurar.

Primeros pasos

Integra Google Gemini en tu proyecto Delphi en menos de un minuto. Coloca el componente, configura tu API key y envía tu primer mensaje.

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

Dos estilos de API. Cada funcionalidad ofrece métodos de conveniencia (basados en strings, código mínimo) y clases de petición/respuesta tipadas (control total, seguridad de tipos). Elige el enfoque que mejor se adapte a tu caso de uso.

Generación de contenido y streaming

La API GenerateContent es la base de toda interacción con Gemini. Envía texto con instrucciones de sistema opcionales y recibe respuestas síncronamente o en streaming en tiempo real.

Instrucciones de sistema

Controla el comportamiento de Gemini proporcionando una instrucción de sistema que establezca el contexto, la personalidad o las restricciones de la conversación.

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 tiempo real

Para interfaces de usuario responsivas, recibe la respuesta de Gemini token a token usando Server-Sent Events. Asigna el manejador de evento OnHTTPAPISSE y llama a _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 tipada avanzada

Para control total sobre los parámetros de la petición — temperature, top-p, top-k, stop sequences, max output tokens — usa las clases tipadas de petición y respuesta.

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;

Visión — comprensión de imágenes

Gemini es nativamente multimodal. Envía fotografías, capturas de pantalla, diagramas o gráficos junto con un prompt de texto y recibe descripciones detalladas, extracción de datos o Q&A visual.

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

Caso de uso. Automatiza inspecciones de calidad, genera texto alternativo para accesibilidad, extrae datos de gráficos o construye funciones de búsqueda visual — todo desde código Delphi nativo.

Salida JSON estructurada

Garantiza que Gemini devuelva JSON válido y parseable conforme a tu schema exacto. Configura un MIME type y schema de respuesta para eliminar el post-procesado — la respuesta está lista para deserializarse directamente en tus records de 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;

Aplicación del schema. Configurando ResponseMimeType a 'application/json' y proporcionando un ResponseSchema, Gemini garantiza una salida estructuralmente válida en todo momento.

Function calling

Define funciones a medida con JSON Schema y Gemini decidirá cuándo y cómo invocarlas. Ésta es la base para construir workflows agénticos de varios pasos que conecten la IA con tu lógica de negocio.

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

Genera embeddings vectoriales de alta calidad para texto. Los embeddings alimentan búsqueda semántica, clustering de documentos, motores de recomendación y tareas de clasificación.

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

Para control total, usa la API tipada para acceder al array de valores brutos del 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;

Conteo de tokens

Estima costes y gestiona el presupuesto de ventana de contexto con precisión antes de enviar peticiones.

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

Gestión de modelos

Consulta los modelos Gemini disponibles por código. Lista todos los modelos o recupera detalles de un modelo concreto, incluido nombre, descripción y límites 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;

Configuración y opciones

Afina el comportamiento del componente con opciones de configuración completas.

Propiedad Descripción
GeminiOptions.ApiKey tu API key de Google Gemini (obligatorio)
HttpOptions.ReadTimeout timeout de lectura HTTP en milisegundos (por defecto: 60000)
LogOptions.Enabled habilita el logging de petición/respuesta
LogOptions.FileName ruta del archivo de log para capturar peticiones/respuestas
RetryOptions.Enabled retry automático ante fallos transitorios (429, 503)
RetryOptions.Retries número máximo de intentos de retry (por defecto: 3)
RetryOptions.Wait tiempo de espera entre retries en milisegundos (por defecto: 3000)

Parámetros de la petición

Parámetro Descripción
Temperature temperatura de sampling (0.0–2.0). Valores más bajos = más determinista.
TopP nucleus sampling (0.0–1.0). Controla el corte de probabilidad acumulada.
TopK top-K sampling. Limita la selección de tokens a los K candidatos principales.
MaxOutputTokens número máximo de tokens en la respuesta (por defecto: 4096).
StopSequences secuencias personalizadas que detienen la generación al encontrarse.
ResponseMimeType formato de salida: 'application/json' para JSON, 'text/plain' para texto.
ToolChoice controla cómo el modelo selecciona las funciones a llamar.

Relacionado