Client API Mistral per Delphi

· Componenti

Mistral AI si è affermata come uno dei principali provider AI europei, offrendo modelli ad alte prestazioni che eccellono in comprensione multilingue, generazione di codice, function calling e output strutturati. Per gli sviluppatori Delphi che vogliono integrare Mistral nelle loro applicazioni, sgcWebSockets fornisce TsgcHTTP_API_Mistral: un componente nativo e completo che incapsula l'intera API Mistral con codice Delphi pulito e type-safe.

Che tu stia costruendo chatbot intelligenti, generando output JSON strutturati, analizzando immagini, creando embeddings per la ricerca semantica o orchestrando workflow con tool, questo componente ti dà accesso diretto a ogni funzionalità di Mistral. Nessun boilerplate REST. Nessuna gestione manuale di JSON. Trascina il componente, imposta la tua API key e inizia a costruire.

Copertura API completa

Ogni funzionalità principale dell'API Mistral è supportata out of the box.

Chat Completions
Invia messaggi con system prompt, ricevi risposte in modo sincrono o in streaming. Controllo completo su temperature, top-p e stop sequence.
Streaming in tempo reale
Riceve le risposte token per token tramite Server-Sent Events. Costruisci UI reattive che mostrano le risposte mentre vengono generate.
Vision
Analizza immagini inviando dati codificati in base64 o URL di immagini insieme a prompt testuali. I modelli Pixtral descrivono, interpretano e ragionano sui contenuti visivi.
Modalità JSON
Costringe Mistral a restituire output JSON valido. Ideale per estrazione dati, risposte strutturate e pipeline di integrazione API.
Uso dei tool — function calling
Definisci tool personalizzati con JSON Schema. Mistral decide quando richiamarli, abilitando workflow agentici multi-step.
Embeddings
Genera embeddings vettoriali di alta qualità. Alimenta sistemi di ricerca semantica, clustering, classificazione e raccomandazione.
Safe Prompt
Abilita i guardrail di sicurezza integrati di Mistral con una sola proprietà. Filtra automaticamente contenuti dannosi o inappropriati.
Gestione dei modelli
Elenca a livello programmatico tutti i modelli Mistral disponibili. Interroga ID, proprietari, date di creazione e capacità dei modelli.
Retry e logging integrati
Retry automatico in caso di guasti transitori con tentativi e intervalli di attesa configurabili. Logging completo di richieste e risposte per il debug.

Per iniziare

Integra Mistral AI nel tuo progetto Delphi in meno di un minuto. Trascina il componente, configura la tua API key e invia il tuo primo messaggio.

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

Due stili di API. Ogni funzionalità offre sia metodi di convenienza (string-based, minimo codice) sia classi tipizzate di request/response (controllo completo, type safety). Scegli l'approccio più adatto al tuo caso d'uso.

Chat Completions e streaming

L'API Chat Completions è il fondamento di ogni interazione con Mistral. Invia testo con system prompt opzionali e ricevi risposte in modo sincrono o in streaming in tempo reale.

System prompt

Controlla il comportamento di Mistral fornendo un system prompt che imposti contesto, personalità o vincoli per la conversazione.

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 in tempo reale

Per interfacce utente reattive, ricevi la risposta di Mistral token per token tramite Server-Sent Events. Assegna l'handler dell'evento OnHTTPAPISSE e richiama _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 tipizzata avanzata

Per il pieno controllo sui parametri della richiesta — temperature, top-p, stop sequence, random seed, safe prompt — usa le classi tipizzate di request e response.

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 — comprensione delle immagini

I modelli Pixtral di Mistral possono analizzare e ragionare sulle immagini. Invia fotografie, screenshot, diagrammi o documenti insieme a un prompt testuale e ricevi descrizioni dettagliate, estrazione dati o domande/risposte visive.

// 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 d'uso. Automatizza l'analisi documentale, estrai dati dai diagrammi, classifica immagini o integra la comprensione visiva nei tuoi workflow — tutto da codice Delphi nativo.

Modalità JSON

Costringe Mistral a restituire output JSON valido e parsabile. La modalità JSON è perfetta per estrazione dati, risposte API strutturate e pipeline di elaborazione automatizzata in cui hai bisogno di output garantito leggibile dalle macchine.

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

Uso dei tool — function calling

Definisci tool personalizzati con JSON Schema e Mistral deciderà quando e come richiamarli. È la base per costruire workflow agentici multi-step che collegano l'IA alla tua logica di business.

// 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 vettoriali di alta qualità per il testo usando i modelli di embedding di Mistral. Gli embeddings alimentano ricerca semantica, clustering di documenti, motori di raccomandazione e attività di classificazione.

// Generate embeddings for a text
var
  vEmbedding: string;
begin
  vEmbedding := Mistral._CreateEmbeddings(
    'mistral-embed',
    'Delphi is a powerful programming language.');
  ShowMessage(vEmbedding);
end;

Per il pieno controllo, usa l'API tipizzata per inviare in batch più input e selezionare il formato di codifica.

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 offre un livello di sicurezza integrato che si abilita con una sola proprietà. Quando SafePrompt è attiva, un system prompt orientato alla sicurezza viene aggiunto automaticamente in testa per filtrare contenuti dannosi o inappropriati.

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

Risultati riproducibili. Imposta RandomSeed a un valore fisso per ottenere output deterministici. Combinato con Temperature := 0, garantisce risposte identiche per lo stesso input — ideale per pipeline di test e validazione.

Gestione dei modelli

Interroga i modelli Mistral disponibili a livello programmatico. Elenca tutti i modelli per scoprire le nuove capacità man mano che diventano disponibili.

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

Configurazione e opzioni

Affina il comportamento del componente con un set completo di opzioni di configurazione.

Proprietà Descrizione
MistralOptions.ApiKey La tua chiave API Mistral (obbligatoria)
HttpOptions.ReadTimeout Timeout di lettura HTTP in millisecondi (default: 60000)
LogOptions.Enabled Abilita il logging di richieste e risposte
RetryOptions.Enabled Retry automatico in caso di guasti transitori
RetryOptions.Retries Numero massimo di tentativi di retry (default: 3)
RetryOptions.Wait Tempo di attesa tra i retry in millisecondi (default: 3000)

Parametri della richiesta

Parametro Descrizione
Temperature Temperatura di campionamento (0.0–2.0). Valori più bassi = più deterministico.
TopP Nucleus sampling (0.0–1.0). Controlla la soglia di probabilità cumulativa.
MaxTokens Numero massimo di token nella risposta (default: 4096).
SafePrompt Abilita i guardrail di sicurezza integrati per il filtraggio dei contenuti.
RandomSeed Seed fisso per output riproducibili. Ideale per i test.
ResponseFormat Imposta a 'json_object' per garantire output JSON.
ToolChoice Controlla la selezione dei tool: 'auto', 'none' o 'required'.

Vantaggio dell'IA europea. Mistral ha sede in Francia e offre inferenza ospitata nell'UE, rendendola una scelta eccellente per le organizzazioni con requisiti europei di residenza dei dati. Combinata con la logica di retry integrata, il logging e l'API type-safe del componente sgcWebSockets, ottieni un'integrazione IA pronta per la produzione con piena conformità normativa.