Amazon Bedrock のナレッジベースとしての Aurora PostgreSQL の使用
Aurora PostgreSQL DB クラスターを Amazon Bedrock のナレッジベースとして使用できます。詳細については、「Amazon Aurora でベクトルストアを作成する」を参照してください。ナレッジベースは、Amazon S3 バケットに保存されている非構造化テキストデータを自動的に取得し、テキストチャンクとベクトルに変換して、PostgreSQL データベースに保存します。生成 AI アプリケーションでは、Agents for Amazon Bedrock を使用してナレッジベースに保存されているデータをクエリし、それらのクエリの結果を使用して基本的なモデルが提供する回答を補強できます。このワークフローは、取得拡張生成 (RAG) と呼ばれます。RAG の詳細については、「取得拡張生成 (RAG)」を参照してください。
Aurora PostgreSQL を使用し、RAG を使って生成 AI アプリケーションを構築する方法の詳細については、このブログ記事
トピック
前提条件
Amazon Bedrock のナレッジベースとして Aurora PostgreSQL クラスターを使用するための以下の前提条件を理解してください。大まかに言うと、Bedrock で使用する以下のサービスを設定する必要があります。
以下のいずれかのバージョンで作成された Amazon Aurora PostgreSQL DB クラスター:
16.1 以降のすべてのバージョン
15.4 以降のバージョン
14.9 以降のバージョン
13.12 以降のバージョン
12.16 以降のバージョン
注記
ターゲットデータベースで
pgvector
拡張機能を有効にし、バージョン 0.5.0 以降を使用する必要があります。詳細については、「HNSW インデックス作成による pgvector v0.5.0」を参照してください。 RDS Data API
AWS Secrets Manager で管理されるユーザー。詳細については、「Amazon Aurora および AWS Secrets Manager によるパスワード管理」を参照してください。
Amazon Bedrock のナレッジベースとして使用する Aurora PostgreSQL の準備
以下のセクションで説明する手順に従って、Aurora PostgreSQL を Amazon Bedrock ナレッジベースとして使用する準備をします。
Aurora PostgreSQL の作成と設定
Aurora PostgreSQL DB クラスターで Amazon Bedrock を設定するには、まず Aurora PostgreSQL DB クラスターを作成し、Amazon Bedrock で設定するための重要なフィールドに注意する必要があります。Aurora PostgreSQL DB クラスター作成の詳細については、「Aurora PostgreSQL DB クラスターの作成と接続」を参照してください。
Aurora PostgreSQL DB クラスターの作成時に Data API を有効にします。サポートされているバージョンの詳細については、「RDS Data API の使用」を参照してください。
Aurora PostgreSQL DB クラスターの Amazon リソースネーム (ARN) を必ず書き留めてください。Amazon Bedrock で使用する DB クラスターを設定するには、これが必要です。詳細については、「Amazon リソースネーム (ARN)」を参照してください。
データベースへの接続と pgvector のインストール
接続ユーティリティのいずれかを使用して Aurora PostgreSQL に接続できます。これらのユーティリティの詳細については、「Amazon Aurora PostgreSQL DB クラスターへの接続」を参照してください。または、RDS コンソールのクエリエディタを使用してクエリを実行できます。クエリエディタを使用するには、RDS Data API が有効になっている Aurora DB クラスターが必要です。
-
マスターユーザーを使用してデータベースにログインし、pgvector をセットアップします。拡張機能がインストールされていない場合は、次のコマンドを使用します。
CREATE EXTENSION IF NOT EXISTS vector;
HNSW インデックス作成をサポートする
pgvector
0.5.0 以降のバージョンを使用します。詳細については、「HNSW インデックス作成による pgvector v0.5.0」を参照してください。 -
pg_vector
がインストールされているバージョンを確認するには、以下のコマンドを使用します。SELECT extversion FROM pg_extension WHERE extname='vector';
データベースオブジェクトと権限の設定
Bedrock がデータのクエリに使用できる特定のスキーマを作成します。スキーマを作成するには以下のコマンドを使用します。
CREATE SCHEMA bedrock_integration;
Bedrock がデータベースのクエリに使用できる新しいロールを作成します。次のコマンドを使用して、新しいロールを作成します。
CREATE ROLE bedrock_user WITH PASSWORD '
password
' LOGIN;注記
後で Secrets Manager のパスワードを作成する際に必要になるため、このパスワードを書き留めておきます。
psql
クライアントを使用している場合は、次のコマンドを使用して新しいロールを作成します。CREATE ROLE bedrock_user LOGIN; \PASSWORD
password
;bedrock_integration
スキーマを管理するbedrock_user
アクセス許可を付与します。これにより、スキーマ内にテーブルまたはインデックスを作成できます。GRANT ALL ON SCHEMA bedrock_integration to bedrock_user;
bedrock_user
としてログインし、bedrock_integration schema
にテーブルを作成します。CREATE TABLE bedrock_integration.bedrock_kb (id uuid PRIMARY KEY, embedding vector(
n
), chunks text, metadata json);このコマンドは、Titan 埋め込みを持つ
bedrock_integration
スキーマにbedrock_kb
テーブルを作成します。vector(
データ型の n を、使用している埋め込みモデルの適切なディメンションに置き換えます。ディメンションを選択するには、以下の推奨事項を参考にしてください。n
)Titan v2 モデルの場合は、
vector(1024)
、vector(512)
、またはvector (256)
を使用します。詳細については、「Amazon Titan Embeddings Text」を参照してください。Titan v1.2 モデルの場合は、
vector(1536)
を使用します。詳細については、「Amazon Titan Multimodal Embeddings G1」を参照してください。Cohere Embed モデルの場合は、
vector(1024)
を使用します。詳細については、「Cohere Embed models」を参照してください。Cohere Embed Multilingual v3 の場合は、
vector(1024)
を使用します。
bedrock がデータのクエリに使用できるコサイン演算子を使用してインデックスを作成することをお勧めします。
CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops);
並列インデックス構築を使用する
pgvector
0.6.0 以降のバージョンでは、ef_construction
の値を 256 に設定することをお勧めします。CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops) WITH (ef_construction=256);
Secrets Manager でのシークレットの作成
Secrets Manager では、Aurora 認証情報を保存して、アプリケーションに安全に送信できます。Aurora PostgreSQL DB クラスターの作成時に AWS Secrets Manager オプションを選択しなかった場合は、ここでシークレットを作成できます。AWS Secrets Manager データベースシークレットの作成の詳細については、「AWS Secrets Manager database secret」を参照してください。
Bedrock コンソールでのナレッジベースの作成
ナレッジベースのベクトルストアとして使用するように Aurora PostgreSQL を準備するときは、Amazon Bedrock コンソールで入力が必要な以下の詳細情報を収集する必要があります。
Amazon Aurora DB クラスター ARN — DB クラスターの ARN。
シークレット ARN — DB クラスターの AWS Secrets Manager キーの ARN。
データベース名 - データベースの名前。例えば、デフォルトのデータベース
postgres
を使用できます。テーブル名 – 次のようなコマンドを使用してテーブルを作成するときは、スキーマ修飾名を指定することをお勧めします。
CREATE TABLE bedrock_integration.bedrock_kb;
このコマンドは、
bedrock_integration
スキーマにbedrock_kb
テーブルを作成します。テーブルを作成するときは、必ず指定された列とデータ型で設定してください。テーブルにリストされている列名の代わりに、任意の列名を使用できます。ナレッジベースのセットアップ時に参照するために、選択した名前を必ずメモしておきます。
列名 データ型 説明 id UUID プライマリキー 各レコードに固有の識別子が含まれます。
チャンク [テキスト] データソースからの未加工テキストのチャンクが含まれます。
埋め込み ベクトル データソースのベクトル埋め込みが含まれます。
metadata JSON ソースアトリビューションを実行し、データインジェストとクエリを可能にするために必要なメタデータが含まれています。
これらの詳細を使用して、Bedrock コンソールでナレッジベースを作成できるようになりました。ベクトルインデックスの設定とナレッジベース情報の作成の詳細については、「Create a vector store in Amazon Aurora」および「Create a vector store in Amazon Aurora」を参照してください。
Aurora をナレッジベースとして追加すると、データソースを取り込んで検索とクエリを実行できるようになります。詳細については、「Ingest your data sources into the Knowledge Base」を参照してください。