Un client Delphi nativo per le API REST e Realtime di OpenAI. Chat completion con streaming dei token, function calling e structured output; embeddings; Whisper speech-to-text; TTS; generazione di immagini con DALL-E; Assistants v2 con file search; e la Realtime API audio di GPT-4o su WebSocket — il tutto da un singolo componente Pascal.
Chiamare l'API ChatGPT da Delphi significava scrivere a mano le richieste HTTP, i serializer JSON, gli uploader multipart e i parser di stream SSE. Inserisci invece un solo componente.
Un client OpenAI Delphi è il ponte tra la tua applicazione VCL / FMX e la piattaforma OpenAI: ChatGPT per il ragionamento in linguaggio naturale, embeddings per la ricerca semantica e il RAG, Whisper per la trascrizione, TTS per l'output vocale, DALL-E per la generazione di immagini e la Realtime API per agenti vocali a bassa latenza. sgcWebSockets distribuisce TsgcHTTP_API_OpenAI, un singolo componente non visuale che incapsula ogni endpoint pubblico con proprietà, metodi ed eventi idiomatici Pascal.
Poiché il componente è costruito sullo stesso stack HTTP/2 del resto della libreria, ottieni lo streaming dei token via Server-Sent Events, il function calling completo (ora “tools”) con marshalling automatico dello JSON schema, chiamate di tool parallele, structured output (response vincolate da JSON schema), il ciclo di vita thread/run/message di Assistants v2, i vector store per la file search e la Realtime API di GPT-4o su WebSocket con streaming audio bidirezionale. Lo stesso componente parla con Azure OpenAI, con gli endpoint compatibili OpenAI esposti da Anthropic, Groq, Together, Mistral e DeepSeek, e con server locali compatibili OpenAI (Ollama, LM Studio, vLLM).
Un metodo per endpoint, parametri fortemente tipizzati, eventi async per le risposte in streaming.
Chat completion
ChatCompletions() con supporto completo dell'array di messaggi, ruoli system / user / assistant / tool, vision (contenuto image_url), modelli di reasoning (o1, o3) e structured output con JSON schema.
Streaming
StreamChatCompletions() solleva OnChatCompletionStreamChunk per ogni token delta — UX a macchina da scrivere nella tua grid VCL o text-view FMX con zero codice di parsing SSE.
Function calling / tools
Registra una lista di tool con parametri JSON schema; quando il modello ne chiama uno, ricevi OnChatCompletionToolCall con gli argomenti già parsati. Restituisci il risultato e riprendi.
Embeddings
Embeddings() con text-embedding-3-small / -large — la base per ricerca semantica, clustering e RAG sui tuoi dati Pascal.
Whisper (STT)
AudioTranscription() e AudioTranslation() — carica un WAV/MP3/M4A, ottieni una trascrizione o una traduzione in inglese, con timestamp e confidenza a livello di parola.
TTS
AudioSpeech() restituisce voce sintetizzata in MP3, Opus, AAC o FLAC — scegli una voce, riproduci il risultato in streaming.
DALL-E
ImageGeneration(), ImageEdit(), ImageVariation() con DALL-E 2 / 3 e gpt-image-1. Restituisce URL o PNG codificato in base64.
Assistants v2
Thread, run, messaggi, file, vector store e code interpreter — con eventi di streaming dei run, così non devi fare polling.
Realtime API
WebSocket bidirezionale con buffer audio in input/output, voice activity detection, function calling e latenza di GPT-4o — costruisci agenti vocali che interrompono in modo naturale.
Guida Rapida
Chat in streaming con un function tool
Una chiamata ChatGPT che fa lo streaming dei token e può invocare una funzione Delphi a metà conversazione.
uses
sgcHTTP_API_OpenAI, sgcHTTP_API_OpenAI_Types;
var
OpenAI: TsgcHTTP_API_OpenAI;
oChat: TsgcHTTPOpenAIChatCompletionRequest;
oTool: TsgcHTTPOpenAITool;
begin
OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
OpenAI.ApiKey := 'sk-...';
OpenAI.OnChatCompletionStreamChunk := DoChunk;
OpenAI.OnChatCompletionToolCall := DoToolCall;
oChat := TsgcHTTPOpenAIChatCompletionRequest.Create;
try
oChat.Model := 'gpt-4o';
oChat.Messages.AddSystem('You are a Delphi assistant.');
oChat.Messages.AddUser('What is the weather in Madrid?');
oTool := oChat.Tools.AddFunction('get_weather',
'Return current weather for a city.');
oTool.Parameters
.AddString('city', 'City name', True);
OpenAI.StreamChatCompletions(oChat);
finally
oChat.Free;
end;
end;
procedure TForm1.DoChunk(Sender: TObject;
const aChunk: TsgcHTTPOpenAIChatCompletionStreamChunk);
begin
Memo1.Text := Memo1.Text + aChunk.Content;
end;
procedure TForm1.DoToolCall(Sender: TObject;
const aToolCall: TsgcHTTPOpenAIChatCompletionToolCall);
var
vCity, vJSON: string;
beginif aToolCall.FunctionName = 'get_weather'thenbegin
vCity := aToolCall.Arguments.S['city'];
vJSON := MyWeatherLookup(vCity); // your own Delphi code
OpenAI.SubmitToolOutput(aToolCall.Id, vJSON);
end;
end;
Realtime API
Agenti vocali GPT-4o su WebSocket
La Realtime API di OpenAI è un endpoint WebSocket che accetta uno stream di frame audio in input ed emette uno stream di frame audio in output — con latenza inferiore al secondo, barge-in nativo (il modello si ferma quando l'utente inizia a parlare), voice activity detection lato server e la stessa superficie di tool-calling della REST API. sgcWebSockets la incapsula con TsgcHTTP_API_OpenAI_Realtime, che ti dà eventi tipizzati per ogni messaggio del server (OnSessionUpdated, OnConversationItemCreated, OnInputAudioBufferSpeechStarted, OnResponseAudioDelta, ecc.), così puoi collegarla direttamente a TBass, TMediaPlayer o a qualunque coda audio.
Compatibilità
Stesso componente, più backend
Azure OpenAI
Imposta Endpoint sull'URL della tua risorsa Azure e ApiKey sulla chiave della risorsa — gli ID di deployment sostituiscono i nomi dei modelli.
Ollama / LM Studio
Punta Endpoint a http://localhost:11434/v1 — lo stesso componente pilota i modelli locali Llama, Mistral, Qwen e Phi.
DeepSeek, Groq, Together, Mistral
Tutti espongono endpoint compatibili OpenAI; cambiano solo l'URL base e la API key.
vLLM, SGLang, llama.cpp server
Server di inferenza self-hosted con REST compatibile OpenAI — il path streaming SSE è identico byte per byte.