OpenAI для Delphi — это клиентская библиотека для подключения к API OpenAI из Delphi и Lazarus/FPC (компилятор Free Pascal). Из этой библиотеки вы можете использовать популярные сервисы OpenAI, такие как ChatGPT, прямо из приложения Delphi или Lazarus.
Это неофициальная библиотека. OpenAI не предоставляет официальной библиотеки для Delphi.
Чтобы использовать библиотеку, просто добавьте папку «Исходный код» в путь к библиотеке IDE или к исходному пути вашего проекта.
Чтобы использовать клиент, добавьте модули OpenAIClient
и OpenAIDtos
в предложение использования модуля.
uses
OpenAIClient, OpenAIDtos;
Библиотеку необходимо настроить с использованием секретного ключа API вашей учетной записи, который доступен на веб-сайте. Мы рекомендуем установить его как переменную среды с именем OPENAI_API_KEY
. Получив ключ API, просто создайте клиент и установите ключ следующим образом:
var
Client: IOpenAIClient;
{ ... }
Client := TOpenAIClient.Create;
Client.Config.AccessToken := GetEnvironmentVariable( ' OPENAI_API_KEY ' );
Большинство конечных точек API OpenAI доступны в клиенте в интерфейсе, указанном в свойстве 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, чтобы проверить доступные методы, параметры, типы и прочитать комментарии к документации.
Эта библиотека не требует какой-либо сторонней библиотеки. Он работает на всех последних версиях Delphi, которые предоставляют модуль ( System.Net.HttpClient
) и Lazarus/FPC. Хотя он и не был полностью протестирован, он также должен работать на всех поддерживаемых платформах (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);
Пример использования openai-delphi с WPP4Delphi в WPPConnect-Team
Компонент с открытым исходным кодом для отправки сообщений, интегрированный в сеть WhatsApp с помощью Delphi.
Пример: демонстрационный вид
Пример кода в 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