Amazon Bedrock AgentCore で NLP を活用した AI パワー搭載のダッシュボード自動化エージェントを構築
本文の状態
日本語全文を表示中
詳細モードで約18分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
AWS Machine Learning Blog
AWS は、ビジネスアナリストが自然言語で指示するだけでダッシュボードの変更を自動実行できる新ソリューションを発表し、従来の IT チームへの依頼プロセスによる数日間の待機時間を解消する。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
ビジネスアナリストは、変化するビジネス要件に対応するためにダッシュボードの修正を数日間待つことがよくあります。従来のプロセスでは、IT チームに修正依頼を提出し、同チームが要件を解釈し、API ドキュメントを参照し、テーブルスキーマを理解して変更を展開します。このアプローチは適切な監督と品質管理を保証しますが、迅速なダッシュボード更新が必要な場合、数日間のターンアラウンドタイム(処理時間)が発生する可能性があります。
本ソリューションは、Amazon Bedrock AgentCore、Strands Agents、および Amazon Quick の変換機能を組み合わせることで、AI エージェントの構築と運用を安全かつスケーラブルに行いながら、データを実行可能なビジネスインサイトに変換するための堅牢で拡張可能かつ知的なシステムを実現します。
ソリューションの概要
本ソリューションでは、Amazon Bedrock AgentCore と Strands フレームワークを構築したマルチエージェントアーキテクチャを使用します。Amazon Bedrock AgentCore は、スケーラブルかつ安全に効果的なエージェントを構築・展開・運用するためのアジェンティックプラットフォームであり、インフラ管理は不要です。インテリジェントなメモリと、ツールやデータへの安全で制御されたアクセスを可能にするゲートウェイにより、生産環境への迅速な導入を実現します。本プラットフォームでは、本番グレードのセキュリティと動的スケーリングをサポートし、運用中のパフォーマンスと品質を監視します。Strands Agents は、AWS サービスとの統合を備えたコードファースト型フレームワークです。また、本ソリューションでは Amazon QuickSight も活用しており、これは AI 駆動の BI(ビジネスインテリジェンス)機能を提供し、散在するデータを戦略的な洞察へと変換することで、すべての関係者がより迅速な意思決定を行い、より優れたビジネス成果を達成できるよう支援します。
このアーキテクチャは、連携して動作する 3 つの専門エージェントで構成されています。*Find Dashboard Agent*(ダッシュボード検索エージェント)は、ダッシュボードの検索や、ダッシュボードおよびデータセットからの列メタデータの取得など、発見オペレーションを実行します。*Modify Dashboard Agent*(ダッシュボード修正エージェント)は、列の検証、テーブルビジュアルの更新、新しいダッシュボードバージョンの作成を通じて、設定変更を実行します。*Orchestrator Agent*(オーケストレーターエージェント)は、意図分類に基づいてユーザーのリクエストを適切な専門エージェントへルーティングします。
オーケストレーターエージェントは、ユーザーとのインタラクションの入り口として機能します。ユーザーが「テストダッシュボードに姓を追加する」などの自然言語クエリを提出すると、Amazon Nova はそのリクエストが会話型か操作型かを分類します。会話型のクエリには、Nova の大規模言語モデル(LLM)の能力を用いて直接回答が返されます。一方、操作型のリクエストは Strands フレームワークを経由して専門のエージェントにルーティングされ、利用可能なデータセット列に対して変更内容が検証された上で、セキュリティ制御や監査証跡を維持しつつ、ロールバック用に元のダッシュボードを保持したまま自律的に実行されます。
以下の図解は、本ソリューションのアーキテクチャとワークフローを示しています。

