AIとLLM検索

ベクトル類似検索

意味が最も近いアイテムをタグで絞り込んで、アイテムそのものを保持する同じエンジンの中で見つけます。

インデックス
HNSW
平均の検索コスト
O(log N)
距離の指標
3
ステップ 1 / 6
インデックスを作成

次元数と指標はインデックスごとに固定です。HNSWのパラメーターは必要に応じて調整できます。

サンプルセッションplaying
# インデックスを作成
hotkv> VSIM.CREATEINDEX products 3 METRIC COSINE
OK

実際のHotKVコマンドと応答例を使ったアニメーションのウォークスルーです。任意のステップをクリックすると、そこに移動します。 コマンドと応答は、HotKVで実際に入力し表示されるとおり英語のままです。

課題

セマンティック検索、「これに似たもの」、重複排除は、どれも「保存されたアイテムのうち、これに最も近いものはどれか」という1つの問いに行き着きます。これに答えるには通常、メインのストアの隣に専用のベクトルデータベースが必要で、商品を更新するたびに両方に書き込まなければなりません。

HotKVでの解決方法

HotKVは、HNSWのベクトルインデックスをエンジンの中に持ちます。商品データは通常のキーに保存され、ベクトルは同じキー名でインデックス化され、それらのキーに付けたタグによって検索をカテゴリーやテナントの中に限定できます。書き込み経路は1つ、運用するシステムも1つです。

ステップごとに

コマンドごとに何が起きるか

  1. 01

    インデックスを作成

    次元数と指標はインデックスごとに固定です。HNSWのパラメーターは必要に応じて調整できます。

    VSIM.CREATEINDEX products 3 METRIC COSINE
  2. 02

    商品を保存

    商品データは、インデックスが使うキー名の下にある通常のハッシュです。

    HSET sku:1 name "Trail runner" price 89
  3. 03

    タグを付ける

    キーに付けたタグにより、ベクトル検索をカテゴリーの中に限定できます。

    TAG.SET sku:1 shoes running
  4. 04

    ベクトルをインデックス化

    ベクトルは同じキー名でインデックスに追加されます。

    VSIM.SET products sku:1 0.12 0.80 0.31
  5. 05

    タグの中で意味で検索

    クエリのテキストが埋め込まれ、タグを持つ最も近い商品が距離とともに返ります。

    VSIM.SEARCH products 3 0.10 0.82 0.29 FILTER shoes
  6. 06

    表示するデータを取得

    結果はキー名なので、商品データは同じサーバーで1回読み取るだけで手に入ります。

    HGETALL sku:1
活用シーン

実際のシナリオ

Eコマースの検索

買い物客は欲しいものを自分の言葉で入力します。カタログは意味で検索され、閲覧中のカテゴリーとショップに絞り込まれます。

重複の検出

新しいサポートチケットや出品は既存のものと比較され、ほぼ重複するものは人の目に触れる前に統合されます。

画像とメディアの類似性

画像モデルの埋め込みを使って、ライブラリ全体から見た目の似た写真やクリップを見つけます。

標準搭載

得られるもの

HNSWインデックス

大規模なインデックスでも高速さを保つ近似最近傍探索で、平均O(log N)です。

VSIM.CREATEINDEXVSIM.SEARCH

3つの指標

コサイン、L2、内積をインデックスごとに選べます。

METRIC

タグフィルター

指定したすべてのタグを持つキーに検索を限定します。

TAG.SETFILTER

永続化

インデックスは他のデータと同様に、スナップショットとAOFの書き換えに保存されます。

VSIM.INFO

よくある質問

HotKVが埋め込みを生成するのですか?

いいえ。お好みの埋め込みモデルでベクトルを作成し、VSIM.SETで保存します。

RAGパイプラインとはどう違いますか?

VSIMは汎用のベクトルインデックスです。RAGパイプラインは同じ考え方の上に、ドキュメント向けのチャンク分割、メタデータ、キーワードのハイブリッド検索を追加したものです。

どのプランに含まれますか?

ベクトル検索とタグはコアコマンドで、すべてのプランでライセンスなしで動作します。

関連するユースケース

ご自身のワークロードで試してみましょう

HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。