OpenAI Delphi Client Update

· Funkcje

sgcWebSockets 2026.4.0 wprowadza znaczącą rozbudowę integracji z API OpenAI, zapewniając pełne wsparcie dla nowego Responses API (oficjalnego zamiennika przestarzałego Assistants API), syntezę mowy Audio Speech, zarządzanie zadaniami dostrajania (Fine-Tuning Jobs), Batch API do asynchronicznego przetwarzania masowego, Uploads API do obsługi dużych plików oraz zaktualizowane uzupełniania konwersacji (Chat Completions) z obsługą wywoływania narzędzi i strukturyzowanych wyników. Ten artykuł omawia każdą nową metodę, jej parametry i praktyczne przykłady kodu Delphi.

Spis treści

  1. Responses API (zastępuje Assistants)
  2. Audio Speech (synteza mowy)
  3. Zadania dostrajania (Fine-Tuning Jobs)
  4. Aktualizacje uzupełnień konwersacji
  5. Batch API
  6. Uploads API
Uwaga: API Assistants OpenAI zostało wycofane i zaplanowane do zamknięcia w dniu 26 sierpnia 2026. Nowe Responses API jest jego oficjalnym zamiennikiem. Jeśli aktualnie używasz Assistants API przez sgcWebSockets, powinieneś rozpocząć migrację kodu do Responses API opisanego w tym artykule. Responses API oferuje prostszy, bardziej elastyczny interfejs z wbudowanym wywoływaniem narzędzi, wyszukiwaniem plików i możliwościami wyszukiwania w internecie.

1. Responses API (zastępuje Assistants)

Responses API to najważniejsze nowe funkcjonalność w tym wydaniu. Zastępuje przestarzałe Assistants API uproszczonym, bezstanowym interfejsem udostępnionym przez punkt końcowy /responses. Wszystkie metody są dostępne w komponencie TsgcHTTP_API_OpenAI. W odróżnieniu od Assistants, każde wywołanie Responses API to pojedyncza wymiana, która może zawierać definicje narzędzi, wyszukiwanie plików, wyszukiwanie w internecie i strukturyzowane wyniki — wszystko w jednym żądaniu.

Methods

Metoda Opis Endpoint
CreateResponse Tworzy nową odpowiedź modelu. Przyjmuje identyfikator modelu i tekst wejściowy (lub tablicę strukturyzowaną). Zwraca wygenerowane dane wyjściowe modelu, w tym wywołania narzędzi. POST /responses
RetrieveResponse Pobiera wcześniej utworzoną odpowiedź na podstawie jej unikalnego ID. Przydatne do odpytywania lub audytu zakończonych odpowiedzi. GET /responses/{response_id}
DeleteResponse Trwale usuwa zapisaną odpowiedź. Dotyczy tylko odpowiedzi utworzonych z store: true. DELETE /responses/{response_id}
CancelResponse Anuluje odpowiedź w trakcie przetwarzania. Dotyczy odpowiedzi utworzonych w trybie w tle. POST /responses/{response_id}/cancel
ListInputItems Listuje elementy wejściowe powiązane z odpowiedzią. Przydatne do sprawdzania kontekstu konwersacji wysłanego do modelu. GET /responses/{response_id}/input_items

Delphi Example

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 (synteza mowy)

Audio Speech API zapewnia możliwości syntezy mowy przy użyciu modeli TTS OpenAI. Obsługuje dwa poziomy modeli: tts-1 dla zastosowań streamingowych o niskim opóźnieniu i tts-1-hd dla wyższej jakości dźwięku. Dostępnych jest sześć wbudowanych głosów: alloy, echo, fable, onyx, nova i shimmer. Wynik można zwrócić w formacie mp3, opus, aac, flac, wav lub pcm.

Methods

Metoda Opis Endpoint
CreateSpeech Generuje mowę z podanego tekstu wejściowego przy użyciu określonego modelu i głosu. Zwraca zawartość audio jako strumień binarny. POST /audio/speech

