aws-samples / aws-samples/generative-ai-use-cases

feat(agent-builder): AgentCore Browser ツールの選択肢を追加

Open
#1,674 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
1.4k
Forks
433
Avg merge
2h 35m
Merged PRs (30d)
1

Description

### Feature you want to add or improve

エージェントビルダーのツール設定に、Amazon Bedrock AgentCore の Browser ツールの選択肢を追加することを提案します。既存の「コード実行」と同じチェックボックス形式で、Agent ごとに利用の有無を選択できる形を想定しています。

関連: #1670 / #1673 (Web Search ツールの追加)
→ 同じ「ツール設定にチェックボックスを追加する」経路での提案です。Web Search が「検索して読む」機能である一方、Browser は「実際のページを開いて操作する」機能で、役割が異なります。

### 現状

`packages/cdk/lambda-python/generic-agent-core-runtime/pyproject.toml` では、既に Browser ツールの依存が導入されています。

```toml
"strands-agents-tools[agent_core_code_interpreter,agent_core_browser]",
```

しかし `agent_core_browser` は依存として入っているだけで、ランタイムのコードから利用されていません (`src/` 配下に browser の参照なし)。

この extra は Playwright (aarch64 向けで約 47MB) を引き込み、コンテナイメージのサイズに寄与しています。現状は**イメージサイズのコストを払いながら、機能としては使われていない**状態です。

### 提案内容

`codeExecutionEnabled` と同じ経路で `browserEnabled` を追加し、有効化した Agent に Browser ツールを渡します。

`strands_tools` の実装は Code Interpreter と同一の構造で、追加依存は発生しません。

```python
# 既存 (Code Interpreter)
code_interpreter = AgentCoreCodeInterpreter(region=region)
tools.append(code_interpreter.code_interpreter)

# 追加 (Browser)
browser = AgentCoreBrowser(region=region)
tools.append(browser.browser)
```

Browser が提供するアクション:

| 分類 | アクション |
| --- | --- |
| セッション | `init_session`, `list_local_sessions` |
| 遷移 | `navigate`, `back`, `forward`, `refresh` |
| 操作 | `click`, `type`, `press_key` |
| 抽出 | `get_text`, `get_html`, `screenshot` |
| その他 | `evaluate` (JavaScript 実行), `new_tab`, `switch_tab` |

### Web Search との関係

両者は補完関係にあると考えています。

