先日AWSからS3をベースとしたベクトルストアである Amazon S3 Vectors がプレビューリリースされました。この記事ではマネージメントコンソールを活用したナレッジの作成と検索テストの手順を解説します。
ベクトルストアとナレッジ
ベクトル検索(Vector Search)とは、高次元の数値ベクトル(特徴量)を使って類似性検索を行う手法です。特に、自然言語処理(NLP)、画像・音声検索、レコメンドなどで広く使われています。
従来の検索は完全一致や部分一致などで似た文字列
を特定しますが、ベクトル検索では、検索対象は文字列に限らず非構造化
データを取り扱うことができるのが大きな特徴です。また生成AIと組み合わせることでテキストの「意味」をベクトル化させることが可能となり、似た意味を持つ言葉を検索する、といったことが可能です。
たとえば「ねこ」「いぬ」「イルカ」の3つを想像すると「ねこ」は「いぬ」の方が「イルカ」より一般的に近しい存在です。生成AIが与えられた文字列をこの世に意味を込めた数値に変換してくれることで従来は行えなかった検索が可能となりました。社内文章やマニュアルの検索などでも質問の意味を理解し、近しい意味を持つテキストを出力する、などの利用が期待されている技術です。
そしてそのベクトル化されたデータを格納し、検索を可能とするのがベクトルストアです。AWSでは従来OpenSeachやPostgreSQL(+pgvector)など複数のベクトルストアを提供していましたが、Amazon S3 Vectorsが新しいラインナップとして加わることになります。記事執筆の2025年7月時点ではまだプレビューですのでパフォーマンスについて触れるのは野暮ですが、コスト面から専用ベクトルストアを持つS3 Vectorsに期待が集まっています。

さっそくやってみる
では今日はマネージメントコンソールを利用してAmazon Bedrockのナレッジ(特定の文書がベクトル化されベクトルストアに保存されたもの)にS3 Vectorsを設定してみます。
1. S3 Vectors バケットの作成
現時点ではまだプレビューであり提供されているリージョンが限定されているため、バージニアリージョンを用います。
S3のマネージメントコンソールからベクトルバケットをクリックします。

ベクトルバケットを作成
をクリックします。

適当な名前で作成を行います。

次にバケットをクリックして遷移する詳細画面からベクトルインデックスを作成
をクリックします。

適当な名前を付けディメンションを1024
と入力します。そして距離メトリックをコサイン
に設定し、インデックスを作成します。

ディメンション
ベクトルストアにはベクトル化されたデータが格納されます。ベクトルとは数学に出てきた以下の様なものです。
[0,-1.0,5](3次元ベクトル)
テキストのベクトル化には後程指定する埋め込みモデルという生成AIモデルの一種を用います。このモデルが文字列を意味を数字に変換します。用いるモデル毎に要求する次元が異なります。後程指定する埋め込みモデルでは1024次元ベクトルを生成しますのでここでは1024
を指定しておきます。なおベクトルストアが正しい精度で動作するためには、すべてのデータ(生成されたベクトル)は必ず同じモデルによりベクトル化され同じベクトル次元数を持つ必要があります。
距離メトリック
ベクトル化されたデータは検索に使われます。検索を行う文字列もベクトル化され比較が行われます。同じ方向を向ているものを特定するのがコサイン
、一番近い距離にいるものを特定するのがユークリッド
です。

Aにコサインで近いのはB、ユークリッドで近いのがCです。
たとえば、「和風の静かなカフェで読書したい」という気分のとき、 コサイン類似度は「方向性」、つまりどれくらい“雰囲気が似ているか”を測ります。一方ユークリッド距離は「全体としての近さ」を実際の距離のように測ります。
たとえば「和風の静かなカフェで読書したい」ときに「洋風」だが読書に最適なカフェがある場合、ベクトルは反対方向を向きますが、その他の要件(静かで読書に向く)を満たしているため近しい場所に存在しています。このような場合ユークリッドの方がいい結果を出します。
実際は取り扱うデータや目的ごとにどちらがいいかは異なりますので、両方を試してみて最適な検索方法を確定させることをお勧めします。
Amazon Bedrock でモデルの有効化
ではこれから作成したS3 Vectors バケットとインデックスを活用したチャットボットを作成します。まずは埋め込みモデルのTitan Text Embeddings V2
とチャット用モデルのNova Lite
を有効化します。


ナレッジの作成
では次にナレッジを作成します。


ベクトルストアを含むナレッジベース
を選択します。

BedrockではURLベースとしたウェブサイトなど様々なデータソースを指定できますが、S3 Vectorsはプレビュー中であるためS3 バケットに存在しているテキストデータにのみ対応しています。このためS3
を選択し次へ
をクリックします。

適当なテキストデータを含んでいるS3バケットを指定します。先ほど作ったS3 Vectors用バケットではなく汎用S3バケットを作成
してテキストデータをあらかじめアップロードしたものを指定し、次へ
をクリックします。

埋め込みモデルを指定します。


先ほど作成したS3 Vectorsバケットとインデックスを指定して次へ
をクリックします。

最後の確認画面でナレッジの作成
をクリックします。
作成されたら同期をクリックしデータのベクトル化(一般的に埋め込みと言われます)を開始します。

同期が完了したら画面右上からナレッジベースのテスト
をクリックします。

モデルにNova Lite
を選択してテストを行います。

次回は
このS3 Vectorsをサンプルコードから呼び出したいと思います。