c2design 3월 3일에 포스트됨 공유하기 3월 3일에 포스트됨 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. * 화면 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
홍선익 4월 19일에 포스트됨 공유하기 4월 19일에 포스트됨 ansStr := LJson.GetValue('choices').A[0].FindValue('text').Value; berlin버전에서 Window Native로 작성하니 A라는 부분이 'TJSonvalue' does not contain a memeber named 'A' 라고 컴파일이 안되네요? 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
c2design 4월 19일에 포스트됨 Author 공유하기 4월 19일에 포스트됨 과거버전의 System.Josn 이 다를수 있겠네요. 아래와 같이 한번 해보시겠어요 ? ansStr := LJson.GetValue('choices').Items[0].GetValue('text').Value; 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Miniuser 8월 17일에 포스트됨 공유하기 8월 17일에 포스트됨 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'); 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.