Delphi Example

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;
Uwaga: Model tts-1 jest zoptymalizowany pod kątem aplikacji w czasie rzeczywistym o niskim opóźnieniu, podczas gdy tts-1-hd zapewnia wyższą wierność dźwięku kosztem nieznacznie większego opóźnienia. Wybierz w zależności od wymagań aplikacji.

3. Zadania dostrajania

Fine-Tuning Jobs API zastępuje przestarzały punkt końcowy /fine-tunes nowym /fine_tuning/jobs. Zapewnia pełne zarządzanie cyklem życia operacji dostrajania: tworzenie zadań, listowanie aktywnych i zakończonych zadań, pobieranie szczegółów, anulowanie zadań w trakcie i strumieniowanie zdarzeń treningowych. To API obsługuje dostrajanie modeli takich jak gpt-4o-mini-2024-07-18 przy użyciu własnych danych treningowych.

Methods

Metoda Opis Endpoint
CreateFineTuningJob Tworzy nowe zadanie dostrajania przy użyciu określonego modelu bazowego i wcześniej przesłanego pliku treningowego. Zwraca obiekt zadania z jego ID i statusem. POST /fine_tuning/jobs
ListFineTuningJobs Listuje wszystkie zadania dostrajania dla organizacji z obsługą paginacji. Zwraca zadania posortowane według daty utworzenia. GET /fine_tuning/jobs
RetrieveFineTuningJob Pobiera szczegółowe informacje o określonym zadaniu dostrajania, w tym status, hiperparametry i pliki wynikowe. GET /fine_tuning/jobs/{job_id}
CancelFineTuningJob Anuluje zadanie dostrajania w trakcie realizacji. Status zadania zmienia się na „anulowane" i nie następuje dalsze trenowanie. POST /fine_tuning/jobs/{job_id}/cancel
ListFineTuningJobEvents Listuje zdarzenia statusu dla zadania dostrajania, w tym stratę treningową, metryki walidacji i status ukończenia. Obsługuje paginację. GET /fine_tuning/jobs/{job_id}/events

Delphi Example

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. Aktualizacje uzupełnień konwersacji

API uzupełnień konwersacji w sgcWebSockets 2026.4.0 zostało zmodernizowane o kilka nowych właściwości żądań i pól odpowiedzi. Zmiany te zapewniają pełne wsparcie dla wywoływania narzędzi/funkcji, strukturyzowanych wyników JSON, deterministycznego generowania za pomocą ziaren (seeds) i równoległego wykonywania narzędzi.

Nowe właściwości żądań

Właściwość Opis Endpoint
Tools Definiuje listę narzędzi (funkcji), które model może wywołać. Każde narzędzie zawiera nazwę, opis i schemat JSON dla parametrów. POST /chat/completions
ToolChoice Kontroluje, jak model wybiera narzędzia. Opcje: auto, none, required lub konkretna nazwa funkcji. POST /chat/completions
ResponseFormat Określa format danych wyjściowych. Użyj json_object dla gwarantowanego wyjścia JSON lub json_schema dla strukturyzowanego wyjścia zgodnego z podanym schematem. POST /chat/completions
Seed Liczba całkowita jako ziarno dla deterministycznego próbkowania. Gdy użyto tych samych ziarna i parametrów, model próbuje wygenerować te same dane wyjściowe. POST /chat/completions
MaxCompletionTokens Ustawia górną granicę liczby tokenów, które model może wygenerować w odpowiedzi. Zastępuje starszy parametr max_tokens. POST /chat/completions
ParallelToolCalls Po włączeniu model może wydać wiele wywołań narzędzi w jednej odpowiedzi, umożliwiając równoległe wykonywanie po stronie klienta. POST /chat/completions
StreamOptions Konfiguracja odpowiedzi strumieniowych. Zawiera opcje takie jak include_usage do odbierania statystyk użycia tokenów w ostatnim strumieniowanym fragmencie. POST /chat/completions

Nowe pola odpowiedzi

