

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 構造化データストアに接続してナレッジベースを作成する
<a name="knowledge-base-structured-create"></a>

ナレッジベースを構造化データストアに接続するには、次のコンポーネントを指定します。
+ 

**クエリエンジンの設定**  
生成された SQL クエリを実行するコンピューティングサービスの設定。クエリエンジンは、自然言語ユーザークエリを、データストアからデータを抽出するために使用できる SQL クエリに変換するために使用されます。クエリエンジンとして Amazon Redshift を選択できます。この設定を選択するときは、以下を指定する必要があります。
  + 選択したクエリエンジンに応じたクラスター ID やワークグループ ARN などのコンピューティング接続メタデータ。
  + クエリエンジンを使用するための認証方法。適切なアクセス許可を持つ IAM サービスロール、クエリエンジンデータベースユーザー、またはデータベース認証情報にリンクされた AWS Secrets Manager シークレットを使用できます。
+ 

**ストレージ設定**  
データを含むデータストアの設定。Amazon Redshift Provisioned または Amazon Redshift Serverless に接続し、Amazon Redshift または をデータストア AWS Glue Data Catalog として使用できます。
+ 

**(オプション) クエリ設定**  
SQL 生成の精度を向上させるために、オプションのクエリ設定を使用できます。
  + **最大クエリ時間** ー クエリがタイムアウトするまでの時間。
  + **説明** ー テーブルまたは列に関するメタデータまたは補足情報を提供します。テーブルや列の説明、使用に関する注意事項、その他の属性を含めることができます。説明を追加すると、テーブルまたは列の構造に関する追加のコンテキストと情報が提供され、SQL クエリの生成が改善されます。
  + **インクルージョンと除外** ー SQL 生成に含めたり除外したりするテーブルまたは列のセットを指定します。このフィールドは、SQL クエリの範囲を、使用可能なテーブルまたは列の定義済みのサブセットに制限する場合に重要です。このオプションは、不要なテーブルまたは列の参照を減らすことで、生成プロセスを最適化するのに役立ちます。

    インクルージョンを指定すると、他のすべてのテーブルと列は無視されます。除外を指定すると、指定したテーブルと列は無視されます。
**注記**  
インクルージョンと除外はガードレールの代わりにはならず、モデルの精度を向上させることのみを目的としています。
  + **厳選されたクエリ** ー 定義済みの質問と回答の例のセット。質問は自然言語クエリ (NLQ) として記述され、回答は対応する SQL クエリです。これらの例は、生成すべきクエリの種類の例を示することで、SQL 生成プロセスに役立ちます。これらは、生成 SQL 出力の精度と関連性を向上させるための参照ポイントとして機能します。

自分のユースケースに対応するセクションを展開してください。

## コンソールを使用する
<a name="knowledge-base-structured-create-console"></a>

を使用して構造化データストアに接続するには AWS マネジメントコンソール、次の手順を実行します。

