Ein nativer Delphi-Client für die OpenAI-REST- und -Realtime-APIs. Chat-Completions mit Token-Streaming, Function Calling und Structured Outputs; Embeddings; Whisper-Speech-to-Text; TTS; DALL-E-Bildgenerierung; Assistants v2 mit File Search; und die GPT-4o-Realtime-Audio-API über WebSocket — alles aus einer einzigen Pascal-Komponente.
Die komplette OpenAI-Oberfläche in einer Komponente
Die ChatGPT-API aus Delphi aufzurufen hieß bisher: HTTP-Requests, JSON-Serialisierer, Multipart-Uploader und SSE-Stream-Parser selbst schreiben. Stattdessen eine Komponente reinziehen.
Ein Delphi-OpenAI-Client ist die Brücke zwischen deiner VCL-/FMX-Anwendung und der OpenAI-Plattform: ChatGPT für natürlichsprachliches Reasoning, Embeddings für semantische Suche und RAG, Whisper für Transkription, TTS für gesprochene Ausgabe, DALL-E für Bildgenerierung und die Realtime-API für latenzarme Voice-Agents. sgcWebSockets liefert TsgcHTTP_API_OpenAI — eine einzige nichtvisuelle Komponente, die jeden öffentlichen Endpunkt mit Pascal-idiomatischen Eigenschaften, Methoden und Events umschließt.
Weil die Komponente auf demselben HTTP/2-Stack aufsetzt wie der Rest der Bibliothek, bekommst du Token-Streaming per Server-Sent Events, vollständiges Function Calling (jetzt „Tools“) mit automatischem JSON-Schema-Marshalling, parallele Tool-Calls, Structured Outputs (JSON-Schema-eingegrenzte Antworten), den Thread-/Run-/Message-Lebenszyklus von Assistants v2, Vector Stores für File Search sowie die GPT-4o-Realtime-API über WebSocket mit bidirektionalem Audio-Streaming. Dieselbe Komponente spricht mit Azure OpenAI, mit den OpenAI-kompatiblen Endpunkten von Anthropic, Groq, Together, Mistral und DeepSeek und mit lokalen OpenAI-kompatiblen Servern (Ollama, LM Studio, vLLM).
Eine Methode pro Endpunkt, streng typisierte Parameter, asynchrone Events für Streaming-Antworten.
Chat-Completions
ChatCompletions() mit voller Message-Array-Unterstützung, System-/User-/Assistant-/Tool-Rollen, Vision (image_url-Content), Reasoning-Modellen (o1, o3) und JSON-Schema-Structured-Outputs.
Streaming
StreamChatCompletions() löst OnChatCompletionStreamChunk pro Delta-Token aus — Schreibmaschinen-UX in deinem VCL-Grid oder FMX-Text-View ohne eine einzige Zeile SSE-Parsing.
Function Calling / Tools
Registriere eine Liste von Tools mit JSON-Schema-Parametern; wenn das Modell eines aufruft, bekommst du OnChatCompletionToolCall mit den geparsten Argumenten. Push das Ergebnis zurück und fahre fort.
Embeddings
Embeddings() mit text-embedding-3-small / -large — die Grundlage für semantische Suche, Clustering und RAG über deine Pascal-Daten.
Whisper (STT)
AudioTranscription() und AudioTranslation() — lade WAV/MP3/M4A hoch, erhalte ein Transkript oder eine englische Übersetzung, mit Zeitstempeln und Word-Level-Confidence.
TTS
AudioSpeech() liefert synthetisierte Sprache als MP3, Opus, AAC oder FLAC zurück — Stimme wählen, Ergebnis streamen.
DALL-E
ImageGeneration(), ImageEdit(), ImageVariation() mit DALL-E 2 / 3 und gpt-image-1. Liefert URLs oder Base64-kodierte PNGs zurück.
Assistants v2
Threads, Runs, Messages, Files, Vector Stores und Code Interpreter — mit den Run-Streaming-Events, sodass du nicht pollen musst.
Realtime-API
Bidirektionaler WebSocket mit Input-/Output-Audio-Puffern, Voice Activity Detection, Function Calling und GPT-4o-Latenz — baue Voice-Agents, die natürlich unterbrechen.
Schnellstart
Streaming-Chat mit Function-Tool
Ein ChatGPT-Aufruf, der Tokens streamt und mitten in der Konversation eine Delphi-Funktion aufrufen kann.
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
GPT-4o-Voice-Agents über WebSocket
Die OpenAI-Realtime-API ist ein WebSocket-Endpunkt, der einen Strom von Input-Audio-Frames akzeptiert und einen Strom von Output-Audio-Frames emittiert — mit Sub-Sekunden-Latenz, nativer Barge-In-Funktion (das Modell schweigt, sobald der Nutzer zu sprechen beginnt), serverseitiger Voice Activity Detection und derselben Tool-Calling-Oberfläche wie die REST-API. sgcWebSockets umhüllt sie mit TsgcHTTP_API_OpenAI_Realtime und liefert typisierte Events für jede Server-Nachricht (OnSessionUpdated, OnConversationItemCreated, OnInputAudioBufferSpeechStarted, OnResponseAudioDelta usw.), sodass du es direkt in TBass, TMediaPlayer oder jede Audio-Queue stecken kannst.
Kompatibilität
Dieselbe Komponente, mehrere Backends
Azure OpenAI
Setze Endpoint auf deine Azure-Ressourcen-URL und ApiKey auf den Ressourcen-Schlüssel — Deployment-IDs ersetzen Modellnamen.
Ollama / LM Studio
Zeige Endpoint auf http://localhost:11434/v1 — dieselbe Komponente steuert lokale Llama-, Mistral-, Qwen- und Phi-Modelle.
DeepSeek, Groq, Together, Mistral
Alle bieten OpenAI-kompatible Endpunkte; nur Basis-URL und API-Key ändern sich.
vLLM, SGLang, llama.cpp-Server
Selbstgehostete Inferenz-Server mit OpenAI-kompatibler REST — der Streaming-SSE-Pfad ist byte-identisch.