Cliente API Mistral en Delphi

· Componentes

Mistral AI se ha consolidado como uno de los principales proveedores europeos de IA, ofreciendo modelos de alto rendimiento que destacan en comprensión multilingüe, generación de código, function calling y salidas estructuradas. Para los desarrolladores Delphi que quieren integrar Mistral en sus aplicaciones, sgcWebSockets proporciona TsgcHTTP_API_Mistral — un componente completo y nativo que envuelve toda la API de Mistral con código Delphi limpio y con seguridad de tipos.

Tanto si estás creando chatbots inteligentes, generando salidas JSON estructuradas, analizando imágenes, creando embeddings para búsqueda semántica u orquestando flujos de trabajo aumentados con herramientas, este componente te da acceso directo a todas las características de Mistral. Sin boilerplate REST. Sin lidiar con JSON. Solo tienes que añadir el componente, configurar tu API key y empezar a construir.

Cobertura completa de la API

Todas las características principales de la API de Mistral están soportadas de serie.

Chat Completions
Envía mensajes con prompts de sistema y recibe respuestas síncronas o en streaming. Control total sobre temperatura, top-p y secuencias de parada.
Streaming en tiempo real
Recibe las respuestas token a token mediante Server-Sent Events. Construye interfaces responsivas que muestran las respuestas a medida que se generan.
Vision
Analiza imágenes enviando datos codificados en base64 o URLs de imagen junto con prompts de texto. Los modelos Pixtral describen, interpretan y razonan sobre contenido visual.
Modo JSON
Obliga a Mistral a devolver una salida JSON válida. Ideal para extracción de datos, respuestas estructuradas y pipelines de integración con APIs.
Tool Use — Function Calling
Define herramientas personalizadas con JSON Schema. Mistral decide cuándo invocarlas, permitiendo flujos de trabajo agénticos en varios pasos.
Embeddings
Genera embeddings vectoriales de alta calidad. Impulsa búsqueda semántica, clustering, clasificación y sistemas de recomendación.
Safe Prompt
Activa con una sola propiedad las barreras de seguridad integradas de Mistral. Filtra automáticamente contenido dañino o inapropiado.
Gestión de modelos
Lista por código todos los modelos de Mistral disponibles. Consulta IDs, propietarios, fechas de creación y capacidades.
Reintentos y logging integrados
Reintento automático ante fallos transitorios con número de intentos e intervalos de espera configurables. Logging completo de petición/respuesta para depurar.

Primeros pasos

Integra Mistral AI en tu proyecto Delphi en menos de un minuto. Añade el componente, configura tu API key y envía tu primer mensaje.

// Create the component and configure the API key
var
  Mistral: TsgcHTTP_API_Mistral;
  vResponse: string;
begin
  Mistral := TsgcHTTP_API_Mistral.Create(nil);
  Try
    Mistral.MistralOptions.ApiKey := 'YOUR_API_KEY';
    // Send a simple message to Mistral
    vResponse := Mistral._CreateMessage(
      'mistral-large-latest', 'Hello, Mistral!');
    ShowMessage(vResponse);
  Finally
    Mistral.Free;
  End;
end;

Dos estilos de API. Cada característica ofrece métodos de conveniencia (basados en strings, con código mínimo) y clases de request/response tipadas (control total y seguridad de tipos). Elige el enfoque que mejor encaje con tu caso de uso.

Chat Completions y Streaming

La API de Chat Completions es la base de cualquier interacción con Mistral. Envía texto con prompts de sistema opcionales y recibe respuestas síncronas o en streaming en tiempo real.

Prompts de sistema

Controla el comportamiento de Mistral aportando un prompt de sistema que establezca el contexto, la personalidad o las restricciones de la conversación.

