OpenAI API를 사용하면 ChatGPT Turbo로 자신만의 AI 채팅을 만들 수 있어요. sgcWebSockets 라이브러리를 사용하면 API와 상호작용하기가 매우 쉬워요. 채팅 대화가 주어지면 모델이 채팅 완성 응답을 반환해요.
ChatGPT Delphi 예제
OpenAI는 ChatGPT Turbo에 보낼 메시지와 temperature(출력의 무작위성 조절)를 포함한 요청을 작성해야 해요. 사용 가능한 파라미터 목록은 아래에서 확인하세요.
- model: (필수) 사용할 모델의 ID예요. Chat API와 호환되는 모델은 모델 엔드포인트 호환성 표를 참조하세요.
- messages: (필수) 채팅 형식으로 작성된 채팅 완성 생성 대상 메시지예요.
- temperature: 0~2 사이의 샘플링 온도예요. 0.8처럼 높은 값은 출력을 더 무작위적으로, 0.2처럼 낮은 값은 더 집중적이고 결정론적으로 만들어요.
- top_p: 핵 샘플링이라는 temperature 샘플링의 대안이에요. 모델이 top_p 확률 질량을 가진 토큰의 결과를 고려해요. 0.1이면 상위 10% 확률 질량을 구성하는 토큰만 고려해요.
- n: 각 입력 메시지에 대해 생성할 채팅 완성 선택지 수예요.
- stream: 설정하면 ChatGPT처럼 부분 메시지 델타가 전송돼요. 토큰은 사용 가능해지는 대로 데이터 전용 서버 전송 이벤트로 전송되며, 스트림은 data: [DONE] 메시지로 종료돼요. 예제 코드는 OpenAI Cookbook을 참조하세요.
- stop: API가 추가 토큰 생성을 중지할 최대 4개의 시퀀스예요.
- max_tokens: 채팅 완성에서 생성할 최대 토큰 수예요. 입력 토큰과 생성된 토큰의 총 길이는 모델의 컨텍스트 길이에 의해 제한돼요.
- presence_penalty: -2.0~2.0 사이의 숫자예요. 양수 값은 지금까지 텍스트에 등장한 새 토큰에 패널티를 부여하여 모델이 새 주제를 다룰 가능성을 높여요.
- frequency_penalty: -2.0~2.0 사이의 숫자예요. 양수 값은 지금까지 텍스트에서의 기존 빈도를 기반으로 새 토큰에 패널티를 부여하여 모델이 같은 문장을 그대로 반복할 가능성을 낮춰요.
- logit_bias: 완성에서 지정된 토큰이 나타날 가능성을 수정해요. 토큰(토크나이저의 토큰 ID로 지정)을 -100~100 범위의 바이어스 값에 매핑하는 JSON 객체를 허용해요. 수학적으로 바이어스는 샘플링 전에 모델이 생성한 logit에 추가돼요. 정확한 효과는 모델마다 다르지만, -1~1 사이의 값은 선택 가능성을 줄이거나 높이고, -100이나 100 같은 값은 해당 토큰을 금지하거나 독점적으로 선택해요.
- user: 최종 사용자를 나타내는 고유 식별자로, OpenAI가 남용을 모니터링하고 감지하는 데 도움이 돼요.
ChatGPT-Turbo에 메시지를 전송하는 간단한 예제를 아래에서 확인하세요.
procedure SendMessageChatGPT(const aMessage: string);
var
i: Integer;
oMessages: TsgcOpenAIArray_Request_Completion_Messages;
oMessage: TsgcOpenAIClass_Request_Completion_Message;
oRequest: TsgcOpenAIClass_Request_ChatCompletion;
oResponse: TsgcOpenAIClass_Response_ChatCompletion;
begin
oRequest := TsgcOpenAIClass_Request_ChatCompletion.Create;
Try
// ... model
oRequest.Model := 'gpt-3.5-turbo';
// ... create message
oMessage := TsgcOpenAIClass_Request_Completion_Message.Create;
oMessage.Content := aMessage;
oMessages := oRequest.Messages;
SetLength(oMessages, 1);
oMessages[0] := oMessage;
oRequest.Messages := oMessages;
// ... send message
oResponse := OpenAI.CreateChatCompletion(oRequest);
// ... process response
for i := 0 to Length(oResponse.Choices) - 1 do
DoLog('[' + oResponse.Choices[i]._Message.Role + '] ' + oResponse.Choices[i]._Message.Content);
Finally
oRequest.Free
End;
End;

sgcWebSockets OpenAI Delphi 라이브러리를 사용한 Windows용 컴파일된 데모를 아래에서 확인하세요.
