OpenAI ChatBot
TsgcAIOpenAIChatBot は、音声対話のループ全体を 1 つのコンポーネントにまとめています。マイクで録音し、Whisper で音声を文字起こしし、その文字列を Chat Completions に送信します。必要に応じてベクトルストアのコンテキストで補強し、回答を音声で読み上げます。
TsgcAIOpenAIChatBot は、音声対話のループ全体を 1 つのコンポーネントにまとめています。マイクで録音し、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 が録音を追跡します。
このコンポーネントが利用するサービスとプロトコルの一次情報です。