OpenAI Delphi Client Update

· Features

sgcWebSockets 2026.4.0 bringt eine umfassende Erweiterung der OpenAI-API-Integration mit vollständiger Unterstützung für die neue Responses API (den offiziellen Nachfolger der eingestellten Assistants API), Audio-Speech-Text-to-Speech, die Verwaltung von Fine-Tuning-Jobs, die Batch-API für asynchrone Massenverarbeitung, die Uploads-API für große Dateien und modernisierte Chat Completions mit Tool Calling und Unterstützung für strukturierte Ausgaben. Dieser Artikel behandelt jede neue Methode, ihre Parameter und praktische Delphi-Code-Beispiele.

Inhaltsverzeichnis

  1. Responses API (ersetzt Assistants)
  2. Audio Speech (Text-to-Speech)
  3. Fine-Tuning-Jobs
  4. Updates zu Chat Completions
  5. Batch-API
  6. Uploads-API
Hinweis: Die OpenAI Assistants API wurde eingestellt und soll am 2026-08-26 abgeschaltet werden. Die neue Responses API ist ihr offizieller Nachfolger. Wenn du derzeit die Assistants API über sgcWebSockets nutzt, solltest du beginnen, deinen Code auf die in diesem Artikel behandelte Responses API zu migrieren. Die Responses API bietet eine schlankere, flexiblere Schnittstelle mit eingebautem Tool Use, Dateisuche und Web-Suche.

1. Responses API (ersetzt Assistants)

Die Responses API ist die wichtigste Neuerung in diesem Release. Sie ersetzt die eingestellte Assistants API durch eine schlanke, zustandslose Schnittstelle, die über den Endpunkt /responses erreichbar ist. Alle Methoden stehen in der Komponente TsgcHTTP_API_OpenAI zur Verfügung. Anders als Assistants ist jeder Responses-API-Aufruf ein einziger Round-trip, der Tool-Definitionen, Dateisuche, Web-Suche und strukturierte Ausgaben enthalten kann -- alles in einer Anfrage.

Methoden

Methode Beschreibung Endpunkt
CreateResponse Erzeugt eine neue Modell-Antwort. Nimmt eine Modell-ID und Eingabetext (oder ein strukturiertes Eingabe-Array) entgegen. Gibt die vom Modell generierte Ausgabe inklusive Tool-Calls zurück. POST /responses
RetrieveResponse Holt eine zuvor erstellte Antwort anhand ihrer eindeutigen ID. Nützlich für das Pollen oder Auditieren abgeschlossener Antworten. GET /responses/{response_id}
DeleteResponse Löscht eine gespeicherte Antwort endgültig. Nur anwendbar, wenn bei der Erstellung store: true verwendet wurde. DELETE /responses/{response_id}
CancelResponse Bricht eine laufende Antwort ab. Anwendbar auf Antworten, die im Hintergrundmodus erstellt wurden. POST /responses/{response_id}/cancel
ListInputItems Listet die mit einer Antwort verknüpften Eingabeelemente auf. Nützlich, um den an das Modell gesendeten Konversationskontext zu prüfen. GET /responses/{response_id}/input_items

Delphi-Beispiel

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Create a simple response
    vResponse := OpenAI._CreateResponse('gpt-4o', 'Explain quantum computing');
    ShowMessage(vResponse);
    // Retrieve a previously created response
    vResponse := OpenAI._RetrieveResponse('resp_abc123');
    ShowMessage(vResponse);
    // Delete a stored response
    OpenAI._DeleteResponse('resp_abc123');
  Finally
    OpenAI.Free;
  end;
end;

2. Audio Speech (Text-to-Speech)

Die Audio-Speech-API bietet Text-to-Speech-Funktionen mit den TTS-Modellen von OpenAI. Sie unterstützt zwei Modellstufen: tts-1 für Streaming-Szenarien mit niedriger Latenz und tts-1-hd für höherwertige Ausgaben. Sechs eingebaute Stimmen stehen zur Verfügung: alloy, echo, fable, onyx, nova und shimmer. Die Ausgabe kann in den Formaten mp3, opus, aac, flac, wav oder pcm zurückgegeben werden.

Methods

