RAG

RAG (Retrieval-Augmented Generation) 検索拡張生成(けんさくかくちょうせいせい)

核心概念(かくしんがいねん) 情報検索(じょうほうけんさく)大規模言語(だいきぼげんご) モデルを()() わせ、回答生成前(かいとうせいせいまえ)知識(ちしき) ベースから関連情報(かんれんじょうほう)検索(けんさく) する。

アーキテクチャフロー

  1. Query - ユーザーが質問(しつもん)入力(にゅうりょく)
  2. Retrieval - ベクトルデータベースから関連文書(かんれんぶんしょ)検索(けんさく)
  3. Augmentation - 検索結果(けんさくけっか)(もと)質問(しつもん)結合(けつごう)
  4. Generation - LLM が拡張(かくちょう) されたコンテキストに(もと) づいて回答(かいとう)生成(せいせい)

メリット

  • ハルシネーション(幻覚(げんかく) )の削減(さくげん)
  • 知識(ちしき)即時更新可能(そくじこうしんかのう) (モデルの再訓練不要(さいくんれんふよう)
  • 回答(かいとう)出典(しゅってん)追跡可能(ついせきかのう)

ユースケース

  • 企業(きぎょう) 知識(ちしき) ベース Q&A
  • 文書検索(ぶんしょけんさく)要約(ようやく)
  • カスタマーサポートボット

ベクトルデータベース実装 (Redis)

出典(しゅってん) :Redis University RU402 コースノート(のーと)

環境設定

初回実行時(しょかいじっこうじ) に embedding モデル all-MiniLM-L6-v2ダウンロード(だうんろーど)

python -m venv redisvenv
source ./redisvenv/bin/activate

pip install sentence_transformers
pip install imgbeddings

Redis でベクトルを保存

Redis as Vector Database

ベクトルは Redis に文字列形式(もじれつけいしき)保存(ほぞん) され、シリアライズ(しりあらいず) してから格納(かくのう) する必要(ひつよう) がある:

SET vec "0.00555776,0.06124274,-0.05503812,-0.08395513,-0.09052192,-0.01091553,-0.06539601,0.01099653,-0.07732834,0.0536432"

Hash と JSON データ型の使用

  1. all-MiniLM-L6-v2 embedding モデルでベクトルを計算(けいさん)
    • 最大(さいだい) 256 単語(たんご) のテキストを 384 次元(じげん) ベクトル空間(くうかん) にマッピング

Hash 保存方式

ベクトルはバイナリ(ばいなり) blob として Hash に保存(ほぞん)

{
    "content": "Understanding vector search is easy, but understanding all the mathematics behind a vector is not!",
    "genre": "technical",
    "embedding": "..."
}

FT.CREATE でインデックス作成

FT.CREATE doc_idx ON HASH PREFIX 1 doc: SCHEMA content AS content TEXT genre AS genre TAG embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE

設定(せってい) 説明(せつめい)

  • DIM 384 - ベクトル次元(じげん) (embedding モデルで決定(けってい)
  • HNSW - インデックス方法(ほうほう)
  • FLOAT32 - ベクトルデータ(がた)
  • COSINE - 距離計算方式(きょりけいさんほうしき)

JSON 保存方式

FT.CREATE doc_idx ON JSON PREFIX 2 doc: SCHEMA $.content as content TEXT $.genre AS genre TAG $.embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE

インデックス方法の比較

方法(ほうほう)説明(せつめい)適用(てきよう) シーン
FLAT(すべ) てのベクトルを(ひと) つずつ比較(ひかく)正確(せいかく) だが(おそ)小規模(しょうきぼ) データセット
HNSW確率(かくりつ) アルゴリズムを使用(しよう)精度(せいど)犠牲(ぎせい) にして性能(せいのう)向上(こうじょう)大規模(だいきぼ) データセット

注意(ちゅうい) :Cosine distance = 1 - Cosine similarity

関連トピック