vResponse := Mistral._CreateMessageWithSystem(
  'mistral-large-latest',
  '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 Mistral token a token mediante Server-Sent Events. Asigna el manejador del evento OnHTTPAPISSE y llama a _CreateMessageStream.

// Enable streaming via SSE
Mistral.OnHTTPAPISSE := OnSSEEvent;
Mistral._CreateMessageStream('mistral-large-latest',
  'Explain the theory of relativity.');
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 tener control total sobre los parámetros de la petición — temperatura, top-p, secuencias de parada, random seed, safe prompt — utiliza las clases de request y response tipadas.

var
  oRequest: TsgcMistralClass_Request_ChatCompletion;
  oMessage: TsgcMistralClass_Request_Message;
  oResponse: TsgcMistralClass_Response_ChatCompletion;
begin
  oRequest := TsgcMistralClass_Request_ChatCompletion.Create;
  Try
    oRequest.Model := 'mistral-large-latest';
    oRequest.MaxTokens := 2048;
    oRequest.Temperature := 0.7;
    oRequest.TopP := 0.9;
    oRequest.SafePrompt := True;
    oRequest.RandomSeed := 42;
    oMessage := TsgcMistralClass_Request_Message.Create;
    oMessage.Role := 'user';
    oMessage.Content := 'Explain quantum computing in simple terms.';
    oRequest.Messages.Add(oMessage);
    oResponse := Mistral.CreateMessage(oRequest);
    Try
      if Length(oResponse.Choices) > 0 then
        ShowMessage(oResponse.Choices[0].Message.Content);
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Vision — Comprensión de imágenes

Los modelos Pixtral de Mistral pueden analizar y razonar sobre imágenes. Envía fotografías, capturas, diagramas o documentos junto con un prompt de texto y recibe descripciones detalladas, extracción de datos o Q&A visual.

// Load an image and ask Mistral to analyze it
var
  vBase64: string;
begin
  vBase64 := sgcBase64Encode(LoadFileToBytes('architecture-diagram.png'));
  ShowMessage(Mistral._CreateVisionMessage(
    'pixtral-large-latest',
    'Describe the architecture shown in this diagram.',
    vBase64, 'image/png'));
end;

Caso de uso. Automatiza análisis de documentos, extrae datos de diagramas, clasifica imágenes o integra comprensión visual en tus flujos de trabajo — todo desde código Delphi nativo.

Modo JSON

Obliga a Mistral a devolver una salida JSON válida y parseable. El modo JSON es perfecto para extracción de datos, respuestas estructuradas de API y pipelines de procesamiento automatizado donde necesitas una salida garantizada y legible por máquina.

// Generate structured JSON output
vResponse := Mistral._CreateMessageJSON(
  'mistral-large-latest',
  'Extract the name, age, and city from: John is 30, lives in Madrid.');
// Returns: {"name": "John", "age": 30, "city": "Madrid"}
// Using the typed API for JSON mode
oRequest.ResponseFormat := 'json_object';

Tool Use — Function Calling

Define herramientas personalizadas con JSON Schema y Mistral decidirá cuándo y cómo invocarlas. Es la base para crear flujos de trabajo agénticos en varios pasos que conectan la IA con tu lógica de negocio.

// Define a tool with JSON Schema
oTool := TsgcMistralClass_Request_Tool.Create;
oTool.FunctionName := 'get_weather';
oTool.FunctionDescription := 'Get the current weather in a location';
oTool.FunctionParameters :=
  '{"type":"object","properties":{"location":{"type":"string",' +
  '"description":"City and country"}},"required":["location"]}';
oRequest.Tools.Add(oTool);
oRequest.ToolChoice := 'auto';
oResponse := Mistral.CreateMessage(oRequest);
// Check if Mistral wants to call a tool
if oResponse.Choices[0].FinishReason = 'tool_calls' then
begin
  for i := 0 to Length(oResponse.Choices[0].Message.ToolCalls) - 1 do
  begin
    vToolId   := oResponse.Choices[0].Message.ToolCalls[i].Id;
    vFuncName := oResponse.Choices[0].Message.ToolCalls[i].FunctionCall.Name;
    vFuncArgs := oResponse.Choices[0].Message.ToolCalls[i].FunctionCall.Arguments;
    // Execute the tool and return the result
  end;
end;

Embeddings

Genera embeddings vectoriales de alta calidad para texto utilizando los modelos de embeddings de Mistral. Los embeddings impulsan 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 := Mistral._CreateEmbeddings(
    'mistral-embed',
    'Delphi is a powerful programming language.');
  ShowMessage(vEmbedding);
end;

Para tener control total, utiliza la API tipada para agrupar varias entradas y seleccionar el formato de codificación.

var
  oRequest: TsgcMistralClass_Request_Embeddings;
  oResponse: TsgcMistralClass_Response_Embeddings;
begin
  oRequest := TsgcMistralClass_Request_Embeddings.Create;
  Try
    oRequest.Model := 'mistral-embed';
    oRequest.Input.Add('First document to embed');
    oRequest.Input.Add('Second document to embed');
    oRequest.EncodingFormat := 'float';
    oResponse := Mistral.CreateEmbeddings(oRequest);
    Try
      ShowMessage('Embeddings: ' + IntToStr(Length(oResponse.Data)));
      ShowMessage('Tokens used: ' + IntToStr(oResponse.Usage.TotalTokens));
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Safe Prompt

Mistral ofrece una capa de seguridad integrada que se activa con una sola propiedad. Cuando SafePrompt está habilitado, se antepone automáticamente un prompt de sistema orientado a seguridad para filtrar contenido dañino o inapropiado.

// Enable safety guardrails
oRequest.SafePrompt := True;

Resultados reproducibles. Asigna a RandomSeed un valor fijo para obtener salidas deterministas. Combinado con Temperature := 0, esto garantiza respuestas idénticas ante la misma entrada — ideal para pipelines de pruebas y validación.

Gestión de modelos

Consulta los modelos de Mistral disponibles por código. Lista todos los modelos para descubrir nuevas capacidades a medida que se publican.

// List all available Mistral models
vModels := Mistral._GetModels;
// Typed API: access model properties directly
var
  oModels: TsgcMistralClass_Response_Models;
  i: Integer;
begin
  oModels := Mistral.GetModels;
  Try
    for i := 0 to Length(oModels.Data) - 1 do
      Memo1.Lines.Add(oModels.Data[i].Id + ' (by ' +
        oModels.Data[i].OwnedBy + ')');
  Finally
    oModels.Free;
  End;
end;

Configuración y opciones

Ajusta con precisión el comportamiento del componente mediante un completo conjunto de opciones de configuración.

Propiedad Descripción
MistralOptions.ApiKey Tu API key de Mistral (obligatoria)
HttpOptions.ReadTimeout Timeout de lectura HTTP en milisegundos (por defecto: 60000)
LogOptions.Enabled Activa el logging de petición/respuesta
RetryOptions.Enabled Reintento automático ante fallos transitorios
RetryOptions.Retries Número máximo de reintentos (por defecto: 3)
RetryOptions.Wait Tiempo de espera entre reintentos en milisegundos (por defecto: 3000)

Parámetros de petición

Parámetro Descripción
Temperature Temperatura de muestreo (0,0–2,0). Valores más bajos = más determinista.
TopP Muestreo nucleus (0,0–1,0). Controla el corte de probabilidad acumulada.
MaxTokens Número máximo de tokens en la respuesta (por defecto: 4096).
SafePrompt Activa las barreras de seguridad integradas para filtrar contenido.
RandomSeed Semilla fija para salidas reproducibles. Ideal para pruebas.
ResponseFormat Establécelo a 'json_object' para garantizar una salida JSON.
ToolChoice Controla la selección de herramienta: 'auto', 'none' o 'required'.

Ventaja de la IA europea. Mistral tiene su sede en Francia y ofrece inferencia alojada en la UE, lo que la convierte en una excelente elección para organizaciones con requisitos europeos de residencia de datos. Combinado con la lógica de reintento integrada, el logging y la API con seguridad de tipos del componente de sgcWebSockets, obtienes una integración de IA lista para producción con cumplimiento normativo completo.