// ChatGPT Personal Key : https://beta.openai.com/account/api-keys
unit MainCGPT;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.JSON,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types, FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox,
FMX.Memo, System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent, FMX.Layouts;
type
TMForm = class(TForm)
Memo_Ans: TMemo;
Memo_HanQ: TMemo;
BT_Question: TButton;
NetHTTPClient1: TNetHTTPClient;
NetHTTPRequest1: TNetHTTPRequest;
Label1: TLabel;
Label3: TLabel;
Layout1: TLayout;
Layout3: TLayout;
SpeedButton1: TSpeedButton;
procedure BT_QuestionClick(Sender: TObject);
procedure NetHTTPClient1RequestCompleted(const Sender: TObject; const AResponse: IHTTPResponse);
procedure Memo_HanQDblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MForm: TMForm;
// ChatGPT key : https://beta.openai.com/account/api-keys
Const MyGPTKey = 'mykey_1234abcd'; // Input your key
implementation
{$R *.fmx}
procedure TMForm.Memo_HanQDblClick(Sender: TObject);
begin
Memo_HanQ.Lines.Clear;
end;
// Question *********************************************
procedure TMForm.BT_QuestionClick(Sender: TObject);
var
LPostdata: string;
LPostDataStream: TStringStream;
begin
LPostData := '{' +
'"model": "text-davinci-003",'+
'"prompt": "' + Memo_HanQ.Text + '",'+
'"max_tokens": 2048,'+
'"temperature": 0'+
'}';
LPostDataStream := TStringStream.Create( LPostData, TEncoding.UTF8);
NetHTTPClient1.CustomHeaders['Authorization'] := 'Bearer ' + MyGPTKey;
NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/json';
LPostDataStream.Position := 0;
NetHTTPClient1.Post('https://api.openai.com/v1/completions', LPostDataStream );
end;
// Answer ********************************************************************************
procedure TMForm.NetHTTPClient1RequestCompleted(const Sender: TObject; const AResponse: IHTTPResponse);
var
LString, ansStr : string;
LJson: TJsonObject;
begin
if AResponse.StatusCode = 200 then
begin
LString := AResponse.ContentAsString;
LJson := TJSONObject.ParseJSONValue(LString) as TJSONObject;
try
ansStr := LJson.GetValue('choices').A[0].FindValue('text').Value;
finally
LJson.Free;
end;
end
else
ansStr := 'HTTP response code: ' + AResponse.StatusCode.ToString;
Memo_Ans.Lines.Clear;
Memo_Ans.Lines.Add( ansStr );
end;
end.
댓글 없음:
댓글 쓰기