本アーキテクチャには、以下のコンポーネントが含まれます:
- Amazon Bedrock AgentCore – Strands エージェントのオーケストレーターおよび専門的なサブエージェントをホストします。
- Amazon Nova – 自然言語処理(NLP)および推論機能を提供します。
- Amazon Quick – ダッシュボードの検索および変更操作の対象サービスです。
- AgentCore Memory – 会話の文脈とセッション状態を維持します。
- Amazon Bedrock AgentCore Observability – エージェントの意思決定をログ記録し、API の相互作用を追跡します。
Quick のセルフサービスを実現するためのエージェント型 AI ソリューションを実装するには、以下の高レベルな手順を完了してください:
- ダッシュボード検索エージェント、ダッシュボード修正エージェント、オーケストレーターエージェントの 3 つのエージェントを構築します。
- これらのエージェントを Amazon Bedrock AgentCore にデプロイします。
- AWS Management Console を通じてエージェントをテストします。
前提条件
このソリューションを実装するには、以下の前提条件を満たす必要があります:
- Amazon Bedrock、Amazon QuickSight、および AWS Identity and Access Management (IAM) の権限を持つ AWS アカウント。新しいダッシュボードの作成については、「Create an Amazon Quick dashboard」を参照してください。
- 既存のダッシュボードを持つアクティブな Amazon QuickSight アカウント(作成ガイドあり)。
- エージェントが QuickSight Application Programming Interfaces (APIs) にアクセスできるように設定された IAM 権限:
quicksight:ListDashboards
- quicksight:DescribeDashboard
- quicksight:DescribeDashboardDefinition
- quicksight:DescribeDataSet
- quicksight:CreateDashboard
- Python 3.10 以降(直接コードデプロイには Python 3.10〜3.13 がサポートされています)。
- uv パッケージマネージャーのインストール済み(インストールガイドあり)。
- 適切な認証情報で設定された AWS Command Line Interface (AWS CLI)。
- Python および AWS サービスに関する基本的な理解。
ウォークスルー
Amazon Bedrock AgentCore* を使用して、AI パワー型のダッシュボード自動化ソリューションを構築、デプロイ、テストするには、以下の 4 つの手順に従ってください:
ステップ 1: ダッシュボードの検索および修正を行う QuickSight のセルフサービスエージェントを構築する
QuickSight のセルフサービスソリューションを支える 3 つのコアエージェントを構築します:
- 検索用ダッシュボードエージェントを見つける。
- 変更用ダッシュボードエージェントを修正する。
- これらの間で調整を行うオーケストレーターエージェント。
各エージェントの役割と実装について詳しく見ていきましょう。
1.1 検索用ダッシュボードエージェントの構築
このエージェントは、その後の表示や変更アクションに必要なダッシュボードの発見(ディスカバリー)操作を処理します。例えば、ユーザーが「'testing'という名前のレポートを表示して」という自然言語クエリを入力すると、オーケストレーターがこのエージェントを呼び出し、list_dashboards API を実行してダッシュボードのメタデータを取得し、検索条件に基づいて結果をフィルタリングし、一致するダッシュボードを構造化された形式で返します。
この発見用エージェントは、3 つの中核機能を提供します。すなわち、完全一致と部分一致の両方に対応したダッシュボード検索、アカウント内の利用可能なダッシュボードの一覧表示、およびダッシュボードとその基盤となるデータセットからカラム情報を取得する機能です。これらの発見機能は、対象となるダッシュボードを特定することが変更や取得を実行する前に必要であるため、ダッシュボード操作の前提条件となります。
各機能は Strands @tool 関数として実装されています。以下のスニペットは、部分一致マッチングを使用して結果をフィルタリングしながら list_dashboards API を呼び出す検索用ダッシュボードツールを示しています:
from strands import Agent, tool
from strands.models import BedrockModel
@tooldef find_dashboard_tool(dashboard_name: str = "") -> str:
"""名前によってクイックダッシュボードを検索します(部分一致をサポート)"""
client = boto3.client('quicksight', region_name=REGION)
response = client.list_dashboards(AwsAccountId=AWS_ACCOUNT_ID)
dashboards = response.get('DashboardSummaryList', [])
# 検索語が指定されていない場合は、すべてのダッシュボードをリスト表示
if not dashboard_name or dashboard_name.strip() == "":
all_names = [d['Name'] for d in dashboards]
return f"All dashboards ({len(all_names)}): {all_names}"
# 大文字小文字を区別しない部分一致でフィルタリング
matches = [d['Name'] for d in dashboards if dashboard_name.lower() in d['Name'].lower()]
return f"Found {len(matches)} dashboards: {matches}"
エージェントはその後、これらのツール関数を Strands Agent(ストランドズエージェント)にラップし、@tool デコレータとして公開することで、オーケストレーターが自然言語クエリでこれを呼び出せるようにします:
_find_agent = Agent(
model=BedrockModel(model_id=MODEL_ID),
tools=[find_dashboard_tool, get_columns_tool],
system_prompt="You are the Find Dashboard Agent. Help users find dashboards and view columns."
)
@tool
def find_dashboard_agent(query: str) -> str:
"""オーケストレーターが呼び出すためにツールとして公開されたエージェントラッパー"""
response = _find_agent(query)
return str(response)
このツールとしてのエージェントパターンが、マルチエージェントアーキテクチャを可能にしています。オーケストレーターは Quick APIs に直接呼び出しを行うのではなく、このエージェントを呼び出し、自然言語の理解と API 呼び出しを内部で処理させます。
1.2 ダッシュボード変更用エージェントの構築
発見機能が整ったことで、次のエージェントは検証ファーストのワークフローを通じてダッシュボード設定の変更を担当します。例えば、「テストダッシュボードに姓を追加してください」というユーザーリクエストを想定しましょう。オーケストレーターはこのリクエストを変更ダッシュボードエージェントへルーティングし、そのエージェントはデータセットスキーマ内に列が存在するかを検証し、describe_dashboard_definition API を使用して完全なダッシュボード定義を取得し、テーブル視覚化フィールドウェルとフィールドオプションを更新し、create_dashboard API を使用して新しいダッシュボードバージョンを作成します。
この変更用エージェントは、主に 2 つの操作をサポートしています。1 つ目は、リクエストされた列が基盤となるデータセットに存在するがまだ追加されていないことを検証した上で、ダッシュボードに列を追加することです。2 つ目は、現在表示されている列であることを確認した上で、ダッシュボードから列を削除することです。既存のダッシュボードを変更するのではなく、一意の識別子を持つ新しいダッシュボードを作成することで、監査目的のためにオリジナルを保持し、必要に応じてロールバックをサポートします。
この検証ファーストのアプローチは、データの整合性を検証し設定エラーを防ぐのに役立ちます。また、オリジナルのダッシュボードを保持することはガバナンス要件への準拠を支え、変更に対する監査証跡を提供します。
以下のスニペットは、コア修正ツールの内容を示しています。このツールはリクエストを検証し、ダッシュボード定義のテーブル視覚化フィールドウェルを更新して、新しいダッシュボードを作成します。
@tool
def modify_dashboard(dashboard_name: str, action: str, column_name: str) -> str:
"""カラムを追加または削除することでダッシュボードを変更する"""
client = boto3.client('quicksight', region_name=REGION)
info = _get_dashboard_and_dataset_info(dashboard_name)
変更を行う前に検証を優先:カラムの状態を確認
if action == "add":
if column_name in info["dashboard_columns"]:
return f"カラム '{column_name}' は既にダッシュボードに含まれています。"
if column_name not in info["dataset_columns"]:
return f"カラム '{column_name}' はデータセットに存在しません。"
elif action == "remove":
if column_name not in info["dashboard_columns"]:
return f"カラム '{column_name}' はダッシュボードに含まれていません。"
ダッシュボード定義内のテーブル視覚化フィールドウェルを更新
updated_definition = info["definition"]
for sheet in updated_definition.get('Sheets', []):
for visual in sheet.get('Visuals', []):
if 'TableVisual' in visual:
field_wells = visual['TableVisual']['ChartConfiguration']['FieldWells']
existing_fields = field_wells['TableAggregatedFieldWells']['GroupBy']
if action == "add":
existing_fields.append({
'CategoricalDimensionField': {
'FieldId': str(uuid.uuid4()),
'Column': {
'DataSetIdentifier': dataset_id,
'ColumnName': column_name
}
}
})
elif action == "remove":
existing_fields = [f for f in existing_fields
if f['CategoricalDimensionField']['Column']['ColumnName'] != column_name]
Create new dashboard with UUID suffix, original is preserved for rollback
new_uuid = str(uuid.uuid4())[:8]
client.create_dashboard(
AwsAccountId=AWS_ACCOUNT_ID,
DashboardId=f"dashboard_{new_uuid}",
Name=f"{info['dashboard_name']}_dashboard_{new_uuid}",
Definition=updated_definition
)
Find Dashboard Agentと同様に、このツールはStrands Agentにラップされ、オーケストレーターに対して@toolとして公開されています:
_modify_agent = Agent(
model=BedrockModel(model_id=MODEL_ID),
tools=[modify_dashboard],
system_prompt="You are the Modify Dashboard Agent. You add or remove columns from dashboards."
)
@tool
def modify_dashboard_agent(query: str) -> str:
"""Agent wrapper for the orchestrator to invoke with natural language"""
response = _modify_agent(query)
return str(response)
このエージェントは、ユーザーの自然言語クエリからダッシュボード名、アクション、および列名を抽出し、それらを検証して実行する modify_dashboard ツールに渡します。
1.3 オーケストレーターエージェントの作成
最終コンポーネントは、Strands フレームワーク内で Find Dashboard Agent と Modify Dashboard Agent をツールとして調整・統合します。このオーケストレーターは、ルーティングロジックを指示するシステムプロンプトを定義し、どのエージェントが発見オペレーションを担当し、どのエージェントが変更オペレーションを担当するかを指定します。設定には両方の専門化されたエージェントのツール登録が含まれており、これによりオーケストレーターは分類された意図に基づいてそれらを呼び出すことができます。
ルーティングロジックは自然言語理解を通じて複数のクエリパターンを処理します。ダッシュボード名や列名などの明示的なパラメータを含む直接的な要求は、即座に適切な専門化されたエージェントに委任されます。必要なパラメータを欠いた曖昧な要求については、ルーティング前に不足している情報を収集するためのフォローアップ質問がトリガーされます。この実装パターンにより、オーケストレーターは実行役ではなく調整役として機能し、Quick API の操作を専門化されたエージェントに委任しつつ、意図の分析とルーティング決定にのみ注力します。
以下のスニペットは、オーケストレーターが両方のエージェントをツールとして登録し、システムプロンプトを通じてルーティングロジックを定義する様子を示しています:
from find_dashboard_agent import find_dashboard_agent
from modify_dashboard_agent import modify_dashboard_agent
orchestrator = Agent(
model=BedrockModel(model_id=MODEL_ID),
tools=[find_dashboard_agent, modify_dashboard_agent],
system_prompt="""You are an Amazon Quick Orchestrator. Route user requests to specialized agents.
AGENTS:
- find_dashboard_agent: ダッシュボードの検索、一覧表示、列の表示
- modify_dashboard_agent: 列の追加・削除
ROUTING LOGIC:
- "find", "show", "list", "get", "columns" → find_dashboard_agent
- "add", "remove", "modify", "delete" → modify_dashboard_agent"""
)
Bedrock AgentCore の統合により、このオーケストレーターがユーザーリクエストを受け付けるエントリーポイントとして公開されます:
app = BedrockAgentCoreApp()
@app.entrypoint
def invoke(payload):
user_input = payload.get("prompt", "")
response = orchestrator(user_input)
return response.message['content'][0]['text']
find_dashboard_agent と modify_dashboard_agent はそれぞれ @tool 関数としてラップされているため、オーケストレーターはこれらを他のツールと同様に扱います。Amazon Nova がユーザーの意図を分析し、適切なエージェントを自動的に呼び出します。
ステップ 2: エージェント展開用のプロジェクト設定
エージェントを Amazon Bedrock AgentCore に直接コードデプロイすることで展開します。これには、プロジェクトの初期化、依存関係の追加、エージェントファイルの作成、およびランタイム環境へのデプロイが含まれます。
2.1 プロジェクトの初期化
uv パッケージマネージャーを使用して新しい Python プロジェクトを設定し、その後プロジェクトディレクトリに移動します。uv init quicksight-selfservice-agentcd quicksight-selfservice-agentと実行することで、依存関係の管理やエージェントのデプロイに必要な設定ファイルを含む新しいプロジェクト構造が作成されます。
2.2 プロジェクトへの依存関係の追加
プロジェクトに必要な Amazon Bedrock AgentCore ライブラリと開発ツールをインストールしてください。この例では、uv add コマンドを使用して依存関係を追加します:
uv add bedrock-agentcore strands-agents strands-agents-tools
uv add --dev bedrock-agentcore-starter-toolkit
仮想環境をアクティブ化します:
Linux/macOS の場合
source .venv/bin/activate
Windows の場合
source .venv/Scripts/activate
これらの依存関係には、エージェントの作成に Strands SDK を、デプロイ管理に Amazon Bedrock AgentCore ツールキットを含む、エージェントの構築と展開のためのコアフレームワークが含まれています。
2.3 agent.py ファイルの作成
GitHub リポジトリ から完全な実装を zip ファイルとしてダウンロードしてください。zip ファイルを展開し、以下のファイルをプロジェクトのルートディレクトリにコピーします:
- agent.py – Amazon Bedrock AgentCore と統合されたメインのオーケストレーターエージェントのエントリーポイント
- find_dashboard_agent.py – ダッシュボード発見操作に特化した専用エージェント
- modify_dashboard_agent.py – ダッシュボード修正操作に特化した専用エージェント
- shared/ フォルダ – 共有 AWS サービスクライアント設定用の config.py を含む
pyproject.toml や設定ファイルなどの他の必要なファイルは、初期化ステップからプロジェクトセットアップの一部として既に存在しています。これらのファイルを配置することで、クイックセルフサービスエージェントを Amazon Bedrock AgentCore にデプロイできるようになります。
ステップ 3: Amazon Bedrock AgentCore ランタイムへのデプロイ
Amazon Bedrock AgentCore は、Strands エージェントをデプロイするための管理環境を提供し、コンテナベースのデプロイと直接コードデプロイの 2 つのオプションを用意しています。本ソリューションでは、直接コードデプロイを使用できます。
3.1 エージェントを Amazon Bedrock AgentCore に設定する
以下のコマンドを実行して、クイックセルフサービスエージェントを設定します。
agentcore configure --entrypoint agent.py --name qs_selfservice_agent
依存性ファイルを検出しました:pyproject.toml
このファイルを使用するには Enter キーを押すか、別のパスを入力してください(Tab キーで補完):
パスまたは検出された依存性ファイルを使用するには Enter を押してください:pyproject.toml
✓ 要件ファイルを使用しています:pyproject.toml
デプロイメント設定
デプロイメントタイプを選択してください:
直接コードデプロイ (推奨) - Python のみ、Docker は不要
コンテナ - カスタムランタイムまたは複雑な依存関係の場合
選択 [1]: 1
Python ランタイムバージョンを選択してください:
PYTHON_3_10
PYTHON_3_11
PYTHON_3_12
PYTHON_3_13
選択 [4]: 4 ✓ デプロイメントタイプ:直接コードデプロイ (python.3.13)
実行ロール
Enter キーを押して実行ロールを自動作成するか、既存のロールを使用する場合は実行ロール ARN/名を入力してください。
実行ロール ARN/名 (または Enter を押して自動作成):
✓ 実行ロールを自動作成します
S3 バケット
Enter キーを押して S3 バケットを自動作成するか、既存のバケットを使用する場合は S3 URI/パスを入力してください (URI またはパスを入力するか、Enter を押して自動作成):
✓ S3 バケットを自動作成します
認証設定 注:AgentCore は IAM 認証を使用します。
代わりに OAuth オーザライザーを設定
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み