OpenAI ChatBot
TsgcAIOpenAIChatBot은 음성 대화 과정 전체를 컴포넌트 하나에 담았습니다. 마이크로 녹음하고 Whisper로 오디오를 전사한 뒤 그 텍스트를 Chat Completions로 보내며, 필요하면 벡터 저장소에서 가져온 컨텍스트를 덧붙이고, 답변을 음성으로 읽어 줍니다.
TsgcAIOpenAIChatBot은 음성 대화 과정 전체를 컴포넌트 하나에 담았습니다. 마이크로 녹음하고 Whisper로 오디오를 전사한 뒤 그 텍스트를 Chat Completions로 보내며, 필요하면 벡터 저장소에서 가져온 컨텍스트를 덧붙이고, 답변을 음성으로 읽어 줍니다.
OpenAI Whisper와 Chat Completions 위에 얹은 음성 프런트엔드입니다. 오디오 녹음 컴포넌트와 텍스트 음성 변환 컴포넌트를 연결하고, 검색 증강 응답이 필요하면 임베딩 컴포넌트까지 연결한 다음 Start를 호출하세요.
sgcAI는 자체 완결형 제품입니다. 이 컴포넌트는 기반이 되는 sgcWebSockets Core 런타임과 함께 sgcAI에 포함되어 제공되므로, 별도로 구매해야 할 기본 라이선스가 없습니다.
녹음 컴포넌트와 텍스트 음성 변환 컴포넌트, 챗봇을 폼에 올리고 API 키를 설정한 다음 Start를 호출하세요.
uses
sgcAI, sgcAI_OpenAI_Audio_ChatBot,
sgcAI_AudioRecorder_MCI, sgcAI_TextToSpeech_System;
var
oBot: TsgcAIOpenAIChatBot;
begin
oBot := TsgcAIOpenAIChatBot.Create(nil);
oBot.OpenAIOptions.ApiKey := 'sk-...';
oBot.AudioRecorder := sgcAudioRecorderMCI1;
oBot.TextToSpeech := sgcTextToSpeechSystem1;
oBot.ChatBotOptions.Transcription.Model := 'whisper-1';
oBot.ChatBotOptions.Transcription.Language := 'en';
oBot.ChatBotOptions.ChatCompletion.Model := 'gpt-4o';
oBot.OnTranscription := BotTranscription;
oBot.OnChatCompletion := BotChatCompletion;
oBot.Start; // Stop ends the session
// A turn can also be pushed from code, no microphone involved.
oBot.ChatAsUser('Summarise the last order in one line.');
end;
procedure TForm1.BotTranscription(Sender: TObject;
var Text: string; var Accept: Boolean);
begin
// Inspect or rewrite what Whisper heard, or drop the turn.
Accept := Trim(Text) <> '';
end;
// includes: sgcAI.hpp, sgcAI_OpenAI_Audio_ChatBot.hpp
TsgcAIOpenAIChatBot *oBot = new TsgcAIOpenAIChatBot(NULL);
oBot->OpenAIOptions->ApiKey = "sk-...";
oBot->AudioRecorder = sgcAudioRecorderMCI1;
oBot->TextToSpeech = sgcTextToSpeechSystem1;
oBot->ChatBotOptions->ChatCompletion->Model = "gpt-4o";
oBot->OnChatCompletion = BotChatCompletion;
oBot->Start();
// Push a turn without speaking.
oBot->ChatAsUser("Summarise the last order in one line.");
가장 자주 사용하게 되는 멤버들입니다.
AudioRecorder가 마이크 입력을 제공하고, TextToSpeech가 답변을 읽어 주며, Embeddings는 모델을 호출하기 전에 벡터 저장소에서 찾은 컨텍스트를 선택적으로 제공합니다.
Transcription.Model과 Transcription.Language가 Whisper 호출을 설정합니다. ChatCompletion.Enabled와 ChatCompletion.Model은 답변을 생성하는 모델을 설정합니다.
컴포넌트가 수행하는 모든 호출에 적용되는 API 키, 엔드포인트, HTTP, 재시도, 로깅 설정입니다. Azure OpenAI 방식도 포함합니다.
Start가 캡처를 시작하고 Stop이 끝냅니다. 녹음 컴포넌트를 자동 모드로 두면 답변 재생이 끝난 뒤 캡처가 다시 시작되므로, 손을 대지 않고 대화를 이어 갈 수 있습니다.
ChatAsUser는 사용자 메시지를 넣고, ChatAsSystem은 시스템 메시지를 넣으면서 원하면 음성으로 읽어 줄 수도 있습니다. GetEmbedding은 임의의 프롬프트에 대한 컨텍스트를 조회합니다.
OnTranscription으로 Whisper가 인식한 내용을 모델에 전달하기 전에 수정하거나 거부할 수 있습니다. OnChatCompletion은 답변의 역할과 내용을 알려 줍니다. OnAudioStart와 OnAudioStop은 캡처 상태를 추적합니다.
이 컴포넌트가 사용하는 서비스와 프로토콜의 공식 자료입니다.