| | Web Search (#1673) | Browser (本 Issue) |
| --- | --- | --- |
| 取得元 | AWS が運用するウェブインデックス | 実際のページ (ライブ) |
| できること | 検索してスニペットと URL を得る | 開く・入力する・クリックする・抽出する |
| 認証必須のページ | 取得できない | 到達可能 |
| 動的描画ページ | インデックス依存 | 描画後の DOM を取得可能 |
| 鮮度 | インデックス反映に依存 | 常に最新 |

Web Search の検証中に、インデックス未収録のために当日のローカルニュースが取得できないケースを確認しています。Browser があれば、URL が分かっているページについてはその制約を受けません。

### 想定ユースケース

- 認証が必要な社内システムやポータルからの情報取得
- API を持たないレガシー Web アプリの操作
- JavaScript で描画されるページからのデータ抽出
- 在庫・価格・運行情報など、刻々と変わる情報の参照

### オプトインの方針

組織のポリシーによって Browser を利用できない場合があるため、**2 階層のオプトイン**にする想定です。#1673 と同じ形に揃えます。

| 階層 | 設定 | 決める人 | 無効時の挙動 |
| --- | --- | --- | --- |
| デプロイ設定 | `agentBuilderBrowserEnabled` | 管理者 | 実行ロールに権限を付与せず、エージェントビルダーの画面にも選択肢を表示しない |
| Agent 単位 | `browserEnabled` | 利用者 | Agent ごとにツールを使うかを選択 (既定は無効) |

デプロイ設定はフロントエンドへ `VITE_APP_AGENT_CORE_AGENT_BUILDER_BROWSER_ENABLED` として渡し、既存の `VITE_APP_AGENT_CORE_AGENT_BUILDER_ENABLED` と同じ仕組みで判定します。

これにより、組織として Browser を使わない場合は利用者に選択肢を見せずに済みます。

### 実装方針 (案)

Web Search (#1673) と同じ経路です。Browser は AgentCore の Built-in Tools であるため、**Gateway の作成は不要**で、CDK 側の変更は Code Interpreter と同程度に収まります。

```
packages/types/src/agent-builder.d.ts 型定義
packages/cdk/lambda/agentBuilder/validation/schemas.ts zod スキーマ
packages/cdk/lambda/agentBuilder/repositories/ DynamoDB 永続化
packages/cdk/lambda/agentBuilder/services/ サービス層
packages/cdk/lib/stack-input.ts agentBuilderBrowserEnabled
packages/cdk/lib/construct/web.ts VITE_APP_* の受け渡し
packages/cdk/lib/generative-ai-use-cases-stack.ts 値の受け渡し
packages/web/src/components/agentBuilder/AgentForm.tsx チェックボックス UI (条件表示)
packages/web/public/locales/translation/{ja,en}.yaml i18n
packages/web/src/hooks/useAgentCoreApi.ts browser_enabled として送信
packages/cdk/lambda-python/generic-agent-core-runtime/ ランタイムでのツール登録
packages/cdk/lib/construct/generic-agent-core.ts 実行ロールへの権限追加
```

### ご相談したい点

1. **オプトインの粒度**
前述のとおり、デプロイ設定 (`agentBuilderBrowserEnabled`) と Agent 単位 (`browserEnabled`) の 2 階層を想定しています。Browser は `evaluate` による任意の JavaScript 実行を含むため、既定は両方とも無効とし、組織として使わない場合は選択肢自体を見せない方針です。この粒度で問題ないでしょうか。

2. **到達先の制限**
Browser は任意の URL に到達できます。社内ネットワークや意図しないサイトへのアクセスを制限したい場合、AgentCore Browser のカスタムブラウザ (ネットワーク設定を指定できる) を使う方式が考えられます。既定では AWS マネージドブラウザ (`aws.browser.v1`) を使う想定ですが、制限を要件とすべきかご意見をいただけると助かります。

3. **セッションのタイムアウト**
`AgentCoreBrowser` は `session_timeout` を指定できます (既定 3600 秒)。GenU として適切な既定値、または設定可能にすべきかについてご意見をいただけると助かります。

4. **Live View の扱い**
実行中のブラウザを画面に埋め込む Live View は、TypeScript SDK の `BrowserLiveView` コンポーネント (AWS DCV) を使う必要があり、`vite.config.ts` の変更 (alias / dedupe / WASM のコピー) を伴います。本 Issue のスコープには含めず、ツールとしての提供に留める想定です。必要であれば別 Issue として起票します。

### 補足

Amazon Bedrock AgentCore の Built-in Tools は東京リージョンでも利用可能です。

参考:
- [Interact with web applications using Amazon Bedrock AgentCore Browser](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/browser-tool.html)
- [Supported AWS Regions](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agentcore-regions.html)

方針についてご意見をいただけますと幸いです。合意が得られ次第、PR を作成します。

Contributor guide

Open the contributing guide

Research direction

Start by reading the related Web Search issue #1673 and tracing the listed agent-builder files from packages/types/src/agent-builder.d.ts through AgentForm.tsx and the generic-agent-core runtime. Confirm the existing Code Interpreter path before assessing the proposed deployment and agent-level settings. Done means the opt-in setting, persistence, conditional UI, request wiring, runtime tool registration, permissions, and translations agree across the listed entry points.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, python, typescript
Domain
ai, cloud, full-stack
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.