Pole Opis Endpoint
ToolCalls Tablica obiektów wywołania narzędzi w wiadomości asystenta. Każdy zawiera ID, nazwę funkcji i argumenty do wykonania po stronie klienta. POST /chat/completions
Refusal Zawiera komunikat odmowy modelu, gdy ten odrzuca spełnienie żądania ze względu na ograniczenia bezpieczeństwa lub zasady treści. POST /chat/completions
SystemFingerprint Odcisk reprezentujący konfigurację backendu użytą do wygenerowania odpowiedzi. Przydatny do weryfikacji deterministycznego wyjścia przy użyciu Seed. POST /chat/completions

Delphi Example

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

Batch API umożliwia wysyłanie dużych grup żądań API do przetwarzania asynchronicznego. Jest idealny dla obciążeń, które nie wymagają natychmiastowych odpowiedzi, takich jak klasyfikacja masowa, generowanie osadzeń lub moderowanie treści na dużą skalę. Żądania wsadowe zazwyczaj kończą się w ciągu 24 godzin i oferują 50% obniżkę kosztów w porównaniu do synchronicznych wywołań API. Wszystkie metody wsadowe są dostępne w komponencie TsgcHTTP_API_OpenAI przez punkt końcowy /batches.

Methods

Metoda Opis Endpoint
CreateBatch Tworzy nowe zadanie wsadowe z wcześniej przesłanego pliku JSONL zawierającego żądania API. Wymaga ID pliku wejściowego i docelowego punktu końcowego. POST /batches
RetrieveBatch Pobiera bieżący status i szczegóły zadania wsadowego, w tym liczniki postępu i odniesienia do plików wynikowych. GET /batches/{batch_id}
ListBatches Listuje wszystkie zadania wsadowe dla organizacji. Obsługuje paginację przez parametry after i limit. GET /batches
CancelBatch Anuluje zadanie wsadowe w trakcie realizacji. Już zakończone żądania w ramach partii nie są zmieniane. POST /batches/{batch_id}/cancel

Delphi Example

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;
Uwaga: Plik wejściowy dla CreateBatch musi być plikiem JSONL przesłanym przez Files API z celem batch. Każda linia pliku reprezentuje jedno żądanie API z niestandardowym ID, metodą, adresem URL i treścią.

6. Uploads API

Uploads API umożliwia przesyłanie dużych plików w wielu częściach, co jest niezbędne podczas pracy z plikami przekraczającymi limit jednorazowego przesyłania (zazwyczaj 512 MB). Przepływ pracy obejmuje tworzenie sesji przesyłania, dodawanie części sekwencyjnie, a następnie kończenie przesyłania w celu otrzymania obiektu File, którego można używać z innymi punktami końcowymi API. Wszystkie metody są dostępne w komponencie TsgcHTTP_API_OpenAI przez punkt końcowy /uploads.

Methods

Metoda Opis Endpoint
CreateUpload Inicjuje nową wieloczęściową sesję przesyłania. Wymaga nazwy pliku, celu, całkowitej liczby bajtów i typu MIME. Zwraca obiekt przesyłania z unikalnym ID. POST /uploads
AddUploadPart Dodaje fragment danych pliku do trwającego przesyłania. Części muszą być dodawane sekwencyjnie, a każda część zwraca ID potrzebne do ukończenia. POST /uploads/{upload_id}/parts
CompleteUpload Kończy wieloczęściowe przesyłanie, podając uporządkowaną listę ID części. Zwraca ostateczny obiekt File, który można używać z innymi API. POST /uploads/{upload_id}/complete
CancelUpload Anuluje trwającą sesję przesyłania. Wszystkie przesłane części są odrzucane, a ID przesyłania staje się nieważne. POST /uploads/{upload_id}/cancel

Delphi Example

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;
Uwaga: Sesje przesyłania wygasają po godzinie braku aktywności. Każda część powinna mieć co najmniej 5 MB (z wyjątkiem ostatniej), a części muszą być dodawane w kolejności, w jakiej powinny być łączone. Maksymalny całkowity rozmiar przesyłania wynosi 8 GB.