ChatGPTのRAG(検索拡張生成)+ベクターDB経由の処理の流れ
💻フロー:RAG+ベクターDB検索の流れ
以下がベクターDBを利用したRAGの画面経由の処理フローです。又、ChatGPTは、以下の2つのパッケージを入れて確認しています。利用している言語は、C# .Net Framework 4.7です。
Install-Package OpenAI -Version 2.2.0 Install-Package Betalgo.Ranul.OpenAI -Version 9.0.4
👉 1. ユーザーが質問を入力後→ [検索ボタン]をクリック
👉 2. 質問文から埋め込みベクトル(ベクター)を生成 → [GetEmbedding()]
float[] questionEmbedding = await GetEmbedding(question);
このとき text-embedding-ada-002
モデルでベクトル化しています。
👉 3. ベクターDBで登録したDocumentEmbeddings(仮名) テーブルを全件取得し、コサイン類似度で比較
SELECT Id, Title, Chunk, Embedding FROM DocumentEmbeddings
その後、以下の手順で比較する:
Embedding
カラムに保存されたベクトル(float配列のJSON)を読み込む- 入力ベクトルと Cosine Similarity を計算
- 上位 N 件(既定値 = 3)を抽出
chunks.OrderByDescending(c => c.Similarity).Take(topN);
👉 4. 類似するチャンクをプロンプトに組み込む
string prompt = "以下の内容を参考に、質問に答えてください。\n"; foreach (var chunk in topChunks) { prompt += "\n---\n" + chunk.Chunk; }
👉 5. ChatGPT へ組み込んだプロンプトにて送信 → 応答生成
var completionResult = await openAi.ChatCompletion.CreateCompletion(...)
👉 6. 回答結果を画面に表示
RAG上のベクターDBの利用位置
処理段階 | ベクターDBとの関係 |
---|---|
質問入力 | ユーザー入力によるトリガー |
埋め込み生成(←RAG) | 入力をベクトルに変換 |
ベクター検索(←RAG) | ✅ 登録済みベクターDBから類似チャンク検索 |
回答生成(←RAG) | 検索結果をプロンプトとして ChatGPT に送信 |
表示 | 回答を表示 |
こんな感じで、動作します。ベクターDBは、SqlServer2022を利用している前提です。
Share this content:
コメントを送信