[AWS]Bedrockエージェントのスキーマ設定

TIPS
TIPS

Amazon BedrockでAIがデータベースを理解し、自然言語からSQLを自動生成するためのスキーマ定義ファイルの作成手順を解説します。JSON形式が推奨されており、テーブル名、カラム名、データ型、主キー、外部キーなどを正確に記述することが重要です。これにより、AIエージェントやナレッジベースの精度が飛躍的に向上し、データ分析の自動化が実現します。

基本概念の理解

  • 目的: Amazon Bedrockの「エージェント」や「ナレッジベース」がDB構造を理解し、適切なSQL生成を可能にする
  • 対応形式: JSONまたはYAML(JSONが推奨)
  • 対象DB: RDS, Aurora, Redshift, DynamoDB等(リレーショナルDBが中心)
  • 必須要素: テーブル名、カラム名、データ型、主キー、外部キー、関係性

ステップバイステップ手順

STEP 1: メタデータの収集

  1. 対象データベースに接続
  2. 以下の情報を収集:
    • 全テーブル名
    • 各テーブルのカラム名とデータ型(例: customer_id INT)
    • 主キー(Primary Key)
    • 外部キー(Foreign Key)と参照先テーブル
    • NULL制約、ユニーク制約
    • インデックス情報(オプション)

STEP 2: ファイル形式の選択

  • 推奨形式: JSON(構造化データに最適)
  • 代替形式: YAML(読みやすいがネストに注意)

STEP 3: JSONスキーマの作成例

{
  \"database\": \"ecommerce_db\",
  \"description\": \"ECサイトのデータベース\",
  \"tables\": [
    {
      \"table_name\": \"customers\",
      \"description\": \"顧客基本情報\",
      \"columns\": [
        {
          \"name\": \"customer_id\",
          \"type\": \"INT\",
          \"description\": \"顧客を一意に識別するID\",
          \"is_primary_key\": true
        },
        {
          \"name\": \"name\",
          \"type\": \"VARCHAR(100)\",
          \"description\": \"顧客の氏名\"
        },
        {
          \"name\": \"email\",
          \"type\": \"VARCHAR(255)\",
          \"description\": \"メールアドレス\",
          \"is_unique\": true
        }
      ]
    },
    {
      \"table_name\": \"orders\",
      \"description\": \"注文情報\",
      \"columns\": [
        {
          \"name\": \"order_id\",
          \"type\": \"INT\",
          \"is_primary_key\": true
        },
        {
          \"name\": \"customer_id\",
          \"type\": \"INT\",
          \"description\": \"customersテーブルへの外部キー\",
          \"is_foreign_key\": true,
          \"references\": {
            \"table\": \"customers\",
            \"column\": \"customer_id\"
          }
        },
        {
          \"name\": \"order_date\",
          \"type\": \"DATE\"
        }
      ]
    }
  ]
}

STEP 4: ベストプラクティス

  1. 記述的メタデータの追加:
    • 各テーブル・カラムにdescriptionを記載(AIの理解精度が向上)
    • 例: "description": "注文ステータス(0:未処理, 1:発送済み)"
  2. 関係性の明文化:
   \"relationships\": [
     {
       \"from_table\": \"orders\",
       \"from_column\": \"customer_id\",
       \"to_table\": \"customers\",
       \"to_column\": \"customer_id\",
       \"type\": \"one-to-many\"
     }
   ]
  1. データ型の正確性:
    • 実際のDBのデータ型と一致させる(例: VARCHAR(255), TIMESTAMPTZ)
  2. 制約の明示:
    • "is_primary_key": true/false
    • "is_nullable": false(NOT NULL制約)
    • "default_value": "CURRENT_TIMESTAMP"

STEP 5: ファイルの検証

  1. JSONバリデーターで構文チェック:
  2. 必須フィールドの確認:
    • database, tables, table_name, columns, name, type

STEP 6: Bedrockへのアップロード

  1. AWSコンソール > Amazon Bedrock にログイン
  2. ナレッジベース を選択
  3. 「データソースの追加」をクリック
  4. 作成したJSONファイルをアップロード
  5. ベクトル変換設定 で「メタデータフィールド」を指定:
   \"vectorEmbeddingMetadata\": {
     \"schemaType\": \"DATABASE_SCHEMA\"
   }
[AWS]Bedrockエージェントのスキーマ設定
[DuckDB]RAGのベクタDBとして使う
DuckDBをRAGのベクタDBとして活用する方法を解説。vss拡張機能を用いたベクトル検索やHNSWインデックスの構築手順を紹介し、SQLによるメタデータ検索との強力な親和性やシングルファイルでの高速なローカル開発のメリットを解説します。

高度な設定例

パーティション情報の追加(BigQuery等)

{
  \"table_name\": \"sales\",
  \"partitions\": {
    \"field\": \"sale_date\",
    \"type\": \"DATE\",
    \"range\": \"DAILY\"
  }
}

ビュー定義の含め方

{
  \"table_name\": \"active_users\",
  \"is_view\": true,
  \"view_definition\": \"SELECT user_id, name FROM users WHERE last_login > NOW() - INTERVAL \'30 days\'\"
}

よくあるエラーと対策

エラー内容原因解決策
Invalid schema: missing table_name必須フィールド欠落全テーブルにtable_nameを追加
Unrecognized field "is_foreign_key"タイポフィールド名をis_foreign_key → isForeignKeyに統一
Vector embedding failedファイルサイズ超過ファイルを分割または不要メタデータを削除

自動生成ツール活用(オプション)

  1. SQL → JSON コンバーター:
  2. Pythonスクリプト例:
   import json
   from sqlalchemy import create_engine, MetaData

   engine = create_engine(\'postgresql://user:pass@host/db\')
   metadata = MetaData()
   metadata.reflect(engine)

   schema = {\"database\": \"my_db\", \"tables\": []}
   for table in metadata.tables.values():
       # テーブル情報を抽出してschemaに追加
   with open(\'schema.json\', \'w\') as f:
       json.dump(schema, f, indent=2)

Q よくある質問 (FAQ)
Q. Bedrockエージェントのスキーマ定義で最も推奨されるファイル形式は何ですか?
A.
構造化データの記述に最適で、AIの認識精度が高い「JSON形式」が推奨されています。
Q. AIによるSQL生成の精度を向上させるための重要なポイントは何ですか?
A.
各テーブルやカラムに「description(説明文)」を追加し、データ型や主キー・外部キーなどの制約を正確に明記することです。
Q. スキーマ設定時に「Invalid schema: missing table_name」エラーが発生した場合の対処法は?
A.
定義ファイル内のすべてのテーブルに対して、必須フィールドである「table_name」が正しく記述されているかを確認し、不足している箇所に追加してください。

コメント

タイトルとURLをコピーしました