OpenAI for Delphi 是一个客户端库,用于连接 Delphi 和 Lazarus/FPC(Free Pascal 编译器)的 OpenAI API。从此库中,您可以直接从 Delphi 或 Lazarus 应用程序使用流行的 OpenAI 服务,例如 ChatGPT。
这是一个非官方图书馆。 OpenAI 没有为 Delphi 提供任何官方库。
要使用该库,只需将 Source 文件夹添加到 IDE 库路径或您的项目源路径中。
要使用客户端,请将单元OpenAIClient
和OpenAIDtos
添加到您的单元使用子句中。
uses
OpenAIClient, OpenAIDtos;
该库需要使用您帐户的 API 密钥进行配置,该密钥可在网站上找到。我们建议将其设置为名为OPENAI_API_KEY
的环境变量。获得 API 密钥后,只需创建客户端并将密钥设置如下:
var
Client: IOpenAIClient;
{ ... }
Client := TOpenAIClient.Create;
Client.Config.AccessToken := GetEnvironmentVariable( ' OPENAI_API_KEY ' );
大多数 OpenAI API 端点都可以在客户端中的OpenAI
属性中提供的接口下使用。以下示例演示如何使用 CreateCompletion 端点提出问题并接收答案:
function AskQuestion ( const Question: string): string;
var
Request: TCreateCompletionRequest;
Response: TCreateCompletionResponse;
begin
Response := nil ;
Request := TCreateCompletionRequest.Create;
try
Request.Prompt := Question;
Request.Model := ' text-davinci-003 ' ;
Request.MaxTokens := 2048 ; // Be careful as this can quickly consume your API quota.
Response := Client.OpenAI.CreateCompletion(Request);
if Assigned(Response.Choices) and (Response.Choices.Count > 0 ) then
Result := Response.Choices[ 0 ].Text
else
Result := ' ' ;
finally
Request.Free;
Response.Free;
end ;
end ;
所有创建并作为输入参数传递的对象,以及所有由客户端创建并作为函数结果提供的对象,都必须由您销毁,否则将出现内存泄漏。
您可以使用 Delphi代码完成来检查可用的方法、参数、类型并阅读文档注释。
该库不需要任何第三方库。它适用于所有提供单元 ( System.Net.HttpClient
) 和 Lazarus/FPC 的最新 Delphi 版本。尽管尚未经过全面测试,但它应该也可以在所有支持的平台(Windows、Linux、macOS 等)上运行。
由于该库需要您的 API 密钥,因此不建议您在客户端应用程序上使用它,因为您的密钥将被暴露,除非您确定存在安全风险。
您可以使用自己的请求工厂来根据自己的需要自定义请求。只需实现IRestRequestFactory
接口并将其设置在属性Config.RequestFactory
中即可。
例如,如果您想设置自定义组织(在 HTTP 标头中提供),请使用以下示例代码:
uses { ... } , OpenApiRest;
type
TMyRequestFactory = class (TInterfacedObject, IRestRequestFactory)
strict private
FFactory: IRestRequestFactory;
public
constructor Create(AFactory: IRestRequestFactory);
function CreateRequest : IRestRequest;
end ;
constructor TMyRequestFactory.Create(AFactory: IRestRequestFactory);
begin
FFactory := AFactory;
end ;
function TMyRequestFactory.CreateRequest : IRestRequest;
begin
Result := FFactory.CreateRequest;
Result.AddHeader( ' OpenAI-Organization ' , ' org-nUilalMOTvqGjGeAopTDIsSB ' );
end ;
// Set it after creating the client
FClient := TOpenAIClient.Create;
FClient.Config.RequestFactory := TMyRequestFactory.Create(FClient.Config.RequestFactory);
在 WPPConnect-Team 中使用 openai-delphi 和 WPP4Delphi 的示例
使用 Delphi 集成到 Whatsapp Web 中的用于发送消息的开源组件
示例:演示视图
Delphi 中的代码示例:
if SwtChatGPT.IsOn then
begin
if Question <> '' then
begin
//Credits --> https://github.com/landgraf-dev/openai-delphi
Answer := AskQuestion(Question, AChat.id);
phoneNumber := Copy(Answer, 1, pos('#', Answer)-1);
Answer := StringReplace(Answer, phoneNumber + '#', '',[]);
if Trim(Answer) <> '' then
frDemo.TWPPConnect1.SendTextMessageEx(phoneNumber, '?' + ' *ChatGPT* ' + Answer, 'createChat: true', '123')
else
frDemo.TWPPConnect1.SendTextMessageEx(phoneNumber, '?' + ' *ChatGPT* ' + 'Could not retrieve an answer.', 'createChat: true', '123');
end;
end;
WPP4Delphi 中的完整代码