OpenAI-Delphi:Delphi 与 Pascal 开发者的 AI 桥梁
项目概述
OpenAI-Delphi 是一个为 Delphi 和 Free Pascal 开发者设计的开源库,它提供了与 OpenAI API 无缝集成的功能。该项目由 landgraf-dev 团队开发维护,旨在让 Pascal 生态的开发者能够轻松访问 OpenAI 的强大人工智能服务,包括 GPT 系列模型、DALL-E 图像生成、Whisper 语音识别等先进功能。
核心特性
1. 完整的 API 覆盖
- Chat Completions:支持 GPT-3.5、GPT-4 等对话模型
- Text Completions:传统文本补全功能
- Image Generation:DALL-E 图像生成与编辑
- Audio Processing:Whisper 语音转文本
- Embeddings:文本向量化表示
- Fine-tuning:模型微调支持
- File Operations:训练文件管理
2. Pascal 原生设计
- 纯 Object Pascal 实现,无外部依赖
- 支持 Delphi 10.3+ 和 Free Pascal
- 完整的类型安全和编译时检查
- 遵循 Pascal 编码规范和最佳实践
3. 现代化架构
- 基于接口的设计,易于扩展和维护
- 异步操作支持(通过线程或异步方法)
- 完整的错误处理和日志记录
- 配置灵活,支持环境变量和配置文件
安装与配置
安装方式
text
// 通过 Boss 包管理器安装 boss install landgraf-dev/openai-delphi // 或手动添加到项目 // 1. 克隆仓库 // 2. 将 Source 目录添加到项目搜索路径
基本配置
text
uses OpenAI, OpenAI.Chat; var OpenAIClient: IOpenAIClient; begin // 创建客户端实例 OpenAIClient := TOpenAIClient.Create; // 设置 API 密钥 OpenAIClient.Config.SecretKey := 'your-api-key-here'; // 可选:设置组织 ID OpenAIClient.Config.Organization := 'your-org-id'; // 可选:设置超时时间(毫秒) OpenAIClient.Config.Timeout := 30000; end;
实用示例
示例 1:基础对话交互
text
procedure TChatExample.BasicChat;
var
Chat: IChat;
Response: TChatCompletionResponse;
begin
Chat := OpenAIClient.Chat.Create(
procedure(Params: TChatParams)
begin
Params.Model('gpt-3.5-turbo');
Params.Messages([
TChatMessageBuild.User('你好,请介绍一下 Pascal 语言的特点')
]);
Params.MaxTokens(500);
Params.Temperature(0.7);
end
);
Response := Chat.Execute;
if Response.Success then
WriteLn('AI 回复:', Response.Choices[0].Message.Content)
else
WriteLn('错误:', Response.Error.Message);
end;
示例 2:流式对话响应
text
procedure TChatExample.StreamingChat;
var
Chat: IChat;
begin
Chat := OpenAIClient.Chat.Create(
procedure(Params: TChatParams)
begin
Params.Model('gpt-4');
Params.Messages([
TChatMessageBuild.User('写一个快速排序的 Pascal 实现')
]);
Params.Stream(True); // 启用流式响应
end
);
// 处理流式响应
Chat.OnChunkReceived :=
procedure(Chunk: TChatCompletionChunk)
begin
if Assigned(Chunk.Choices) and (Length(Chunk.Choices) > 0) then
Write(Chunk.Choices[0].Delta.Content);
end;
Chat.Execute;
end;
示例 3:图像生成
text
procedure TImageExample.GenerateImage;
var
Image: IImage;
Response: TImageResponse;
begin
Image := OpenAIClient.Image.Create(
procedure(Params: TImageCreateParams)
begin
Params.Prompt('一只穿着西装会编程的猫,数字艺术风格');
Params.Size('1024x1024');
Params.N(1); // 生成1张图片
Params.ResponseFormat('url'); // 或 'b64_json'
end
);
Response := Image.Generate;
if Response.Success then
begin
// 显示图片URL
WriteLn('图片地址:', Response.Data[0].Url);
// 在 Delphi 中显示图片
// Image1.Bitmap.LoadFromUrl(Response.Data[0].Url);
end;
end;
示例 4:语音转文字
text
procedure TAudioExample.TranscribeAudio;
var
Audio: IAudio;
Response: TAudioTranscriptionResponse;
begin
Audio := OpenAIClient.Audio.Create;
Response := Audio.Transcribe(
procedure(Params: TAudioTranscriptionParams)
begin
Params.FileName('audio.mp3');
Params.Model('whisper-1');
Params.ResponseFormat('json');
Params.Language('zh'); // 指定语言
end
);
if Response.Success then
WriteLn('转录结果:', Response.Text)
else
WriteLn('错误:', Response.Error);
end;
示例 5:自定义函数调用
text
procedure TFunctionCallExample.ChatWithFunctions;
var
Chat: IChat;
Response: TChatCompletionResponse;
begin
Chat := OpenAIClient.Chat.Create(
procedure(Params: TChatParams)
begin
Params.Model('gpt-3.5-turbo-0613');
Params.Messages([
TChatMessageBuild.User('今天北京的天气怎么样?')
]);
// 定义可用的函数
Params.Functions([
TFunctionDef.Create('get_weather')
.Description('获取指定城市的天气信息')
.AddParameter('city', 'string', '城市名称')
.AddParameter('unit', 'string', '温度单位:celsius 或 fahrenheit')
]);
Params.FunctionCall('auto');
end
);
Response := Chat.Execute;
if Response.Success and Assigned(Response.Choices[0].Message.FunctionCall) then
begin
// 处理函数调用请求
var FuncCall := Response.Choices[0].Message.FunctionCall;
if FuncCall.Name = 'get_weather' then
begin
// 解析参数并调用实际天气API
var City := FuncCall.Arguments.Values['city'];
var UnitType := FuncCall.Arguments.Values['unit'];
// 获取天气数据后,可以继续对话
ContinueConversationWithWeatherData(City, UnitType);
end;
end;
end;
高级用法
批量处理
text
procedure TBatchExample.ProcessMultipleRequests;
var
Chat: IChat;
Responses: TArray<TChatCompletionResponse>;
begin
Chat := OpenAIClient.Chat;
// 批量创建请求
var Requests: TArray<TChatParamsProc> := [
procedure(Params: TChatParams)
begin
Params.Model('gpt-3.5-turbo');
Params.Messages([TChatMessageBuild.User('解释面向对象编程')]);
end,
procedure(Params: TChatParams)
begin
Params.Model('gpt-3.5-turbo');
Params.Messages([TChatMessageBuild.User('Pascal 的历史')]);
end
];
// 并行执行(需要额外线程管理)
Responses := Chat.ExecuteBatch(Requests);
end;
自定义 HTTP 客户端
text
procedure TCustomHttpExample.UseCustomClient;
var
CustomClient: IHttpClient;
OpenAIClient: IOpenAIClient;
begin
// 创建自定义 HTTP 客户端
CustomClient := TMyCustomHttpClient.Create;
// 使用自定义客户端创建 OpenAI 客户端
OpenAIClient := TOpenAIClient.Create(CustomClient);
// 配置代理、超时等
CustomClient.SetProxy('proxy.example.com', 8080);
CustomClient.SetTimeout(60000);
end;
最佳实践
1. 错误处理
text
try
Response := Chat.Execute;
if not Response.Success then
begin
case Response.Error.Code of
TOpenAIErrorCode.RateLimitExceeded:
WriteLn('请求过于频繁,请稍后重试');
TOpenAIErrorCode.InsufficientQuota:
WriteLn('API 配额不足');
TOpenAIErrorCode.InvalidRequest:
WriteLn('请求参数错误:', Response.Error.Message);
else
WriteLn('未知错误:', Response.Error.Message);
end;
end;
except
on E: Exception do
WriteLn('异常:', E.Message);
end;
2. 资源管理
text
// 使用接口自动管理资源 procedure TResourceExample.ManageResources; var OpenAIClient: IOpenAIClient; begin // 接口变量离开作用域时会自动释放 OpenAIClient := TOpenAIClient.Create; // 使用客户端... end; // 自动释放
3. 配置管理
text
// 从配置文件或环境变量读取配置
function LoadOpenAIConfig: TOpenAIConfig;
begin
Result := TOpenAIConfig.Create;
// 优先使用环境变量
Result.SecretKey := GetEnvironmentVariable('OPENAI_API_KEY');
if Result.SecretKey = '' then
// 从配置文件读取
Result.SecretKey := ReadConfig('OpenAI', 'ApiKey');
Result.Organization := GetEnvironmentVariable('OPENAI_ORG_ID');
Result.Timeout := StrToIntDef(GetEnvironmentVariable('OPENAI_TIMEOUT'), 30000);
end;
项目优势
- 原生 Pascal 实现:完全用 Object Pascal 编写,无需依赖其他语言运行时
- 类型安全:充分利用 Pascal 的强类型特性,减少运行时错误
- IDE 友好:完美支持 Delphi IDE 的代码补全和调试功能
- 跨平台:支持 Windows、macOS、Linux 等平台
- 活跃维护:项目持续更新,跟进 OpenAI API 的最新变化
- 完整文档:提供详细的示例和 API 文档
适用场景
- 桌面应用集成:为 Delphi 桌面应用添加 AI 功能
- 企业自动化:使用 AI 处理文档、数据分析和报告生成
- 教育工具:开发编程教学辅助工具
- 原型开发:快速验证 AI 相关创意
- 传统系统现代化:为现有 Pascal 系统添加智能功能
结语
OpenAI-Delphi 项目为 Pascal 开发者打开了一扇通往人工智能世界的大门。无论你是想为现有 Delphi 应用添加智能对话功能,还是希望使用 Pascal 开发全新的 AI 驱动应用,这个库都提供了强大而优雅的解决方案。其清晰的 API 设计、完整的文档和活跃的社区支持,使得集成 OpenAI 服务变得前所未有的简单。
通过本文介绍的示例和最佳实践,你可以快速上手并开始构建自己的 AI 增强型 Pascal 应用。随着人工智能技术的不断发展,OpenAI-Delphi 将继续演进,为 Pascal 社区带来更多可能性。
项目地址:https://github.com/landgraf-dev/openai-delphi
开始你的 AI 编程之旅吧!
openai-delphi.zip
类型:压缩文件|已下载:0|下载方式:免费下载
立即下载




还没有评论,来说两句吧...