sgcWebSockets 2026.4.0 对 OpenAI API 集成进行了重大扩展,全面支持新的 Responses API(已弃用 Assistants API 的官方替代方案)、音频语音文本转语音(Audio Speech)、微调作业(Fine-Tuning Jobs)管理、用于异步批量处理的 Batch API、用于大文件处理的 Uploads API,以及支持工具调用和结构化输出的现代化聊天补全功能。本文涵盖了每个新方法、其参数以及实用的 Delphi 代码示例。
目录
注意:OpenAI Assistants API 已被弃用,计划于 2026-08-26 停止服务。新的 Responses API 是其官方替代方案。如果您目前正在通过 sgcWebSockets 使用 Assistants API,应开始将代码迁移到本文介绍的 Responses API。Responses API 提供更简单、更灵活的接口,内置工具使用、文件搜索和网页搜索功能。1. Responses API(替代 Assistants)
Responses API 是本次版本中最重要的新增内容。它通过 /responses 端点提供简化的无状态接口,替代了已弃用的 Assistants API。所有方法均在 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. 音频语音(文本转语音)
音频语音 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. 微调作业
微调作业 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 |
取消进行中的微调作业。作业状态更改为"已取消",不再进行训练。 | 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. 聊天补全更新
sgcWebSockets 2026.4.0 中的聊天补全 API 通过多个新请求属性和响应字段进行了现代化升级。这些新增内容全面支持工具/函数调用、结构化 JSON 输出、通过种子值实现确定性生成以及并行工具执行。
新请求属性
| 属性 | 描述 | 端点 |
|---|---|---|
Tools |
定义模型可能调用的工具(函数)列表。每个工具包含名称、描述和参数的 JSON Schema。 | POST /chat/completions |
ToolChoice |
控制模型选择工具的方式。选项:auto、none、required 或特定函数名称。 |
POST /chat/completions |
ResponseFormat |
指定输出格式。使用 json_object 保证 JSON 输出,或使用 json_schema 使输出符合提供的 schema。 |
POST /chat/completions |
Seed |
用于确定性采样的整数种子值。使用相同的种子和参数时,模型会尝试产生相同的输出。 | POST /chat/completions |
MaxCompletionTokens |
设置模型在响应中可生成的 token 数量上限。替代旧的 max_tokens 参数。 |
POST /chat/completions |
ParallelToolCalls |
启用后,模型可以在单个响应中发出多个工具调用,允许客户端并行执行。 | POST /chat/completions |
StreamOptions |
流式响应的配置。包括 include_usage 等选项,可在最终流式块中接收 token 使用统计信息。 |
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 的输入文件必须是通过 Files API 上传的 JSONL 文件,用途为 batch。文件中的每行代表一个 API 请求,包含自定义 ID、方法、URL 和请求体。
6. Uploads API
Uploads API 支持分多部分上传大文件,这对于处理超过单次请求上传限制(通常为 512 MB)的文件至关重要。工作流程包括创建上传会话、依序添加分片,然后完成上传以获取可与其他 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;
注意:上传会话在闲置一小时后过期。每个分片应至少为 5 MB(最后一个分片除外),且必须按照拼接顺序添加分片。最大总上传大小为 8 GB。
