前回の記事では、OpenAI のチャットメソッドに文脈情報を追加するために OpenAI Embeddings を使用する方法を紹介しました。
今回は、sgcWebSockets パッケージの TsgcOpenAIEmbeddings コンポーネントを使用して、独自データで AI アプリケーションを構築する方法を紹介します。
Delphi Voice ChatBot に関する以前の記事では、TsgcAIOpenAIChatBot コンポーネントを使用して音声で操作するチャットボットを構築しました。今回は、2021 年までに学習された OpenAI のデータだけでなく、独自のカスタムデータも追加してチャットボットを拡張し、ヘルプファイルとパッケージのインターフェースから取得したデータを使った 質問応答 (Questions & Answers) を構築します。
独自データをベクトルに変換
最初のステップは、sgcWebSockets の PDF マニュアルをテキストに変換することです。このファイルを使用して、パッケージの設定方法やコンポーネントの使い方など、有用な情報を含むエンベディングを作成します。この情報は OpenAI に質問する際に使用されます。
PDF マニュアルをテキスト形式にしたら、TsgcAIOpenAIEmbeddings コンポーネントを使用してファイルの各セクションのベクトルを OpenAI から取得し、今回はテキストファイルに保存します (本番環境では Pinecone などのベクトルデータベースを使用できます)。
procedure ConvertFileToVector;
var
oDialog: TOpenDialog;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
begin
oDialog := TOpenDialog.Create(nil);
Try
oDialog.Filter := 'TXT Files|*.txt';
if oDialog.Execute then
begin
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
oEmbeddings.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings.CreateEmbeddingsFromFile(oDialog.FileName);
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
end;
Finally
FreeAndNil(oDialog);
End;
end;
チャットボットとエンベディング
すべてのデータをベクトルに変換したら、独自のモデルを構築できます。基本的な考え方はとてもシンプルです。ボットに質問するたびに、まず質問をベクトルに変換し、データベースから質問に最も類似するベクトルを検索します。最後に、質問に最も類似するデータを文脈として追加します。
procedure AskToChatGPT(const aQuestion: string);
var
oChatBot: TsgcAIOpenAIChatBot;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
vContext: string;
begin
oChatBot := TsgcAIOpenAIChatBot.Create(nil);
Try
oChatBot.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oChatBot.Embeddings := oEmbeddings;
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
vContext := oChatBot.GetEmbedding(aQuestion);
oChatBot.ChatAsUser('Answer the question based on the context below.\n\nContext:\n' +
vContext + '\nQuestion:' + aQuestion + '\nAnswer:');
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
Finally
FreeAndNil(oDialog);
End;
end;
Delphi Windows デモ
以下に、sgcWebSockets AI パッケージを使用した Delphi のサンプルを示します。カスタマイズしたデータで質問応答アプリケーションを構築する方法を示しています。このデモには 2 つのプロジェクトが含まれます。
1. sgcCreateEmbeddings: このプロジェクトはテキストファイルを読み込み、チャンクに分割して各チャンクをベクトルに変換し、データベースファイルに保存します。デモには使いやすさのためにテキストファイル形式のベクトルデータベースがすでに含まれています。
2. sgcQuestionsAnswers: 上記のデータベースレコードを使用し、ユーザーがチャットボットに質問するたびに、まずアプリケーションがデータベースから質問に最も類似する文脈を検索し、文脈情報として追加することで、チャットボットがより正確な応答を提供できるようにします。