1. Amazon Bedrock コンソールを使用するアクセス許可を持つ IAM ID AWS マネジメントコンソール を使用して にサインインします。Amazon Bedrock コンソール ([https://console.aws.amazon.com/bedrock](https://console.aws.amazon.com/bedrock)) を開きます。

1. 左側のナビゲーションペインで **[ナレッジベース]** を選択します。

1. **[ナレッジベース]** セクションで、**[作成]** を選択し、次に **[構造化データストアを含むナレッジベース]**を選択します。

1. ナレッジベースに以下の詳細を設定します。

   1. (オプション) ナレッジベースのデフォルトの名前を変更し、説明を入力します。

   1. データストアからデータを取得するために使用するクエリエンジンを選択します。

   1. このナレッジベースを作成して管理するための適切なアクセス許可を持つ IAM サービスロールを選択します。Amazon Bedrock にサービスロールを作成させることも、作成したカスタムロールを選択することもできます。カスタムロールの作成方法の詳細については、「[構造化データストアを使用してナレッジベースを作成するためのクエリエンジンとアクセス許可を設定します](knowledge-base-prereq-structured.md)」を参照してください。

   1. (オプション) ナレッジベースに関連付けるタグを追加します。詳細については、「[Amazon Bedrock リソースにタグ付け](tagging.md)」を参照してください。

   1. **[Next]** (次へ) を選択します。

1. クエリエンジンを設定します。

   1. クラスターまたはワークグループを作成したサービスを選択します。次に、使用するクラスターまたはワークグループを選択します。

   1. 認証方法を選択し、必要なフィールドに入力します。

   1. メタデータを保存するデータストアを選択します。次に、データベースの名前を選択または入力します。

   1. (オプション) 必要に応じてクエリ設定を変更します。さまざまな設定の詳細については、このトピックの冒頭を参照してください。

   1. [**次へ**] を選択します。

1. ナレッジベース設定を確認し、必要に応じてセクションを編集します。確定してナレッジベースを作成します。

## API を使用する
<a name="knowledge-base-structured-create-api"></a>

Amazon Bedrock API を使用して構造化データストアに接続するには、次の一般的なリクエスト本文を使用して、[Amazon Bedrock エージェントのビルドタイムエンドポイント](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bra-bt)を使用して [CreateKnowledgeBase](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_CreateKnowledgeBase.html) リクエストを送信します。

```
{
    "name": "string",
    "roleArn": "string",
    "knowledgeBaseConfiguration": {
        "type": "SQL",
        "sqlKnowledgeBaseConfiguration": [SqlKnowledgeBaseConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_SqlKnowledgeBaseConfiguration.html)
    },
    "description": "string",
    "clientToken": "string",
    "tags": {
        "string": "string"
    }
}
```

以下のフィールドが必要です。


****  

| フィールド | 基本的な説明 | 
| --- | --- | 
| 名前 | ナレッジベースの名前 | 
| roleArn | 適切なアクセス許可を持つ[ナレッジベースサービスロール](kb-permissions.md)。コンソールを使用して、適切なアクセス許可を持つサービスロールを自動的に作成できます。 | 
| knowledgeBaseConfiguration | ナレッジベースの設定が含まれます。構造化データベースの場合は、SQL を type と指定し、sqlKnowledgeBaseConfiguration フィールドを含めます。 | 

次のフィールドはオプションです。


****  

| フィールド | 使用アイテム | 
| --- | --- | 
| 説明 | ナレッジベースの説明を含めるため。 | 
| clientToken | API リクエストが 1 回だけ完了するようにします。詳細については、「[べき等性の確保](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html)」を参照してください。 | 
| タグ | タグをエイリアスに関連付ける場合に指定します。詳細については、「[Amazon Bedrock リソースにタグ付け](tagging.md)」を参照してください。 | 

`SQLKnowledgeBaseConfiguration` は、使用するクエリエンジンによって異なります。Amazon Redshift の場合、`type` フィールドを `REDSHIFT` と指定し、[RedshiftConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftConfiguration.html) にマッピングされる `redshiftConfiguration` フィールドを含めます。[RedshiftConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftConfiguration.html) では、次のフィールドを設定します。

### queryEngineConfiguration
<a name="w2aac28c10c27c15b9b3c17b1"></a>

以下のタイプのクエリエンジンを設定できます。

#### Amazon Redshift Provisioned
<a name="w2aac28c10c27c15b9b3c17b1b5b1"></a>

Amazon Redshift データベースが専用コンピューティングノードにプロビジョニングされている場合、`queryEngineConfiguration` フィールドの値は、次の形式の [RedshiftQueryEngineConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftQueryEngineConfiguration.html) である必要があります。

```
{
    "type": "PROVISIONED",
    "provisionedConfiguration": {
        "clusterIdentifier": "string",
        "authConfiguration": [RedshiftProvisionedAuthConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftProvisionedAuthConfiguration.html)
    },
}
```

`clusterIdentifier` フィールドにクラスターの ID を指定します。[RedshiftProvisionedAuthConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftProvisionedAuthConfiguration.html) は、使用している承認のタイプによって異なります。承認方法に一致するタブを選択します。

------
#### [ IAM role ]

IAM ロールで承認する場合は、[RedshiftProvisionedAuthConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftProvisionedAuthConfiguration.html) のタイプとして `IAM` のみを指定し、追加のフィールドを指定する必要はありません。

```
{
    "type": "IAM"
}
```

------
#### [ Temporary credentials user name ]

データベースユーザー名で承認する場合は、`type` を `USERNAME` として指定し、`RedshiftProvisionedAuthConfig` の `databaseUser` フィールドでユーザー名を指定します。

```
{
    "type": "USERNAME",
    "databaseUser": "string"
}
```

------
#### [ AWS Secrets Manager ]

で認可する場合は AWS Secrets Manager、 を `type` として指定`USERNAME_PASSWORD`し、 の `usernamePasswordSecretArn`フィールドにシークレットの ARN を指定します`RedshiftProvisionedAuthConfig`。

```
{
    "type": "USERNAME_PASSWORD",
    "usernamePasswordSecretArn": "string"
}
```

------

#### Amazon Redshift Serverless
<a name="w2aac28c10c27c15b9b3c17b1b5b3"></a>

Amazon Redshift Serverless を使用している場合、`queryConfiguration` フィールドの値は、次の形式の [RedshiftQueryEngineConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftQueryEngineConfiguration.html) である必要があります。

```
{
    "type": "SERVERLESS",
    "serverlessConfiguration": {
        "workgroupArn": "string",
        "authConfiguration": 
    }
}
```

`workgroupArn` フィールドにワークグループの ARN を指定します。[RedshiftServerlessAuthConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftServerlessAuthConfiguration.html) は、使用している承認のタイプによって異なります。承認方法に一致するタブを選択します。

------
#### [ IAM role ]

IAM ロールで承認する場合は、`RedshiftServerlessAuthConfiguration` で タイプとして `IAM` のみを指定し、追加のフィールドを指定する必要はありません。

```
{
    "type": "IAM"
}
```

------
#### [ AWS Secrets Manager ]

で認可する場合は AWS Secrets Manager、 を `type` として指定`USERNAME_PASSWORD`し、 の `usernamePasswordSecretArn`フィールドにシークレットの ARN を指定します`RedshiftServerlessAuthConfiguration`。

```
{
    "type": "USERNAME_PASSWORD",
    "usernamePasswordSecretArn": "string"
}
```

------

### storageConfigurations
<a name="w2aac28c10c27c15b9b3c17b3"></a>

このフィールドは、単一の [RedshiftQueryEngineStorageConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_RedshiftQueryEngineStorageConfiguration.html) を含む配列にマッピングされ、その形式はデータの保存場所によって異なります。

#### AWS Glue Data Catalog
<a name="w2aac28c10c27c15b9b3c17b3b5b1"></a>

データが に保存されている場合 AWS Glue Data Catalog、 は次の形式`RedshiftQueryEngineStorageConfiguration`である必要があります。

```
{
    "type": "AWS_DATA_CATALOG",
    "awsDataCatalogConfiguration": {
        "tableNames": ["string"]
    }
}
```

ナレッジベースを接続する各テーブルの名前を、`tableNames` がマッピングする配列に追加します。

**注記**  
[クロスデータベースクエリ](https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html) (`${databaseName}.${tableName}`) で説明されているパターンにテーブル名を入力します。`${databaseName.*}` を指定することで、すべてのテーブルを含めることができます。

#### Amazon Redshift データベース
<a name="w2aac28c10c27c15b9b3c17b3b5b3"></a>

データが Amazon Redshift データベースに保存されている場合、`RedshiftQueryEngineStorageConfiguration` は次の形式である必要があります。

```
{
    "type": "string",
    "redshiftConfiguration": {
        "databaseName": "string"
    }
}
```

`databaseName` フィールドに Amazon Redshift データベースの名前を指定します。

**注記**  
[クロスデータベースクエリ](https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html) (`${databaseName}.${tableName}`) で説明されているパターンにテーブル名を入力します。`${databaseName.*}` を指定することで、すべてのテーブルを含めることができます。

データベースが Amazon SageMaker AI Lakehouse を介してマウントされている場合、データベース名は *\$1\$1db\$1@\$1\$1schema\$1* の形式になります。

### queryGenerationConfiguration
<a name="w2aac28c10c27c15b9b3c17b5"></a>

このフィールドは、データのクエリ方法の設定に使用できる、次の [QueryGenerationConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationConfiguration.html) にマッピングされます。

```
{
    "executionTimeoutSeconds": number,
    "generationContext": {
        "tables": [
            {
                "name": "string",
                "description": "string",
                "inclusion": "string",
                "columns": [
                    {
                        "name": "string",
                        "description": "string",
                        "inclusion": "string"
                    },
                    ...
                ]
            },
            ...
        ],
        "curatedQueries": [
            {
                "naturalLanguage": "string",
                "sql": "string"
            },
            ...
        ]
    }
}
```

クエリをタイムアウトさせる場合は、`executionTimeoutSeconds` フィールドにタイムアウト時間を秒単位で指定します。

`generationContext` フィールドは [QueryGenerationContext](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationContext.html) オブジェクトにマッピングされ、以下のオプションを必要なだけ設定できます。

**重要**  
生成コンテキストを含めると、クエリエンジンは SQL の生成時にそのコンテキストを適用しようと最善を尽くします。生成コンテキストは非決定性であり、モデルの精度を向上させることのみを目的としています。精度を確保するには、生成された SQL クエリを検証します。

含めることができる生成コンテキストについては、以下のセクションを展開します。

#### データベース内のテーブルまたは列の説明を追加する
<a name="w2aac28c10c27c15b9b3c17b5c15b1"></a>

データベースをクエリするための SQL 生成の精度を向上させるために、短いテーブルまたは列名よりも詳細なコンテキストを提供するテーブルまたは列の説明を指定できます。以下を行うことができます。
+ テーブルの説明を追加するには、`tables` 配列に [QueryGenerationTable](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationTable.html) オブジェクトを含めます。そのオブジェクトで、次の例のように、`name` フィールドにテーブルの名前を指定し、`description` フィールドに説明を指定します。

  ```
  {
      "name": "database.schema.tableA",
      "description": "Description for Table A"
  }
  ```
+ 列の説明を追加するには、`tables` 配列に [QueryGenerationTable](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationTable.html) オブジェクトを含めます。そのオブジェクトで、`name` フィールドにテーブルの名前を指定し、[QueryGenerationColumn](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationColumn.html) の配列にマッピングされる `columns` フィールドを含めます。`QueryGenerationColumn` オブジェクトには、次の例のように、`name` フィールドに列の名前、`description` フィールドに説明を含めます。

  ```
  {
      "name": "database.schema.tableA",
      "columns": [
          {
              "name": "Column A",
              "description": "Description for Column A"
          }
      ]
  }
  ```
+ 次の例のように、テーブルと列の両方の説明を追加できます。

  ```
  {
      "name": "database.schema.tableA",
      "description": "Description for Table A",
      "columns": [
          {
              "name": "columnA",
              "description": "Description for Column A"
          }
      ]
  }
  ```
**注記**  
[クロスデータベースクエリ](https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html)で説明されているパターンにテーブル名と列名を入力します。データベースが の場合 AWS Glue Data Catalog、形式は です`awsdatacatalog.gluedatabase.table`。

#### データベースにテーブルまたは列を含めるか除外する
<a name="w2aac28c10c27c15b9b3c17b5c15b3"></a>

[QueryGenerationTable](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationTable.html) オブジェクトと [QueryGenerationColumn](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationColumn.html) オブジェクトの `inclusion` フィールドを使用して、SQL の生成時に含めるか除外するテーブルまたは列を提案できます。`inclusion` フィールドに次のいずれかの値を指定できます。
+ INCLUDE – SQL の生成時にコンテキストとして含まれるのは、指定したテーブルまたは列のみです。
+ EXCLUDE – 指定したテーブルまたは列は、SQL の生成時にコンテキストとして除外されます。

テーブルまたは列を含めるか除外するかは、次の方法で指定できます。
+ テーブルを含めるか除外するには、`tables` 配列に [QueryGenerationTable](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationTable.html) オブジェクトを含めます。そのオブジェクトで、次の例のように、`name` フィールドにテーブルの名前を指定し、`inclusion` フィールドにテーブルを含めるか除外するかを指定します。

  ```
  {
      "name": "database.schema.tableA",
      "inclusion": "EXCLUDE"
  }
  ```

  クエリエンジンは、SQL を生成するための追加コンテキストに `Table A` を追加しません。
+ 列を含めるか除外するには、`tables` 配列に [QueryGenerationTable](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationTable.html) オブジェクトを含めます。そのオブジェクトで、`name` フィールドにテーブルの名前を指定し、[QueryGenerationColumn](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationColumn.html) の配列にマッピングされる `columns` フィールドを含めます。`QueryGenerationColumn` オブジェクトで、次の例のように、`name` フィールドに列の名前を含め、`inclusion` フィールドに列を含めるか除外するかを指定します。

  ```
  {
      "name": "database.schema.tableA",
      "columns": [
          {
              "name": "database.schema.tableA.columnA",
              "inclusion": "EXCLUDE"
          }
      ]
  }
  ```

  SQL 生成は、SQL の生成時にコンテキスト内の `Table A` で `Column A` を無視します。
+ 次の例のように、インクルージョンまたは除外を指定するときにテーブルと列を組み合わせることができます。

  ```
  {
      "name": "database.schema.tableA",
      "inclusion": "INCLUDE",
      "columns": [
          {
              "name": "database.schema.tableA.columnA",
              "inclusion": "EXCLUDE"
          }
      ]
  }
  ```

  SQL 生成には `Table A` が含まれますが、SQL 生成のコンテキストを追加するときは `Column A` は除外されます。

**重要**  
テーブルと列の除外はガードレールに代わるものではありません。これらのテーブルと列のインクルージョンと除外は、SQL の生成時にモデルが考慮する追加のコンテキストとして使用されます。

#### 自然言語と SQL クエリのマッピング例をクエリエンジンに渡す
<a name="w2aac28c10c27c15b9b3c17b5c15b5"></a>

ユーザークエリを SQL クエリに変換する際のクエリエンジンの精度を向上させるには、[CuratedQuery](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_CuratedQuery.html) オブジェクトの配列にマッピングされる [QueryGenerationContext](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_QueryGenerationContext.html) オブジェクトの `curatedQueries` フィールドに例を指定できます。各オブジェクトには、以下のフィールドが含まれています。
+ naturalLanguage – 自然言語でのクエリの例
+ sql – 自然言語クエリに対応する SQL クエリ