Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

델파이로 만든 ChatGPT 프로젝트 샘플 소개.


Recommended Posts

image.png

 

ChatGPT 에서 제공하는 Open API 를 활용하면 델파이로 ChatGPT 앱을 쉽게 만들 수 있습니다.

최근에는 한글로 질문 답변이 가능해져서 번역기를 사용하지 않고도 바로 한글로 질문을 하고 한글로 답변을 받을 수 있습니다.

다만 한글 질문시에는 영문 질문보다 속도가 많이 느린 편이며 답변 내용도 영문보다 퀄리티가 좀 떨어 지는 것 같으니 참고 하시기 바랍니다.

사용 방법은 아래 사이트에 로그인하고 개인 키를 발급 받으면  일정 질문까지는 무료로 사용 가능합니다.

ChatGPT 개인키 받는곳 : https://beta.openai.com/account/api-keys

샘플 소스에서 발급 받은 개인키를 넣고 빌드 하면 즉시 실행이 가능하며 프로젝트는 FMX 로 만들어 졌으므로 모바일에서도 실행이 가능 합니다.

OpenAPI 호출과 응답처리는 TNetHTTPClient 와  TNetHTTPRequest 컴포넌트를 사용 하였고

질문 호출 후 응답은 TNetHTTPClient 의 OnRequestCompleted 이벤트 에서 처리 하였습니다.

 

* 메인소스

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 개인키 받는곳 :  https://beta.openai.com/account/api-keys
  Const MyGPTKey = 'mykey_1234abcd';   // 발급 받은 개인키를 이곳에 할당


implementation


{$R *.fmx}


procedure TMForm.Memo_HanQDblClick(Sender: TObject);
begin
  Memo_HanQ.Lines.Clear;
end;

// 질문 하기 *********************************************
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;


// 답변 받기 *******************************************************************************************
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.

 

* 화면

image.png

 

 

이 댓글 링크
다른 사이트에 공유하기

  • 1 month later...
  • 3 months later...
On 2023. 4. 19. at 오후 12시 53분, 홍선익 said:

ansStr := LJson.GetValue('choices').A[0].FindValue('text').Value;

berlin버전에서 Window Native로 작성하니 A라는 부분이

'TJSonvalue' does not contain a memeber named 'A'  라고 컴파일이 안되네요?

TJsonArray로 형변환후 처리하시면 됩니다~

ansStr := (JsonObj.GetValue('choices') as TJSONArray).Items[0].GetValue('text', 'Default Value');
이 댓글 링크
다른 사이트에 공유하기

  • 6 months later...

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.