Cliente OpenAI para Delphi — ChatGPT, GPT-4, Embeddings, Whisper
Cliente Delphi nativo para las APIs REST y Realtime de OpenAI. Chat completions con streaming de tokens, function calling y salidas estructuradas; embeddings; speech-to-text con Whisper; TTS; generación de imágenes con DALL-E; Assistants v2 con búsqueda de archivos; y la Realtime API de audio GPT-4o sobre WebSocket — todo desde un único componente Pascal.
Toda la superficie de OpenAI en un único componente
Llamar a la API de ChatGPT desde Delphi solía significar escribir a mano peticiones HTTP, serializadores JSON, subidas multipart y parsers de stream SSE. Suelta un componente en su lugar.
Un cliente OpenAI para Delphi es el puente entre tu aplicación VCL / FMX y la plataforma OpenAI: ChatGPT para razonamiento en lenguaje natural, embeddings para búsqueda semántica y RAG, Whisper para transcripción, TTS para salida hablada, DALL-E para generación de imágenes y la Realtime API para agentes de voz de baja latencia. sgcWebSockets incluye TsgcHTTP_API_OpenAI, un único componente no visual que envuelve cada endpoint público con propiedades, métodos y eventos idiomáticos de Pascal.
Como el componente está construido sobre la misma pila HTTP/2 que el resto de la librería, obtienes streaming de tokens vía Server-Sent Events, function calling completo (ahora “tools”) con marshalling automático de JSON Schema, llamadas de herramientas paralelas, salidas estructuradas (respuestas restringidas por JSON Schema), el ciclo de vida thread/run/message de Assistants v2, vector stores para búsqueda de archivos y la Realtime API de GPT-4o sobre WebSocket con streaming de audio bidireccional. El mismo componente habla con Azure OpenAI, los endpoints compatibles con OpenAI expuestos por Anthropic, Groq, Together, Mistral y DeepSeek, y con servidores locales compatibles con OpenAI (Ollama, LM Studio, vLLM).
Un método por endpoint, parámetros fuertemente tipados, eventos asíncronos para respuestas en streaming.
Chat completions
ChatCompletions() con soporte completo de array de mensajes, roles system / user / assistant / tool, visión (contenido image_url), modelos de razonamiento (o1, o3) y salidas estructuradas por JSON Schema.
Streaming
StreamChatCompletions() dispara OnChatCompletionStreamChunk por cada token delta — UX tipo máquina de escribir en tu grid VCL o text-view FMX con cero código de parseo SSE.
Function calling / tools
Registra una lista de herramientas con parámetros JSON Schema; cuando el modelo llama a una, recibes OnChatCompletionToolCall con los argumentos parseados. Devuelve el resultado y reanuda.
Embeddings
Embeddings() con text-embedding-3-small / -large — la base para búsqueda semántica, clustering y RAG sobre tus datos Pascal.
Whisper (STT)
AudioTranscription() y AudioTranslation() — sube un WAV/MP3/M4A, obtén una transcripción o traducción al inglés, con timestamps y confianza por palabra.
TTS
AudioSpeech() devuelve voz sintetizada en MP3, Opus, AAC o FLAC — elige una voz, reproduce el resultado en streaming.
DALL-E
ImageGeneration(), ImageEdit(), ImageVariation() con DALL-E 2 / 3 y gpt-image-1. Devuelve URLs o PNG codificado en base64.
Assistants v2
Threads, runs, messages, files, vector stores y code interpreter — con los eventos de streaming de runs para que no hagas polling.
Realtime API
WebSocket bidireccional con buffers de audio de entrada/salida, detección de actividad de voz, function calling y latencia GPT-4o — construye agentes de voz que interrumpen de forma natural.
Guía Rápida
Chat en streaming con una herramienta de función
Una llamada a ChatGPT que hace streaming de tokens y puede invocar una función Delphi a mitad de conversación.
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
Agentes de voz GPT-4o sobre WebSocket
La Realtime API de OpenAI es un endpoint WebSocket que acepta un stream de frames de audio de entrada y emite un stream de frames de audio de salida — con latencia por debajo del segundo, barge-in nativo (el modelo deja de hablar cuando el usuario empieza), detección de actividad de voz del lado servidor y la misma superficie de tool-calling que la API REST. sgcWebSockets la envuelve con TsgcHTTP_API_OpenAI_Realtime, que te da eventos tipados para cada mensaje del servidor (OnSessionUpdated, OnConversationItemCreated, OnInputAudioBufferSpeechStarted, OnResponseAudioDelta, etc.) para que puedas conectarlo directamente a TBass, TMediaPlayer o a cualquier cola de audio.
Compatibilidad
Mismo componente, múltiples backends
Azure OpenAI
Establece Endpoint a la URL de tu recurso Azure y ApiKey a la clave del recurso — los deployment IDs reemplazan a los nombres de modelo.
Ollama / LM Studio
Apunta Endpoint a http://localhost:11434/v1 — el mismo componente gobierna modelos locales Llama, Mistral, Qwen y Phi.
DeepSeek, Groq, Together, Mistral
Todos exponen endpoints compatibles con OpenAI; sólo cambian la URL base y la API key.
vLLM, SGLang, llama.cpp server
Servidores de inferencia autoalojados con REST compatible con OpenAI — la ruta de streaming SSE es idéntica byte a byte.