Bedrock × Redshift ナレッジベースの説明文記述
こんにちは。株式会社ナレッジラボでAI・機械学習のエンジニアリングを担当しているダンです。
私たちは、社内に散在する経営データの集計・分析・管理を支援する「Manageboard」というサービスを提供しています。Manageboardでは今後、AI機能をさらに強化していく予定です。
本記事では、AWS BedrockとAmazon Redshiftを連携させた「構造化ナレッジベース」構築の際に直面する制約とその回避策について紹介します。
背景:構造化ナレッジベースとは?
AWS Bedrockでは、RAG(Retrieval-Augmented Generation)型エージェントを作成する際に、「ナレッジベース」を利用することができます。通常のベクトルストア(PDFやドキュメント等)だけでなく、構造化データベース(SQLベース)も接続可能です。
構造化ナレッジベースは以下の特徴を持っています:
- Redshift対応(RDSなどは未対応)
- ユーザーの自然言語入力から自動的にSQLクエリを生成
- 生成したSQLをRedshiftに実行し、結果をプロンプトに挿入してLLMに渡す
構造化ナレッジベースを使ったエージェント作成手順
Redshiftと連携した構造化ナレッジベースを利用し、Bedrockエージェントを作成する基本手順は以下のとおりです。
1. Redshiftと接続するナレッジベースを作成
- Bedrockコンソールで「ナレッジベース」の「作成」で「構造化データストアでナレッジベース」を選択
- 「ナレッジベースの詳細を指定」画面でサービスロール設定
- 「クエリエンジンを設定」画面でRedshiftクラスタとデータベース情報を設定(Redshift Serverlessで検証済)
- ナレッジベースを作成する
- Redshiftで以下のクエリでナレッジベースのサービスロールの権限を追加する
CREATE USER "IAMR:[サービスロール名]" WITH PASSWORD DISABLE;
GRANT USAGE ON SCHEMA public TO "IAMR:[サービスロール名]";
GRANT SELECT ON [テーブル名] TO "IAMR:[サービスロール名]";
- ナレッジベースを同期する
2. エージェントを作成
- Bedrockコンソールの「エージェント」画面で新規エージェントを作成
- 作成したナレッジベースを指定
- LLMモデル(ClaudeやNovaなど)を選択
- 制約、システム指示をカスタマイズしてデプロイ
注意点:説明文の200文字制限
ナレッジベースのメタ情報にはエージェントにどのようなデータを扱うかについての指示を登録する必要がありますが200文字以内という制限があります。ここで注意すべき点として
- テーブルやカラムは抽象的な命名だと意味が把握しづらいこと
- 業務ドメインに依存した略語や造語を多用するとLLM側が理解しづらいこと
解決策:「テーブルと列の説明」を活用する
このような精度低下のリスクに対しては、ナレッジベースの作成時に以下の方法で対応可能です。
- ナレッジベース作成画面でクエリエンジン設定のステップに進む
- 「テーブルと列の説明」セクションを開く
- 各テーブル/カラムに対して個別に説明文を追加
このようにしておくことで、プロンプトの曖昧さがあってもLLMが文脈を補完して、意図に近いSQLを生成しやすくなります。
まとめ
AWS BedrockではRedshiftと連携して構造化データ型のナレッジベースを構築できますが、「説明文200文字」の制約がエージェントの精度に影響する可能性があります。
この問題は、「テーブルと列の説明」を使って各項目に詳細な説明を記述することで回避可能です。構造化ナレッジベースの運用をより信頼性の高いものにするため、初期設計段階からこの点を意識しましょう。
Discussion