过去从 Delphi 调用 ChatGPT API 意味着手工编写 HTTP 请求、JSON 序列化器、多部分上传器和 SSE 流解析器。现在只需放置一个组件。
Delphi OpenAI 客户端是您的 VCL / FMX 应用程序与 OpenAI 平台之间的桥梁:用于自然语言推理的 ChatGPT、用于语义搜索和 RAG 的嵌入、用于转录的 Whisper、用于语音输出的 TTS、用于图像生成的 DALL-E 以及用于低延迟语音代理的 Realtime API。sgcWebSockets 提供 TsgcHTTP_API_OpenAI,一个单一的非可视组件,使用 Pascal 习惯的属性、方法和事件包装每个公共端点。
由于该组件构建在与库其余部分相同的 HTTP/2 栈之上,您可以获得通过 Server-Sent Events 的 token 流式传输、带自动 JSON 模式封送的完整函数调用(现在称为"工具")、并行工具调用、结构化输出(受 JSON 模式约束的响应)、Assistants v2 线程/运行/消息生命周期、用于文件搜索的向量存储以及通过 WebSocket 的 GPT-4o Realtime API(带双向音频流)。同一组件可与 Azure OpenAI、Anthropic、Groq、Together、Mistral 和 DeepSeek 公开的 OpenAI 兼容端点以及本地 OpenAI 兼容服务器(Ollama、LM Studio、vLLM)通信。
TsgcHTTP_API_OpenAI
HTTP/2 + SSE 流式传输 + WebSocket(Realtime)
Windows、macOS、Linux、iOS、Android、.NET
OpenAI、Azure OpenAI、Ollama、DeepSeek、Groq、Together、Mistral、vLLM
每个端点一个方法,强类型参数,用于流式响应的异步事件。
带完整消息数组支持的 ChatCompletions(),支持系统/用户/助手/工具角色、视觉(image_url 内容)、推理模型(o1、o3)和 JSON 模式结构化输出。
StreamChatCompletions() 为每个 delta token 触发 OnChatCompletionStreamChunk——在您的 VCL 网格或 FMX 文本视图中实现打字机式 UX,无需 SSE 解析代码。
注册一个带 JSON 模式参数的工具列表;当模型调用某个工具时,您将收到带解析参数的 OnChatCompletionToolCall。将结果推回并恢复。
带 text-embedding-3-small / -large 的 Embeddings()——在您的 Pascal 数据上进行语义搜索、聚类和 RAG 的基础。
AudioTranscription() 和 AudioTranslation()——上传 WAV/MP3/M4A,获得带时间戳和词级置信度的转录或英文翻译。
AudioSpeech() 返回 MP3、Opus、AAC 或 FLAC 格式的合成语音——选择声音,流式播放结果。
带 DALL-E 2 / 3 和 gpt-image-1 的 ImageGeneration()、ImageEdit()、ImageVariation()。返回 URL 或 base64 编码的 PNG。
线程、运行、消息、文件、向量存储和代码解释器——带运行流式事件,无需轮询。
带输入/输出音频缓冲区、语音活动检测、函数调用和 GPT-4o 延迟的双向 WebSocket——构建可自然打断的语音代理。
一个流式传输 token 并能在对话中调用 Delphi 函数的 ChatGPT 调用。
uses
sgcHTTP_API_OpenAI, sgcHTTP_API_OpenAI_Types;
var
OpenAI: TsgcHTTP_API_OpenAI;
oChat: TsgcHTTPOpenAIChatCompletionRequest;
oTool: TsgcHTTPOpenAITool;
begin
OpenAI := TsgcHTTP_API_OpenAI.Create(nil);
OpenAI.ApiKey := 'sk-...';
OpenAI.OnChatCompletionStreamChunk := DoChunk;
OpenAI.OnChatCompletionToolCall := DoToolCall;
oChat := TsgcHTTPOpenAIChatCompletionRequest.Create;
try
oChat.Model := 'gpt-4o';
oChat.Messages.AddSystem('You are a Delphi assistant.');
oChat.Messages.AddUser('What is the weather in Madrid?');
oTool := oChat.Tools.AddFunction('get_weather',
'Return current weather for a city.');
oTool.Parameters
.AddString('city', 'City name', True);
OpenAI.StreamChatCompletions(oChat);
finally
oChat.Free;
end;
end;
procedure TForm1.DoChunk(Sender: TObject;
const aChunk: TsgcHTTPOpenAIChatCompletionStreamChunk);
begin
Memo1.Text := Memo1.Text + aChunk.Content;
end;
procedure TForm1.DoToolCall(Sender: TObject;
const aToolCall: TsgcHTTPOpenAIChatCompletionToolCall);
var
vCity, vJSON: string;
begin
if aToolCall.FunctionName = 'get_weather' then
begin
vCity := aToolCall.Arguments.S['city'];
vJSON := MyWeatherLookup(vCity); // your own Delphi code
OpenAI.SubmitToolOutput(aToolCall.Id, vJSON);
end;
end;
OpenAI Realtime API 是一个 WebSocket 端点,接受输入音频帧流并发出输出音频帧流——亚秒级延迟、原生 barge-in(用户开始说话时模型停止说话)、服务器端语音活动检测以及与 REST API 相同的工具调用界面。sgcWebSockets 使用 TsgcHTTP_API_OpenAI_Realtime 包装它,为每个服务器消息(OnSessionUpdated、OnConversationItemCreated、OnInputAudioBufferSpeechStarted、OnResponseAudioDelta 等)提供类型化事件,因此您可以将其直接接入 TBass、TMediaPlayer 或任何音频队列。
将 Endpoint 设置为您的 Azure 资源 URL,将 ApiKey 设置为资源密钥——部署 ID 替代模型名称。
将 Endpoint 指向 http://localhost:11434/v1——同一组件驱动本地 Llama、Mistral、Qwen 和 Phi 模型。
所有这些都公开 OpenAI 兼容端点;只有基础 URL 和 API 密钥发生变化。
带 OpenAI 兼容 REST 的自托管推理服务器——流式 SSE 路径在字节级别完全相同。
TsgcHTTP_API_OpenAI 的完整属性/方法/事件参考。
Anthropic Claude、Google Gemini、Mistral、Ollama、Pinecone、MCP、RAG。
分步语音代理演练。
让模型调用您的 Delphi 代码的模式。
使用 ChatGPT + 嵌入的端到端应用架构。
线程、运行、文件搜索、代码解释器。