Methode Beschreibung Endpunkt
CreateSpeech Erzeugt Audio-Speech aus der übergebenen Texteingabe unter Verwendung des angegebenen Modells und der Stimme. Gibt den Audio-Inhalt als binären Stream zurück. POST /audio/speech

Delphi-Beispiel

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vAudioStream: TMemoryStream;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Generate speech using the 'alloy' voice
    oStream := TFileStream.Create('stream.mpeg', fmCreate or fmOpenRead);
    Try
      OpenAI._CreateSpeech('tts-1', 'Hello world', 'alloy', oStream);
    Finally
      oStream.Free;
    End;
    // Generate high-definition speech with 'nova' voice
    oStream := TFileStream.Create('stream.mpeg', fmCreate or fmOpenRead);
    Try
      OpenAI._CreateSpeech('tts-1-hd', 'Welcome to sgcWebSockets.', 'nova', oStream);
    Finally
      oStream.Free;
    End;
  Finally
    OpenAI.Free;
  end;
end;
Hinweis: Das Modell tts-1 ist auf echtzeitnahe Anwendungen mit niedriger Latenz optimiert, während tts-1-hd eine höhere Audio-Qualität bei leicht erhöhter Latenz liefert. Wähle je nach Anforderungen deiner Anwendung.

3. Fine-Tuning-Jobs

Die Fine-Tuning-Jobs-API ersetzt den eingestellten Endpunkt /fine-tunes durch den neuen Endpunkt /fine_tuning/jobs. Sie bietet ein vollständiges Lifecycle-Management für Fine-Tuning-Operationen: Jobs anlegen, aktive und abgeschlossene Jobs auflisten, Details abrufen, laufende Jobs abbrechen und Trainings-Events streamen. Diese API unterstützt das Fine-Tuning von Modellen wie gpt-4o-mini-2024-07-18 mit deinen eigenen Trainingsdaten.

Methods

Methode Beschreibung Endpunkt
CreateFineTuningJob Erzeugt einen neuen Fine-Tuning-Job auf Basis eines angegebenen Basismodells und einer zuvor hochgeladenen Trainingsdatei. Gibt das Job-Objekt mit ID und Status zurück. POST /fine_tuning/jobs
ListFineTuningJobs Listet alle Fine-Tuning-Jobs der Organisation auf, mit Pagination-Unterstützung. Gibt Jobs nach Erstellungsdatum sortiert zurück. GET /fine_tuning/jobs
RetrieveFineTuningJob Holt detaillierte Informationen zu einem bestimmten Fine-Tuning-Job, einschließlich Status, Hyperparametern und Ergebnisdateien. GET /fine_tuning/jobs/{job_id}
CancelFineTuningJob Bricht einen laufenden Fine-Tuning-Job ab. Der Job-Status wechselt auf "cancelled", und es findet kein weiteres Training statt. POST /fine_tuning/jobs/{job_id}/cancel
ListFineTuningJobEvents Listet Status-Events eines Fine-Tuning-Jobs auf, einschließlich Trainings-Loss, Validierungsmetriken und Abschlussstatus. Unterstützt Pagination. GET /fine_tuning/jobs/{job_id}/events

Delphi-Beispiel

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Create a fine-tuning job
    vResponse := OpenAI._CreateFineTuningJob('gpt-4o-mini-2024-07-18', 'file-abc123');
    ShowMessage(vResponse);
    // List all fine-tuning jobs
    vResponse := OpenAI._ListFineTuningJobs;
    ShowMessage(vResponse);
    // Retrieve a specific job
    vResponse := OpenAI._RetrieveFineTuningJob('ftjob-xyz789');
    ShowMessage(vResponse);
    // List events for a job
    vResponse := OpenAI._ListFineTuningJobEvents('ftjob-xyz789');
    ShowMessage(vResponse);
    // Cancel an in-progress job
    OpenAI._CancelFineTuningJob('ftjob-xyz789');
  Finally
    OpenAI.Free;
  end;
end;

4. Updates zu Chat Completions

Die Chat-Completions-API in sgcWebSockets 2026.4.0 wurde mit mehreren neuen Anfrage-Eigenschaften und Antwortfeldern modernisiert. Diese Ergänzungen bringen volle Unterstützung für Tool-/Function-Calling, strukturierte JSON-Ausgaben, deterministische Generierung per Seed und parallele Tool-Ausführung.

