Delphi에서 ChatGPT 사용하기

· 컴포넌트

ChatGPT는 OpenAI가 개발한 대형 언어 모델이에요. 비지도 학습이라는 기법으로 훈련됐으며, 이는 대량의 텍스트 데이터셋을 입력받아 앞선 단어를 기반으로 시퀀스의 다음 단어를 예측하도록 학습했다는 뜻이에요. 덕분에 ChatGPT는 사람과 같은 텍스트를 생성할 수 있어요. 챗봇의 사용자 입력에 대한 응답 생성이나 웹사이트 및 소셜 미디어 콘텐츠 생성 등 다양한 용도로 사용할 수 있어요.

ChatGPT의 주요 기능 중 하나는 문맥을 이해하고 대화에 따라 적절한 응답을 생성하는 능력이에요. 예를 들어 ChatGPT에 질문을 하면 질문과 관련 있고 자연스러운 대화 흐름을 따르는 응답을 생성해요. 이는 모델이 대화의 이전 발언을 "기억"하고 그 정보를 응답에 반영할 수 있기 때문에 가능해요.

또 다른 중요한 기능은 다양하고 풍부한 응답을 생성하는 능력이에요. 대량의 텍스트 데이터셋으로 훈련됐기 때문에 폭넓은 지식을 가지고 있고, 다양한 상황과 주제에 적절한 응답을 생성할 수 있어요. 덕분에 챗봇에서 사용자 입력에 대한 응답을 생성할 때 유용한 도구로 활용할 수 있어요. 대화 주제와 상관없이 관련성 높고 흥미로운 응답을 제공할 수 있기 때문이에요.

전반적으로 ChatGPT는 사람과 같은 텍스트를 생성하고 문맥 및 대화 흐름을 이해하는 강력한 언어 모델이에요. 챗봇, 콘텐츠 생성, 언어 번역 등 다양한 분야에 응용할 수 있고, 우리가 기술과 상호작용하는 방식을 혁신할 잠재력을 가지고 있어요.

현재 ChatGPT 자체에는 API가 없지만, OpenAI 베타 API를 사용해 GPT-3 Text Transformer와 상호 작용할 수 있어요. 다음 주소에서 발급받을 수 있는 API 키만 있으면 돼요.

https://beta.openai.com/account/api-keys

이제 API와 상호 작용을 시작할 수 있어요.

GPT-3 Delphi 코드

API 키를 받으면 API와 상호 작용하는 것은 매우 쉬워요. 아래는 sgcWebSockets 라이브러리를 사용해 상호 작용하는 샘플 코드예요. 

function AskChatGPT(const aAPI, aQuestion: string): string;
var
  oHTTP: TsgcHTTP1Client;
  oStream: TStringStream;
  vPostData: string;
  oJSON: TJSONValue;
  oArray: TJSonArray;
begin
  oHTTP := TsgcHTTP1Client.Create(nil);
  Try
    oHTTP.Request.CustomHeaders.Add('Authorization: Bearer ' + aAPI);
    oHTTP.Request.ContentType := 'application/json';
    vPostData :=
      Format('{"model": "text-davinci-003","prompt": "%s","max_tokens": 2048,"temperature": 0}',
      [aQuestion]);
    // send request
    oStream := TStringStream.Create(vPostData);
    Try
      result := oHTTP.Post('https://api.openai.com/v1/completions', oStream);
      // parse response
      oJSON := TJSonObject.ParseJSONValue(result).GetValue<TJSONValue>
        ('choices');
      result := TJSonArray(oJSON).Items[0].GetValue<TJSONString>('text').Value;
    Finally
      oStream.Free;
    End;
  Finally
    oHTTP.Free;
  End;
end; 

이 함수에는 두 개의 인수가 있어요.

API: https://beta.openai.com/account/api-keys에서 발급받은 API 키예요.

Question: 질문이 담긴 메시지예요.

API 키는 Bearer 토큰으로 전송되고 메시지는 JSON 객체로 인코딩돼요. 서버는 JSON 객체로 응답을 반환하며 그 안에서 텍스트 메시지를 확인할 수 있어요.


아래에서 전체 프로젝트와 Windows용 컴파일된 실행 파일을 확인해 주세요.