OpenAI Delphi 客户端更新

· 功能

sgcWebSockets 2026.4.0 对 OpenAI API 集成进行了重大扩展,全面支持新的 Responses API(已弃用 Assistants API 的官方替代方案)、音频语音文本转语音(Audio Speech)、微调作业(Fine-Tuning Jobs)管理、用于异步批量处理的 Batch API、用于大文件处理的 Uploads API,以及支持工具调用和结构化输出的现代化聊天补全功能。本文涵盖了每个新方法、其参数以及实用的 Delphi 代码示例。

目录

  1. Responses API(替代 Assistants)
  2. 音频语音(文本转语音)
  3. 微调作业
  4. 聊天补全更新
  5. Batch API
  6. Uploads API
注意: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(提供更高质量的输出)。提供六种内置声音:alloyechofableonyxnovashimmer。输出格式可以是 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 控制模型选择工具的方式。选项:autononerequired 或特定函数名称。 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 列出组织的所有批量作业。通过 afterlimit 参数支持分页。 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。