Neue Anfrage-Eigenschaften

Eigenschaft Beschreibung Endpunkt
Tools Definiert eine Liste von Tools (Funktionen), die das Modell aufrufen darf. Jedes Tool enthält Name, Beschreibung und ein JSON-Schema für seine Parameter. POST /chat/completions
ToolChoice Steuert, wie das Modell Tools auswählt. Optionen: auto, none, required oder ein konkreter Funktionsname. POST /chat/completions
ResponseFormat Legt das Ausgabeformat fest. Verwende json_object für garantierte JSON-Ausgabe oder json_schema für strukturierte Ausgaben gemäß einem mitgegebenen Schema. POST /chat/completions
Seed Ein ganzzahliger Seed für deterministisches Sampling. Bei gleichem Seed und gleichen Parametern versucht das Modell, dieselbe Ausgabe zu liefern. POST /chat/completions
MaxCompletionTokens Setzt eine Obergrenze für die Anzahl an Tokens, die das Modell in der Antwort erzeugen darf. Ersetzt den älteren Parameter max_tokens. POST /chat/completions
ParallelToolCalls Wenn aktiviert, darf das Modell mehrere Tool-Aufrufe in einer einzigen Antwort ausgeben und parallele Ausführung clientseitig ermöglichen. POST /chat/completions
StreamOptions Konfiguration für Streaming-Antworten. Beinhaltet Optionen wie include_usage, um Token-Nutzungsstatistiken im letzten gestreamten Chunk zu erhalten. POST /chat/completions

Neue Antwortfelder

Feld Beschreibung Endpunkt
ToolCalls Array von Tool-Call-Objekten in der Assistant-Nachricht. Jedes enthält eine ID, einen Funktionsnamen und Argumente für die clientseitige Ausführung. POST /chat/completions
Refusal Enthält die Verweigerungsnachricht des Modells, wenn es eine Anfrage aus Sicherheits- oder Content-Policy-Gründen ablehnt. POST /chat/completions
SystemFingerprint Ein Fingerabdruck, der die zur Erzeugung der Antwort verwendete Backend-Konfiguration repräsentiert. Nützlich, um deterministische Ausgaben bei Verwendung von Seed zu verifizieren. POST /chat/completions

Delphi-Beispiel

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Configure Chat Completions with new properties
    OpenAI.ChatCompletions.Model := 'gpt-4o';
    OpenAI.ChatCompletions.MaxCompletionTokens := 1024;
    OpenAI.ChatCompletions.Seed := 42;
    OpenAI.ChatCompletions.ParallelToolCalls := True;
    OpenAI.ChatCompletions.ResponseFormat := 'json_object';
    // Add a user message and create the completion
    OpenAI.ChatCompletions.AddMessage('user', 'List 3 benefits of Delphi in JSON format.');
    vResponse := OpenAI._CreateChatCompletion;
    ShowMessage(vResponse);
  Finally
    OpenAI.Free;
  end;
end;

5. Batch-API

Mit der Batch-API kannst du große Gruppen von API-Anfragen zur asynchronen Verarbeitung einreichen. Das ist ideal für Workloads, die keine sofortige Antwort brauchen, etwa Massenklassifikation, Embedding-Generierung oder groß angelegte Content-Moderation. Batch-Anfragen werden typischerweise innerhalb von 24 Stunden abgeschlossen und bieten eine Kostenersparnis von 50 % gegenüber synchronen API-Aufrufen. Alle Batch-Methoden stehen in der Komponente TsgcHTTP_API_OpenAI über den Endpunkt /batches zur Verfügung.

Methods

Methode Beschreibung Endpunkt
CreateBatch Erzeugt einen neuen Batch-Job aus einer zuvor hochgeladenen JSONL-Datei mit API-Anfragen. Erfordert die ID der Eingabedatei und den Ziel-Endpunkt. POST /batches
RetrieveBatch Holt den aktuellen Status und die Details eines Batch-Jobs, einschließlich Fortschrittszählern und Verweisen auf Ausgabedateien. GET /batches/{batch_id}
ListBatches Listet alle Batch-Jobs der Organisation auf. Unterstützt Pagination über die Parameter after und limit. GET /batches
CancelBatch Bricht einen laufenden Batch-Job ab. Bereits abgeschlossene Anfragen innerhalb des Batches sind davon nicht betroffen. POST /batches/{batch_id}/cancel

