

# Amazon Bedrock のナレッジベースとしての Aurora PostgreSQL の使用
<a name="AuroraPostgreSQL.VectorDB"></a>

Aurora PostgreSQL DB クラスターを Amazon Bedrock のナレッジベースとして使用できます。詳細については、「[Amazon Aurora でベクトルストアを作成する](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup.html)」を参照してください。ナレッジベースは、Amazon S3 バケットに保存されている非構造化テキストデータを自動的に取得し、テキストチャンクとベクトルに変換して、PostgreSQL データベースに保存します。生成 AI アプリケーションでは、Agents for Amazon Bedrock を使用してナレッジベースに保存されているデータをクエリし、それらのクエリの結果を使用して基本的なモデルが提供する回答を補強できます。このワークフローは、取得拡張生成 (RAG) と呼ばれます。RAG の詳細については、「[取得拡張生成 (RAG)](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html)」を参照してください。

Aurora PostgreSQL を使用し、RAG を使って生成 AI アプリケーションを構築する方法の詳細については、この[ブログ記事](https://aws.amazon.com/blogs/database/build-generative-ai-applications-with-amazon-aurora-and-knowledge-bases-for-amazon-bedrock/)を参照してください。

**Topics**
+ [前提条件](#AuroraPostgreSQL.VectorDB.Prereq)
+ [Amazon Bedrock のナレッジベースとして使用する Aurora PostgreSQL の準備](#AuroraPostgreSQL.VectorDB.PreparingKB)
+ [Bedrock コンソールでのナレッジベースの作成](#AuroraPostgreSQL.VectorDB.CreatingKB)
+ [Amazon Bedrock 用の Aurora PostgreSQL ナレッジベースのクイック作成](AuroraPostgreSQL.quickcreatekb.md)

## 前提条件
<a name="AuroraPostgreSQL.VectorDB.Prereq"></a>

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](https://aws.amazon.com/about-aws/whats-new/2023/10/amazon-aurora-postgresql-pgvector-v0-5-0-hnsw-indexing/)」を参照してください。
+ RDS Data API
+ AWS Secrets Manager で管理されるユーザー。詳細については、「[Amazon Aurora および AWS Secrets Manager によるパスワード管理](rds-secrets-manager.md)」を参照してください。

## Amazon Bedrock のナレッジベースとして使用する Aurora PostgreSQL の準備
<a name="AuroraPostgreSQL.VectorDB.PreparingKB"></a>

以下のセクションで説明する手順に従って、Aurora PostgreSQL を Amazon Bedrock ナレッジベースとして使用する準備をします。

### Aurora PostgreSQL の作成と設定
<a name="AuroraPostgreSQL.VectorDB.CreatingDBC"></a>

Aurora PostgreSQL DB クラスターで Amazon Bedrock を設定するには、まず Aurora PostgreSQL DB クラスターを作成し、Amazon Bedrock で設定するための重要なフィールドに注意する必要があります。Aurora PostgreSQL DB クラスター作成の詳細については、「[Aurora PostgreSQL DB クラスターの作成と接続](CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.md)」を参照してください。
+ Aurora PostgreSQL DB クラスターの作成時に Data API を有効にします。サポートされているバージョンの詳細については、「[Amazon RDS Data API の使用](data-api.md)」を参照してください。
+ Aurora PostgreSQL DB クラスターの Amazon リソースネーム (ARN) を必ず書き留めてください。Amazon Bedrock で使用する DB クラスターを設定するには、これが必要です。詳細については、「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.ARN.html)」を参照してください。

### データベースへの接続と pgvector のインストール
<a name="AuroraPostgreSQL.VectorDB.ConnectingDB"></a>

接続ユーティリティのいずれかを使用して Aurora PostgreSQL に接続できます。これらのユーティリティの詳細については、「[Amazon Aurora PostgreSQL DB クラスターへの接続](Aurora.Connecting.md#Aurora.Connecting.AuroraPostgreSQL)」を参照してください。または、RDS コンソールのクエリエディタを使用してクエリを実行できます。クエリエディタを使用するには、RDS Data API が有効になっている Aurora DB クラスターが必要です。

1. マスターユーザーを使用してデータベースにログインし、pgvector をセットアップします。拡張機能がインストールされていない場合は、次のコマンドを使用します。

   ```
   CREATE EXTENSION IF NOT EXISTS vector;
   ```

   HNSW インデックス作成をサポートする `pgvector` 0.5.0 以降のバージョンを使用します。詳細については、「[HNSW インデックス作成による pgvector v0.5.0](https://aws.amazon.com/about-aws/whats-new/2023/10/amazon-aurora-postgresql-pgvector-v0-5-0-hnsw-indexing/)」を参照してください。

1. `pg_vector` がインストールされているバージョンを確認するには、以下のコマンドを使用します。

   ```
   SELECT extversion FROM pg_extension WHERE extname='vector';
   ```

### データベースオブジェクトと権限の設定
<a name="AuroraPostgreSQL.VectorDB.SetupDBObjects"></a>

1. Bedrock がデータのクエリに使用できる特定のスキーマを作成します。スキーマを作成するには以下のコマンドを使用します。

   ```
   CREATE SCHEMA bedrock_integration;
   ```

1. Bedrock がデータベースのクエリに使用できる新しいロールを作成します。次のコマンドを使用して、新しいロールを作成します。

   ```
   CREATE ROLE bedrock_user WITH PASSWORD 'password' LOGIN;
   ```
**注記**  
後で Secrets Manager のパスワードを作成する際に必要になるため、このパスワードを書き留めておきます。

   `psql` クライアントを使用している場合は、次のコマンドを使用して新しいロールを作成します。

   ```
   CREATE ROLE bedrock_user LOGIN;
   \PASSWORD password;
   ```

1. `bedrock_integration` スキーマを管理する `bedrock_user` アクセス許可を付与します。これにより、スキーマ内にテーブルまたはインデックスを作成できます。

   ```
   GRANT ALL ON SCHEMA bedrock_integration to bedrock_user;
   ```

1. `bedrock_user` としてログインし、`bedrock_integration schema` にテーブルを作成します。

   ```
   CREATE TABLE bedrock_integration.bedrock_kb (id uuid PRIMARY KEY, embedding vector(n), chunks text, metadata json, custom_metadata jsonb);
   ```

   このコマンドは、Titan 埋め込みを持つ `bedrock_integration` スキーマに `bedrock_kb` テーブルを作成します。

   `vector(n)` データ型の n を、使用している埋め込みモデルの適切なディメンションに置き換えます。ディメンションを選択するには、以下の推奨事項を参考にしてください。
   + Titan v2 モデルの場合は、`vector(1024)`、`vector(512)`、または `vector (256)` を使用します。詳細については、「[Amazon Titan Embeddings Text](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-titan-embed-text.html)」を参照してください。
   + Titan v1.2 モデルの場合は、`vector(1536)` を使用します。詳細については、「[Amazon Titan Multimodal Embeddings G1](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-titan-embed-mm.html)」を参照してください。
   + Cohere Embed モデルの場合は、`vector(1024)` を使用します。詳細については、「[Cohere Embed models](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-embed.html)」を参照してください。
   + Cohere Embed Multilingual v3 の場合は、`vector(1024)` を使用します。

   最初の 4 つの列は必須です。メタデータ処理のために、Bedrock はメタデータファイルから `custom_metadata` 列にデータを書き込みます。メタデータとフィルタリングを使用する予定がある場合は、この列を作成することをお勧めします。`custom_metadata` 列を作成しない場合は、取り込みを開始する前に、テーブル内のメタデータ属性ごとに個別の列を追加します。詳細については、「[Configure and customize queries and response generation](https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html)」を参照してください。

1. Bedrock がデータのクエリに使用するのに必要なインデックスを作成するには、次の手順に従います。
   + 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);
     ```
   + テキストデータをクエリするために Bedrock で使用できるインデックスを作成します。

     ```
     CREATE INDEX ON bedrock_integration.bedrock_kb USING gin (to_tsvector('simple', chunks));
     ```
   + カスタムメタデータの列を作成した場合は、メタデータをクエリするために Bedrock で使用できるインデックスを作成します。

     ```
     CREATE INDEX ON bedrock_integration.bedrock_kb USING gin (custom_metadata);
     ```

### Secrets Manager でのシークレットの作成
<a name="AuroraPostgreSQL.VectorDB.SecretManager"></a>

Secrets Manager では、Aurora 認証情報を保存して、アプリケーションに安全に送信できます。Aurora PostgreSQL DB クラスターの作成時に AWS Secrets Manager オプションを選択しなかった場合は、ここでシークレットを作成できます。AWS Secrets Manager データベースシークレットの作成の詳細については、「[AWS Secrets Manager database secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html)」を参照してください。

## Bedrock コンソールでのナレッジベースの作成
<a name="AuroraPostgreSQL.VectorDB.CreatingKB"></a>

ナレッジベースのベクトルストアとして使用するように 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` テーブルを作成します。
+ テーブルを作成するときは、必ず指定された列とデータ型で設定してください。テーブルにリストされている列名の代わりに、任意の列名を使用できます。ナレッジベースのセットアップ時に参照するために、選択した名前を必ずメモしておきます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.VectorDB.html)

これらの詳細を使用して、Bedrock コンソールでナレッジベースを作成できるようになりました。ベクトルインデックスの設定とナレッジベース情報の作成の詳細については、「[Create a vector store in Amazon Aurora](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html)」および「[Create a vector store in Amazon Aurora](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-create.html)」を参照してください。

Aurora をナレッジベースとして追加すると、データソースを取り込んで検索とクエリを実行できるようになります。詳細については、「[Ingest your data sources into the Knowledge Base](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-ingest.html)」を参照してください。