構造化データストアに接続してナレッジベースを作成する - Amazon Bedrock

構造化データストアに接続してナレッジベースを作成する

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

  • クエリエンジンの設定

    生成された 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 出力の精度と関連性を向上させるための参照ポイントとして機能します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Amazon Bedrock API を使用して構造化データストアに接続するには、次の一般的なリクエスト本文を使用して、Amazon Bedrock エージェントのビルドタイムエンドポイントを使用して CreateKnowledgeBase リクエストを送信します。

{ "name": "string", "roleArn": "string", "knowledgeBaseConfiguration": { "type": "SQL", "sqlKnowledgeBaseConfiguration": SqlKnowledgeBaseConfiguration }, "description": "string", "clientToken": "string", "tags": { "string": "string" } }

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

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

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

フィールド 使用アイテム
description ナレッジベースの説明を含めるため。
clientToken API リクエストが 1 回だけ完了するようにします。詳細については、「べき等性の確保」を参照してください。
tags タグをエイリアスに関連付ける場合に指定します。詳細については、「Amazon Bedrock リソースにタグ付け」を参照してください。

SQLKnowledgeBaseConfiguration は、使用するクエリエンジンによって異なります。Amazon Redshift の場合、type フィールドを REDSHIFT と指定し、RedshiftConfiguration にマッピングされる redshiftConfiguration フィールドを含めます。RedshiftConfiguration では、次のフィールドを設定します。

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

Amazon Redshift データベースが専用コンピューティングノードにプロビジョニングされている場合、queryEngineConfiguration フィールドの値は、次の形式の RedshiftQueryEngineConfiguration である必要があります。

{ "type": "PROVISIONED", "provisionedConfiguration": { "clusterIdentifier": "string", "authConfiguration": RedshiftProvisionedAuthConfiguration }, }

clusterIdentifier フィールドにクラスターの ID を指定します。RedshiftProvisionedAuthConfiguration は、使用している承認のタイプによって異なります。承認方法に一致するタブを選択します。

IAM role

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

{ "type": "IAM" }
Temporary credentials user name

データベースユーザー名で承認する場合は、typeUSERNAME として指定し、RedshiftProvisionedAuthConfigdatabaseUser フィールドでユーザー名を指定します。

{ "type": "USERNAME", "databaseUser": "string" }
AWS Secrets Manager

AWS Secrets Manager で承認する場合は、typeUSERNAME_PASSWORD として指定し、RedshiftProvisionedAuthConfigusernamePasswordSecretArn フィールドにシークレットの ARN を指定します。

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

Amazon Redshift Serverless を使用している場合、queryConfiguration フィールドの値は、次の形式の RedshiftQueryEngineConfiguration である必要があります。

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

workgroupArn フィールドにワークグループの ARN を指定します。RedshiftServerlessAuthConfiguration は、使用している承認のタイプによって異なります。承認方法に一致するタブを選択します。

IAM role

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

{ "type": "IAM" }
AWS Secrets Manager

AWS Secrets Manager で承認する場合は、typeUSERNAME_PASSWORD として指定し、RedshiftServerlessAuthConfigurationusernamePasswordSecretArn フィールドにシークレットの ARN を指定します。

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

このフィールドは、単一の RedshiftQueryEngineStorageConfiguration を含む配列にマッピングされ、その形式はデータの保存場所によって異なります。

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

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

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

注記

クロスデータベースクエリ (${databaseName}.${tableName}) で説明されているパターンにテーブル名を入力します。${databaseName.*} を指定することで、すべてのテーブルを含めることができます。

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

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

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

注記

クロスデータベースクエリ (${databaseName}.${tableName}) で説明されているパターンにテーブル名を入力します。${databaseName.*} を指定することで、すべてのテーブルを含めることができます。

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

このフィールドは、データのクエリ方法の設定に使用できる、次の QueryGenerationConfiguration にマッピングされます。

{ "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 オブジェクトにマッピングされ、以下のオプションを必要なだけ設定できます。

重要

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

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

データベースをクエリするための SQL 生成の精度を向上させるために、短いテーブルまたは列名よりも詳細なコンテキストを提供するテーブルまたは列の説明を指定できます。以下の操作を行うことができます。

  • テーブルの説明を追加するには、tables 配列に QueryGenerationTable オブジェクトを含めます。そのオブジェクトで、次の例のように、name フィールドにテーブルの名前を指定し、description フィールドに説明を指定します。

    { "name": "database.schema.tableA", "description": "Description for Table A" }
  • 列の説明を追加するには、tables 配列に QueryGenerationTable オブジェクトを含めます。そのオブジェクトで、name フィールドにテーブルの名前を指定し、QueryGenerationColumn の配列にマッピングされる 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" } ] }
    注記

    クロスデータベースクエリで説明されているパターンにテーブル名と列名を入力します。データベースが AWS Glue Data Catalog の場合、形式は awsdatacatalog.gluedatabase.table です。

QueryGenerationTable オブジェクトと QueryGenerationColumn オブジェクトの inclusion フィールドを使用して、SQL の生成時に含めるか除外するテーブルまたは列を提案できます。inclusion フィールドに次のいずれかの値を指定できます。

  • INCLUDE – SQL の生成時にコンテキストとして含まれるのは、指定したテーブルまたは列のみです。

  • EXCLUDE – 指定したテーブルまたは列は、SQL の生成時にコンテキストとして除外されます。

テーブルまたは列を含めるか除外するかは、次の方法で指定できます。

  • テーブルを含めるか除外するには、tables 配列に QueryGenerationTable オブジェクトを含めます。そのオブジェクトで、次の例のように、name フィールドにテーブルの名前を指定し、inclusion フィールドにテーブルを含めるか除外するかを指定します。

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

    クエリエンジンは、SQL を生成するための追加コンテキストに Table A を追加しません。

  • 列を含めるか除外するには、tables 配列に QueryGenerationTable オブジェクトを含めます。そのオブジェクトで、name フィールドにテーブルの名前を指定し、QueryGenerationColumn の配列にマッピングされる columns フィールドを含めます。QueryGenerationColumn オブジェクトで、次の例のように、name フィールドに列の名前を含め、inclusion フィールドに列を含めるか除外するかを指定します。

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

    SQL 生成は、SQL の生成時にコンテキスト内の Table AColumn A を無視します。

  • 次の例のように、インクルージョンまたは除外を指定するときにテーブルと列を組み合わせることができます。

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

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

重要

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

ユーザークエリを SQL クエリに変換する際のクエリエンジンの精度を向上させるには、CuratedQuery オブジェクトの配列にマッピングされる QueryGenerationContext オブジェクトの curatedQueries フィールドに例を指定できます。各オブジェクトには、以下のフィールドが含まれています。

  • naturalLanguage – 自然言語でのクエリの例

  • sql – 自然言語クエリに対応する SQL クエリ