Delphi-Beispiel

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Create a batch job targeting chat completions
    vResponse := OpenAI._CreateBatch('file-abc123', '/v1/chat/completions');
    ShowMessage(vResponse);
    // Check batch status
    vResponse := OpenAI._RetrieveBatch('batch_xyz789');
    ShowMessage(vResponse);
    // List all batches
    vResponse := OpenAI._ListBatches;
    ShowMessage(vResponse);
    // Cancel a batch if needed
    OpenAI._CancelBatch('batch_xyz789');
  Finally
    OpenAI.Free;
  end;
end;
Hinweis: Die Eingabedatei für CreateBatch muss eine JSONL-Datei sein, die über die Files-API mit dem Zweck batch hochgeladen wurde. Jede Zeile in der Datei steht für eine einzelne API-Anfrage mit einer eigenen ID, Methode, URL und einem Body.

6. Uploads-API

Die Uploads-API ermöglicht das Hochladen großer Dateien in mehreren Teilen, was unverzichtbar ist, wenn Dateien das Limit für Einzel-Uploads (üblicherweise 512 MB) überschreiten. Der Ablauf umfasst das Anlegen einer Upload-Sitzung, das sukzessive Hinzufügen von Parts und schließlich das Abschließen des Uploads, womit du ein File-Objekt erhältst, das du mit anderen API-Endpunkten verwenden kannst. Alle Methoden stehen in der Komponente TsgcHTTP_API_OpenAI über den Endpunkt /uploads zur Verfügung.

Methods

Methode Beschreibung Endpunkt
CreateUpload Startet eine neue Multipart-Upload-Sitzung. Erfordert Dateiname, Zweck, Gesamtbytes und MIME-Typ. Gibt ein Upload-Objekt mit eindeutiger ID zurück. POST /uploads
AddUploadPart Fügt einen Datei-Chunk einem laufenden Upload hinzu. Die Parts müssen sequenziell hinzugefügt werden und jeder Part liefert eine Part-ID, die für das Abschließen benötigt wird. POST /uploads/{upload_id}/parts
CompleteUpload Schließt den Multipart-Upload ab, indem die geordnete Liste der Part-IDs übergeben wird. Gibt das finale File-Objekt zurück, das mit anderen APIs nutzbar ist. POST /uploads/{upload_id}/complete
CancelUpload Bricht eine laufende Upload-Sitzung ab. Bereits hochgeladene Parts werden verworfen und die Upload-ID wird ungültig. POST /uploads/{upload_id}/cancel

Delphi-Beispiel

var
  OpenAI: TsgcHTTP_API_OpenAI;
  vUploadResponse: String;
  vPartResponse: String;
  vCompleteResponse: String;
begin
  OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
  Try
    OpenAI.OpenAIOptions.ApiKey := 'sk-your-api-key';
    // Step 1: Create an upload session
    vUploadResponse := OpenAI._CreateUpload(
      'training_data.jsonl', 'fine-tune', 104857600, 'application/jsonl');
    ShowMessage(vUploadResponse);
    // Step 2: Add file parts
    vPartResponse := OpenAI._AddUploadPart('upload_abc123', 'C:\data\part1.jsonl');
    ShowMessage(vPartResponse);
    vPartResponse := OpenAI._AddUploadPart('upload_abc123', 'C:\data\part2.jsonl');
    ShowMessage(vPartResponse);
    // Step 3: Complete the upload
    vCompleteResponse := OpenAI._CompleteUpload('upload_abc123',
      '["part_def456", "part_ghi789"]');
    ShowMessage(vCompleteResponse);
  Finally
    OpenAI.Free;
  end;
end;
Hinweis: Upload-Sitzungen laufen nach einer Stunde Inaktivität ab. Jeder Part sollte mindestens 5 MB groß sein (außer dem letzten Part), und Parts müssen in der Reihenfolge hinzugefügt werden, in der sie zusammengefügt werden sollen. Die maximale Upload-Gesamtgröße beträgt 8 GB.