sgcWebSockets 2026.4.0은 OpenAI API 통합을 크게 확장해, 새로운 Responses API(폐기된 Assistants API의 공식 대체), Audio Speech 텍스트 음성 변환, Fine-Tuning Jobs 관리, 비동기 대량 처리를 위한 Batch API, 대용량 파일 처리를 위한 Uploads API, 그리고 도구 호출 및 구조화된 출력 지원이 포함된 현대화된 Chat Completions를 완벽하게 지원해요. 이 글에서는 모든 새 메서드, 매개변수, 실용적인 Delphi 코드 예제를 다뤄요.
목차
- Responses API(Assistants 대체)
- Audio Speech(텍스트 음성 변환)
- 파인튜닝 작업
- Chat Completions 업데이트
- Batch API
- Uploads API
1. Responses API(Assistants 대체)
Responses API는 이번 릴리스에서 가장 중요한 추가 사항이에요. 폐기된 Assistants API를 /responses 엔드포인트를 통해 노출되는 간소화되고 상태 비저장인 인터페이스로 대체해요. 모든 메서드는 TsgcHTTP_API_OpenAI 컴포넌트에서 사용할 수 있어요. Assistants와 달리, 각 Responses API 호출은 도구 정의, 파일 검색, 웹 검색, 구조화된 출력을 모두 한 요청에 포함할 수 있는 단일 왕복이에요.
메서드
| 메서드 | 설명 | 엔드포인트 |
|---|---|---|
CreateResponse |
새 모델 응답을 생성해요. 모델 식별자와 입력 텍스트(또는 구조화된 입력 배열)를 받아요. 도구 호출을 포함한 모델 생성 출력을 반환해요. | POST /responses |
RetrieveResponse |
고유 ID로 이전에 생성된 응답을 가져와요. 완료된 응답을 폴링하거나 감사하는 데 유용해요. | GET /responses/{response_id} |
DeleteResponse |
저장된 응답을 영구적으로 삭제해요. 생성 시 store: true를 사용한 경우에만 적용 가능해요. |
DELETE /responses/{response_id} |
CancelResponse |
진행 중인 응답을 취소해요. 백그라운드 모드로 생성된 응답에 적용 가능해요. | POST /responses/{response_id}/cancel |
ListInputItems |
응답과 연관된 입력 항목을 나열해요. 모델에 전송된 대화 컨텍스트를 검사하는 데 유용해요. | GET /responses/{response_id}/input_items |
Delphi 예제
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(텍스트 음성 변환)
Audio Speech API는 OpenAI의 TTS 모델을 사용해 텍스트 음성 변환 기능을 제공해요. 두 가지 모델 등급을 지원해요: 저지연 스트리밍 사용 사례를 위한 tts-1과 더 높은 품질의 출력을 위한 tts-1-hd. 여섯 가지 내장 음성을 사용할 수 있어요: alloy, echo, fable, onyx, nova, shimmer. 출력은 mp3, opus, aac, flac, wav, pcm 형식으로 반환할 수 있어요.
메서드
| 메서드 | 설명 | 엔드포인트 |
|---|---|---|
CreateSpeech |
지정된 모델과 음성을 사용해 제공된 텍스트 입력에서 음성 오디오를 생성해요. 오디오 콘텐츠를 바이너리 스트림으로 반환해요. | POST /audio/speech |
Delphi 예제
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;
참고: tts-1 모델은 실시간, 저지연 애플리케이션에 최적화되어 있는 반면, tts-1-hd는 약간 증가된 지연 시간 대신 더 높은 오디오 충실도를 제공해요. 애플리케이션 요구 사항에 따라 선택하세요.
3. 파인튜닝 작업
Fine-Tuning Jobs API는 폐기된 /fine-tunes 엔드포인트를 새로운 /fine_tuning/jobs 엔드포인트로 대체해요. 파인튜닝 작업에 대한 완전한 라이프사이클 관리를 제공해요: 작업 생성, 활성 및 완료된 작업 나열, 세부 정보 검색, 진행 중인 작업 취소, 학습 이벤트 스트리밍. 이 API는 자체 학습 데이터를 사용해 gpt-4o-mini-2024-07-18 같은 모델의 파인튜닝을 지원해요.
메서드
| 메서드 | 설명 | 엔드포인트 |
|---|---|---|
CreateFineTuningJob |
지정된 기본 모델과 이전에 업로드된 학습 파일을 사용해 새 파인튜닝 작업을 생성해요. ID와 상태가 포함된 작업 객체를 반환해요. | POST /fine_tuning/jobs |
ListFineTuningJobs |
조직의 모든 파인튜닝 작업을 페이지네이션 지원과 함께 나열해요. 생성 날짜순으로 정렬된 작업을 반환해요. | GET /fine_tuning/jobs |
RetrieveFineTuningJob |
상태, 하이퍼파라미터, 결과 파일을 포함한 특정 파인튜닝 작업에 대한 자세한 정보를 가져와요. | GET /fine_tuning/jobs/{job_id} |
CancelFineTuningJob |
진행 중인 파인튜닝 작업을 취소해요. 작업 상태가 "cancelled"로 변경되고 더 이상의 학습이 발생하지 않아요. | POST /fine_tuning/jobs/{job_id}/cancel |
ListFineTuningJobEvents |
학습 손실, 검증 지표, 완료 상태를 포함한 파인튜닝 작업의 상태 이벤트를 나열해요. 페이지네이션을 지원해요. | GET /fine_tuning/jobs/{job_id}/events |
Delphi 예제
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. Chat Completions 업데이트
sgcWebSockets 2026.4.0의 Chat Completions API는 여러 새 요청 속성과 응답 필드로 현대화됐어요. 이러한 추가 사항은 도구/함수 호출, 구조화된 JSON 출력, 시드를 통한 결정론적 생성, 병렬 도구 실행을 완벽하게 지원해요.
새 요청 속성
| 속성 | 설명 | 엔드포인트 |
|---|---|---|
Tools |
모델이 호출할 수 있는 도구(함수) 목록을 정의해요. 각 도구는 이름, 설명, 매개변수에 대한 JSON Schema를 포함해요. | POST /chat/completions |
ToolChoice |
모델이 도구를 선택하는 방식을 제어해요. 옵션: auto, none, required, 또는 특정 함수 이름이에요. |
POST /chat/completions |
ResponseFormat |
출력 형식을 지정해요. 보장된 JSON 출력에는 json_object를, 제공된 스키마를 따르는 구조화된 출력에는 json_schema를 사용하세요. |
POST /chat/completions |
Seed |
결정론적 샘플링을 위한 정수 시드예요. 같은 시드와 매개변수가 사용되면, 모델은 같은 출력을 생성하려고 시도해요. | POST /chat/completions |
MaxCompletionTokens |
모델이 응답에서 생성할 수 있는 토큰 수의 상한을 설정해요. 이전 max_tokens 매개변수를 대체해요. |
POST /chat/completions |
ParallelToolCalls |
활성화하면 모델이 단일 응답에서 여러 도구 호출을 발행할 수 있어, 클라이언트 측에서 병렬 실행이 가능해요. | POST /chat/completions |
StreamOptions |
스트리밍 응답에 대한 설정이에요. 최종 스트리밍 청크에서 토큰 사용 통계를 받기 위한 include_usage 같은 옵션을 포함해요. |
POST /chat/completions |
새 응답 필드
| 필드 | 설명 | 엔드포인트 |
|---|---|---|
ToolCalls |
어시스턴트 메시지의 도구 호출 객체 배열이에요. 각각 클라이언트 측 실행을 위한 ID, 함수 이름, 인수를 포함해요. | POST /chat/completions |
Refusal |
안전 또는 콘텐츠 정책 제약으로 인해 요청 수행을 거부할 때 모델의 거부 메시지를 포함해요. | POST /chat/completions |
SystemFingerprint |
응답 생성에 사용된 백엔드 설정을 나타내는 지문이에요. Seed를 사용할 때 결정론적 출력을 검증하는 데 유용해요. |
POST /chat/completions |
Delphi 예제
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를 사용하면 비동기 처리를 위해 대규모 API 요청 그룹을 보낼 수 있어요. 대량 분류, 임베딩 생성, 대규모 콘텐츠 모더레이션처럼 즉각적인 응답이 필요하지 않은 워크로드에 이상적이에요. 배치 요청은 일반적으로 24시간 이내에 완료되며, 동기 API 호출에 비해 50% 비용 절감을 제공해요. 모든 배치 메서드는 /batches 엔드포인트를 통해 TsgcHTTP_API_OpenAI 컴포넌트에서 사용할 수 있어요.
메서드
| 메서드 | 설명 | 엔드포인트 |
|---|---|---|
CreateBatch |
API 요청을 포함한 이전에 업로드된 JSONL 파일에서 새 배치 작업을 생성해요. 입력 파일 ID와 대상 엔드포인트가 필요해요. | POST /batches |
RetrieveBatch |
진행 카운트와 출력 파일 참조를 포함한 배치 작업의 현재 상태와 세부 정보를 가져와요. | GET /batches/{batch_id} |
ListBatches |
조직의 모든 배치 작업을 나열해요. after와 limit 매개변수를 통한 페이지네이션을 지원해요. |
GET /batches |
CancelBatch |
진행 중인 배치 작업을 취소해요. 배치 내 이미 완료된 요청은 영향을 받지 않아요. | POST /batches/{batch_id}/cancel |
Delphi 예제
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;
참고: CreateBatch의 입력 파일은 용도 batch로 Files API를 통해 업로드된 JSONL 파일이어야 해요. 파일의 각 줄은 맞춤 ID, 메서드, URL, 본문을 가진 단일 API 요청을 나타내요.
6. Uploads API
Uploads API를 사용하면 대용량 파일을 여러 파트로 업로드할 수 있으며, 단일 요청 업로드 제한(일반적으로 512MB)을 초과하는 파일을 작업할 때 필수예요. 워크플로우는 업로드 세션 생성, 파트를 순차적으로 추가, 그런 다음 업로드를 완료해 다른 API 엔드포인트에서 사용할 수 있는 File 객체를 받는 것이에요. 모든 메서드는 /uploads 엔드포인트를 통해 TsgcHTTP_API_OpenAI 컴포넌트에서 사용할 수 있어요.
메서드
| 메서드 | 설명 | 엔드포인트 |
|---|---|---|
CreateUpload |
새 멀티파트 업로드 세션을 시작해요. 파일명, 용도, 총 바이트 수, MIME 타입이 필요해요. 고유 ID를 가진 업로드 객체를 반환해요. | POST /uploads |
AddUploadPart |
진행 중인 업로드에 파일 데이터 청크를 추가해요. 파트는 순차적으로 추가해야 하며 각 파트는 완료에 필요한 파트 ID를 반환해요. | POST /uploads/{upload_id}/parts |
CompleteUpload |
순서가 지정된 파트 ID 목록을 제공해 멀티파트 업로드를 완료해요. 다른 API에서 사용할 수 있는 최종 File 객체를 반환해요. |
POST /uploads/{upload_id}/complete |
CancelUpload |
진행 중인 업로드 세션을 취소해요. 업로드된 모든 파트는 폐기되고 업로드 ID는 무효가 돼요. | POST /uploads/{upload_id}/cancel |
Delphi 예제
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;
참고: 업로드 세션은 1시간 동안 비활성 상태가 지속되면 만료돼요. 각 파트는 최소 5MB여야 하며(마지막 파트 제외), 파트는 연결할 순서대로 추가해야 해요. 최대 총 업로드 크기는 8GB예요.
