OpenAI Embeddings
TsgcAIOpenAIEmbeddings は、検索拡張生成(RAG)における取り込みと検索を担います。コーパスをチャンクに分割し、それぞれの埋め込みベクトルを取得して、割り当てたベクトルストアに書き込み、任意のクエリに対して最も近い保存済みテキストを返します。
TsgcAIOpenAIEmbeddings は、検索拡張生成(RAG)における取り込みと検索を担います。コーパスをチャンクに分割し、それぞれの埋め込みベクトルを取得して、割り当てたベクトルストアに書き込み、任意のクエリに対して最も近い保存済みテキストを返します。
差し替え可能なストアを備えた埋め込み生成コンポーネントです。Database にベクトルデータベースコンポーネントを割り当てれば、チャンク分割、埋め込み生成、バッチ処理、書き込みという取り込みパイプライン全体が 1 回の呼び出しで実行されます。
sgcAI は単体で完結しています。このコンポーネントは、土台となる sgcWebSockets Core ランタイムとともに sgcAI に同梱されているため、基本ライセンスを購入する必要はありません。
ベクトルストアを割り当て、CreateEmbeddingsFromFile を一度呼び出せば、あとはユーザーの質問ごとにコンテキストを検索するだけです。
uses
sgcAI, sgcAI_OpenAI_Embeddings, sgcAI_DB_Vector_File;
var
oEmbeddings: TsgcAIOpenAIEmbeddings;
oDB: TsgcAIDatabaseVectorFile;
vContext: string;
begin
oDB := TsgcAIDatabaseVectorFile.Create(nil);
oDB.VectorFileOptions.InputFilename := 'corpus.sgcif';
oDB.VectorFileOptions.VectorFilename := 'corpus.sgcvf';
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
oEmbeddings.OpenAIOptions.ApiKey := 'sk-...';
oEmbeddings.EmbeddingsOptions.Model := 'text-embedding-3-small';
oEmbeddings.EmbeddingsOptions.ChunkSize := 4096;
oEmbeddings.Database := oDB;
oEmbeddings.OnCreateEmbeddingsProgress := EmbeddingsProgress;
// One pass over the corpus, done once.
oEmbeddings.CreateEmbeddingsFromFile('manual.txt');
// Then, per question, retrieve the nearest chunk.
vContext := oEmbeddings.GetEmbedding('How do I reset the device?', '');
end;
procedure TForm1.EmbeddingsProgress(Sender: TObject;
aPosition: Int64; var aContinue: Boolean);
begin
ProgressBar1.Position := aPosition;
aContinue := not CancelRequested;
end;
// includes: sgcAI.hpp, sgcAI_OpenAI_Embeddings.hpp, sgcAI_DB_Vector_File.hpp
TsgcAIDatabaseVectorFile *oDB = new TsgcAIDatabaseVectorFile(NULL);
oDB->VectorFileOptions->InputFilename = "corpus.sgcif";
oDB->VectorFileOptions->VectorFilename = "corpus.sgcvf";
TsgcAIOpenAIEmbeddings *oEmbeddings = new TsgcAIOpenAIEmbeddings(NULL);
oEmbeddings->OpenAIOptions->ApiKey = "sk-...";
oEmbeddings->Database = oDB;
oEmbeddings->CreateEmbeddingsFromFile("manual.txt");
String vContext = oEmbeddings->GetEmbedding("How do I reset the device?", "");
最もよく使うメンバーです。
Database には任意のベクトルストアコンポーネントを指定できます。ローカルファイルなら TsgcAIDatabaseVectorFile、マネージドインデックスなら TsgcAIDatabaseVectorPinecone を使います。取り込み側のコードは変わりません。
Model の既定値は text-embedding-3-small です。ChunkSize はコーパスの分割方法を、WaitStoringData はストアへの書き込みペースを制御し、User はリクエストにタグを付けます。
CreateEmbeddings は文字列を、CreateEmbeddingsFromFile はファイル全体をインデックス化します。いずれもストア上でバッチを開き、チャンクごとに 1 ベクトルを送信してから閉じます。
GetEmbedding はクエリを埋め込みに変換し、最も近い保存済みテキストを返します。これがプロンプトにコンテキストとして貼り付ける文字列です。
OnCreateEmbeddingsStart は全体のサイズを通知し、OnCreateEmbeddingsProgress は進捗位置を通知するとともに継続フラグを備えているため、長時間の取り込みを中断できます。OnCreateEmbeddingsStop が処理を終了します。
OnBeforeCreateEmbedding では個々のリクエストを検査して却下でき、OnAfterCreateEmbedding ではリクエストとレスポンスの両方を受け取れます。トークン消費量の監査に役立ちます。
このコンポーネントが利用するサービスとプロトコルの一次情報です。