OpenAI for Delphi é uma biblioteca cliente para conectar-se à API OpenAI do Delphi e Lazarus/FPC (Free Pascal Compiler). A partir desta biblioteca você pode usar serviços OpenAI populares, como ChatGPT, diretamente de seu aplicativo Delphi ou Lazarus.
Esta é uma biblioteca não oficial. OpenAI não fornece nenhuma biblioteca oficial para Delphi.
Para usar a biblioteca, basta adicionar a pasta Fonte ao caminho da biblioteca IDE ou ao caminho fonte do seu projeto.
Para usar o cliente, adicione as unidades OpenAIClient
e OpenAIDtos
à sua cláusula unit uses.
uses
OpenAIClient, OpenAIDtos;
A biblioteca precisa ser configurada com a chave API secreta da sua conta, que está disponível no site. Recomendamos configurá-la como uma variável de ambiente chamada OPENAI_API_KEY
. Depois de ter a chave API, basta criar o cliente e definir a chave conforme a seguir:
var
Client: IOpenAIClient;
{ ... }
Client := TOpenAIClient.Create;
Client.Config.AccessToken := GetEnvironmentVariable( ' OPENAI_API_KEY ' );
A maioria dos endpoints da API OpenAI estão disponíveis no cliente, na interface fornecida na propriedade OpenAI
. O exemplo a seguir mostra como fazer uma pergunta e receber uma resposta usando o endpoint 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 ;
Todos os objetos criados e passados como parâmetros de entrada, bem como todos os objetos criados pelo cliente e fornecidos como resultados de funções, devem ser destruídos por você, caso contrário ocorrerá um vazamento de memória.
Você pode usar o preenchimento de código Delphi para verificar os métodos, parâmetros, tipos disponíveis e ler comentários da documentação.
Esta biblioteca não requer nenhuma biblioteca de terceiros. Funciona em todas as versões recentes do Delphi que fornecem unit ( System.Net.HttpClient
) e Lazarus/FPC. Embora não seja totalmente testado, também deve funcionar em todas as plataformas suportadas (Windows, Linux, macOS, etc.).
Como a biblioteca requer sua chave secreta de API, não é recomendado usá-la em aplicativos clientes, pois sua chave secreta será exposta, a menos que você tenha certeza sobre os riscos de segurança.
Você pode personalizar a solicitação de acordo com sua necessidade usando sua própria fábrica de solicitações. Basta implementar a interface IRestRequestFactory
e configurá-la na propriedade Config.RequestFactory
.
Por exemplo, se você deseja configurar uma organização personalizada (que é fornecida em um cabeçalho HTTP), este é um exemplo de código:
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);
Exemplo de uso de openai-delphi com WPP4Delphi em WPPConnect-Team
Componente Opensource para envio de mensagens integrado ao whatsapp web utilizando Delphi
Exemplo: visualização de demonstração
Exemplo de código em 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;
Código completo em WPP4Delphi