OpenAI Assistant 클라이언트가 run 스레드 호출 시 스트리밍 응답을 구현하도록 개선됐어요. 이 새 기능 이전에는 run 객체의 상태를 완료될 때까지 폴링해야 했어요. 이제 새로운 Stream 이벤트를 사용해 스트리밍 메시지를 처리할 수 있어요.
스트리밍 이벤트
어시스턴트의 전체 응답을 기다리는 대신, Server-Sent Events를 사용해 응답을 스트리밍할 수 있어요. CreateRun 함수를 사용할 때 Stream = True 매개변수를 전달하기만 하면 응답이 스트리밍으로 처리돼요.
다음 이벤트들이 스트리밍 응답을 처리하는 데 사용돼요
- OnStreamRun: run 객체에 업데이트가 있을 때 호출되는 이벤트예요.
- OnStreamMessage: 메시지 객체에 업데이트가 있을 때 호출되는 이벤트예요: 생성됨, 진행 중, 완료됨 등...
- OnStreamMessageDelta: 메시지의 일부가 스트리밍될 때 발생해요.
- OnStreamDone: 오류가 발생할 때 발생해요. 내부 서버 오류나 타임아웃으로 인해 발생할 수 있어요.
- OnStreamError: 스트림이 종료될 때 발생해요.
1단계: Assistant 만들기
Assistant는 모델, 지침, 도구 같은 여러 매개변수를 사용해 사용자의 메시지에 응답하도록 설정할 수 있는 엔티티예요.
// ... create a new assistant oAssistant := TsgcAIOpenAIAssistant.Create(nil); // ... set your api key oAssistant.OpenAIOptions.ApiKey := txtAPIKey.Text; // ... assistant options oAssistant.AssistantOptions.Name := 'Math Tutor'; oAssistant.AssistantOptions.Instructions.Text := 'You are a personal math tutor. Write and run code to answer math questions.'; oAssistant.AssistantOptions.Model := 'gpt-4o'; // ... create the assistant oAssistant.CreateAssistant();
2단계: Thread 만들기
Thread는 사용자와 하나 또는 여러 Assistant 간의 대화를 나타내요. 사용자(또는 AI 애플리케이션)가 Assistant와 대화를 시작할 때 Thread를 만들 수 있어요.
oThread := oAssistant.CreateThread;
3단계: Thread에 메시지 추가하고 스트리밍으로 실행
여기에 텍스트를 입력하세요...
procedure SendMessage(const oAssistant: TsgcAIOpenAIAssistant; const oThread: TsgcAIClass_Thread; const aMessage: string);
var
i: Integer;
oMessage: TsgcOpenAIClass_Message;
oMessages: TsgcOpenAIClass_Response_List_Messages;
oRun: TsgcOpenAIClass_Run;
begin
DoLog('[user]: ' + aMessage);
oMessage := oAssistant.CreateMessageText(oThread.Id, aMessage);
if Assigned(oMessage) then
oRun := oAssistant.CreateRun(oThread.Id, True);
end;
4단계: 응답 처리
서버에서 전송된 스트림 메시지를 읽으려면 OnStreamMessageDelta 이벤트를 사용하세요.
procedure OnStreamMessageDelta(Sender: TObject; const aMessageDelta: TsgcOpenAIClass_MessageDelta; const aRaw: string);
var
i: Integer;
vResponse: string;
vType: string;
begin
for i := Low(aMessageDelta.Content) to High(aMessageDelta.Content) do
begin
vType := aMessageDelta.Content[i]._Type;
if vType = 'text' then
begin
vResponse := TsgcOpenAIClass_MessageDeltaContent_Text
(aMessageDelta.Content[i]).Value;
end;
end;
end;
OpenAI Delphi 샘플
다음 압축 파일에는 sgcWebSockets 라이브러리를 사용해 Windows용으로 빌드된 Assistants 데모의 소스 코드가 포함되어 있어요.
