🔍

Amazon Bedrock ナレッジベースのText-to-SQLを試してみた

2025/01/28に公開

はじめに

以下の構成図でAmazon Bedrock ナレッジベースのText-to-SQLを試してみました。手順書に近い記事になってしまいましたが、要所でスクショを貼っていますので、実際に操作しなくても設定の雰囲気は掴めるのではないかと思います。操作に詰まった方の助けにもなれれば幸いです。

また、以下のCSVファイルを作成して1つのテーブルとしていきました。

AWS Glue Data Catalog でTableを作成する

  • S3バケットを作成してCSVファイルを保存しておく。
  • AWS Glue>Data Catalog>Databases>Add database
    • Name: test-structured-data-retrieval-glue-db
    • Create databaseを押下する。
  • AWS Glue>Data Catalog>Crawlers>Create crawler
    • Set crawler properties
      • Name: test-structured-data-retrieval-glue-crawler
    • Choose data sources and classifiers
      • Add a data source
        • S3 path: s3://{S3バケット名}
        • Add an S3 data source を押下する。
      • Next を押下する。
    • Configure security settings
      • Create new IAM role
        • ロール名を入力して Create を押下する。
    • Set output and scheduling
      • Target database: test-structured-data-retrieval-glue-db
      • Next を押下する。
    • Review and create
      • 内容を確認して、Create crawler を押下する。
  • AWS Glue>Data Catalog>Crawlers>test-structured-data-retrieval-glue-crawler
    • Run crawler を押下した結果↓
    • 作成されたテーブル(※添付図のSchemaは参考)↓

Amazon Redshift Serverless を設定する

  • Amazon Redshift Serverless>ワークグループの設定>ワークグループを作成
    • ワークグループの名前:test-structured-data-retrieval-wg
    • Performance and cost controls
      • ベース容量: 8
    • Limits
      • 最大容量: 8
    • 名前空間: test-structured-data-retrieval-namespace
    • IAMロールを作成>特定のS3バケット>S3バケット名を選択>IAMロールをデフォルトとして作成する
    • 次へ>作成 を押下する。

Amazon Bedrock ナレッジベース を設定する

  • Amazon Bedrock>ナレッジベース>ナレッジベースを作成>Knowledge Base with structured data source
    • ナレッジベース名:test-structured-data-retrieval-nb
    • 新しいサービスロールを作成して使用:サービスロール名を入力
    • 次へ を押下する。
    • Query engine details
      • Redshift serverless
      • Workgroup: test-structured-data-retrieval-wg
    • Default storage metadata
      • AWS Default Glue Data Catalog
      • Glue catalog tables to connect: test-structured-data-retrieval-glue-db.*
    • 次へ>ナレッジベースを作成 を押下する。

ナレッジベースのロールにデータベースへのアクセス権限を付与する

  • Redshift>クエリエディタ v2
    • Editor>左のメニュー>Serverless: test-structured-data-retrieval-wgの右の縦3点リーダー>Edit connection>save と操作することでエディターとワークグループが接続される
      # ナレッジベースのIAMロールを介して認証できるデータベースユーザー作成する
      $ CREATE USER "IAMR:{ナレッジベースのIAMロール名}" WITH PASSWORD DISABLE;
      
    • Run を押下する。
      # 上記で作成したデータベースユーザーがawsdatacatalog内のオブジェクトにアクセスできるようにする
      $ GRANT USAGE ON DATABASE awsdatacatalog TO "IAMR:{ナレッジベースのIAMロール名}";
      
  • AWS Lake Formation>Permissions>Data permissions
    • IAM users and roles: ナレッジベースのIAMロールを選択する
    • LF-Tags or catalog resources
      • Named Data Catalog resources を選択する
      • Catalogs: Default catalog
      • Databases: test-structured-data-retrieval-glue-db
      • Tales: All tables
    • Table permissions
      • Table permissions
        • Select, Describe にチェックを入れる>Grant を押下する。
  • Amazon Bedrock>ナレッジベース>ナレッジベース名>サービスロール名>ポリシー名>編集
    • { "Sid": "VisualEditor0", ... 以降を書き加える
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "RedshiftDataAPIStatementPermissions",
                  ...
              },
              ...
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "glue:GetDatabases",
                      "glue:GetDatabase",
                      "glue:GetTables",
                      "glue:GetTable",
                      "glue:GetPartitions",
                      "glue:GetPartition",
                      "glue:SearchTables"
                  ],
                  "Resource": [
                      "arn:aws:glue:{リージョン名}:{アカウントID}:table/{Glue database}/*",
                      "arn:aws:glue:{リージョン名}:{アカウントID}:database/{Glue database}",
                      "arn:aws:glue:{リージョン名}:{アカウントID}:catalog"
                  ]
              },
              {
                  "Sid": "Statement1",
                  "Effect": "Allow",
                  "Action": [
                      "s3:ListBucket",
                      "s3:GetObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::{S3バケット名}",
                      "arn:aws:s3:::{S3バケット名}/*"
                  ]
              }
          ]
      }
      
  • Amazon Bedrock>ナレッジベース>作成されたナレッジベース名
    • Query engine: 同期 を押下する。

エージェントで上記のナレッジベースを使用する

  • Amazon Bedrock>エージェント>エージェントを作成
    • 名前: test-structured-data-retrieval-Agent
  • Amazon Bedrock>エージェント>エージェントビルダーで編集
    • エージェントリソースロール:新しいサービスロールを作成して使用
    • エージェント向けの指示
      ユーザーに対して、必ず日本語で回答してください。
      あなたは、オムライス専門店「イマジナリーオムライス」を利用したユーザーのデータをナレッジベースから参照することができます。
      必要であればそのナレッジベースを使用して、ユーザーの質問に回答してください。
      
    • ナレッジベース>Add>ナレッジベースを選択>ナレッジベース名>Add
  • 保存して終了 を押下する
  • 質問してみる

以上です。ここまでご覧いただき、ありがとうございました。

参考

NCDCエンジニアブログ

Discussion