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:

コメントを送信

CAPTCHA