🍣

Bedrock × Redshift ナレッジベースの説明文記述

に公開

こんにちは。株式会社ナレッジラボでAI・機械学習のエンジニアリングを担当しているダンです。
私たちは、社内に散在する経営データの集計・分析・管理を支援する「Manageboard」というサービスを提供しています。Manageboardでは今後、AI機能をさらに強化していく予定です。

本記事では、AWS BedrockとAmazon Redshiftを連携させた「構造化ナレッジベース」構築の際に直面する制約とその回避策について紹介します。

背景:構造化ナレッジベースとは?

AWS Bedrockでは、RAG(Retrieval-Augmented Generation)型エージェントを作成する際に、「ナレッジベース」を利用することができます。通常のベクトルストア(PDFやドキュメント等)だけでなく、構造化データベース(SQLベース)も接続可能です。
https://zenn.dev/knowledgelabo/articles/859a2635c77ac3

構造化ナレッジベースは以下の特徴を持っています:

  • Redshift対応(RDSなどは未対応)
  • ユーザーの自然言語入力から自動的にSQLクエリを生成
  • 生成したSQLをRedshiftに実行し、結果をプロンプトに挿入してLLMに渡す

構造化ナレッジベースを使ったエージェント作成手順

Redshiftと連携した構造化ナレッジベースを利用し、Bedrockエージェントを作成する基本手順は以下のとおりです。

1. Redshiftと接続するナレッジベースを作成

  1. Bedrockコンソールで「ナレッジベース」の「作成」で「構造化データストアでナレッジベース」を選択
  2. 「ナレッジベースの詳細を指定」画面でサービスロール設定
  3. 「クエリエンジンを設定」画面でRedshiftクラスタとデータベース情報を設定(Redshift Serverlessで検証済)
  4. ナレッジベースを作成する
  5. Redshiftで以下のクエリでナレッジベースのサービスロールの権限を追加する
CREATE USER "IAMR:[サービスロール名]" WITH PASSWORD DISABLE;
GRANT USAGE ON SCHEMA public TO "IAMR:[サービスロール名]";
GRANT SELECT ON [テーブル名] TO "IAMR:[サービスロール名]";
  1. ナレッジベースを同期する

2. エージェントを作成

  1. Bedrockコンソールの「エージェント」画面で新規エージェントを作成
  2. 作成したナレッジベースを指定
  3. LLMモデル(ClaudeやNovaなど)を選択
  4. 制約、システム指示をカスタマイズしてデプロイ

注意点:説明文の200文字制限

ナレッジベースのメタ情報にはエージェントにどのようなデータを扱うかについての指示を登録する必要がありますが200文字以内という制限があります。ここで注意すべき点として

  • テーブルやカラムは抽象的な命名だと意味が把握しづらいこと
  • 業務ドメインに依存した略語や造語を多用するとLLM側が理解しづらいこと

解決策:「テーブルと列の説明」を活用する

このような精度低下のリスクに対しては、ナレッジベースの作成時に以下の方法で対応可能です。

  1. ナレッジベース作成画面でクエリエンジン設定のステップに進む
  2. 「テーブルと列の説明」セクションを開く
  3. 各テーブル/カラムに対して個別に説明文を追加

このようにしておくことで、プロンプトの曖昧さがあってもLLMが文脈を補完して、意図に近いSQLを生成しやすくなります。

まとめ

AWS BedrockではRedshiftと連携して構造化データ型のナレッジベースを構築できますが、「説明文200文字」の制約がエージェントの精度に影響する可能性があります。

この問題は、「テーブルと列の説明」を使って各項目に詳細な説明を記述することで回避可能です。構造化ナレッジベースの運用をより信頼性の高いものにするため、初期設計段階からこの点を意識しましょう。

Discussion