論文概要(Abstract)
WebArena(ウェブアリーナ)は、Carnegie Mellon大学(CMU)のShuyan Zhouらが2023年に提案した、自律Webエージェントの能力を評価するためのベンチマークです。ECサイト、フォーラム、GitLab、地図サービス、CMSの5種類の自己ホスト型Webアプリケーションを構築し、812の長期的な現実Webタスクを提供します。人間の成功率78.24%に対し初期のGPT-4ベースエージェントは14.41%でしたが、2025年には60%超に到達し、わずか2年で4倍以上の性能向上を実現しています。ICLR 2024に採択された本研究は、Web操作エージェント評価の事実上の標準となっています。
この記事は Zenn記事: LLMエージェント評価ベンチマーク完全ガイド:SWE-bench・GAIA・τ-benchの選び方と実践 の深掘りです。
情報源
- arXiv ID: 2307.13854
- URL: https://arxiv.org/abs/2307.13854
- 著者: Shuyan Zhou, Frank F. Xu, Hao Zhu, Xuhui Zhou, Robert Lo, Abishek Sridhar, Xianyi Cheng, Tianyue Ou, Yonatan Bisk, Daniel Fried, Uri Alon, Graham Neubig
- 発表年: 2023(ICLR 2024採択)
- 分野: cs.AI, cs.CL
背景と動機(Background & Motivation)
Webブラウジングは人間の日常的な活動ですが、AIエージェントにとって最も困難なタスクの一つです。Webページは動的に変化し、DOM構造は複雑で、同じ目的を達成する方法が無数にあります。
従来のWeb操作ベンチマーク(MiniWoB++等)は、単純化されたWebページでのクリック・入力操作を評価していましたが、現実のWebサイトの複雑さ(認証、ページネーション、動的コンテンツ等)を反映していませんでした。Mind2Webは2,000タスクの大規模ベンチマークですが、静的なHTML上での操作予測に限定されており、実際のWebアプリケーション上での対話的な操作は評価できません。
WebArenaは、完全に機能する実Webアプリケーション上で、エージェントがリアルタイムにブラウザを操作してタスクを遂行する能力を評価する初のベンチマークです。
主要な貢献(Key Contributions)
- 貢献1: 5種類の自己ホスト型Webサイト(EC、フォーラム、GitLab、地図、CMS)を構築し、現実的なWeb環境を完全再現。Docker Composeで簡単にデプロイ可能
- 貢献2: 812の長期タスクを設計。各タスクは複数ステップのナビゲーション、フォーム入力、情報統合を要求
- 貢献3: 機能的正解(Functional Correctness)による評価。同じ目的を達成する異なる操作パスを正解として許容する柔軟な評価設計
技術的詳細(Technical Details)
5つのWebサイト環境
WebArenaは以下の5種類のWebアプリケーションで構成されています。
| サイト名 | カテゴリ | ベースソフトウェア | タスク例 |
|---|---|---|---|
| OneStopShop | ECサイト | Magento | 商品検索、カート操作、注文 |
| Reddit相当 | フォーラム | Discourse | 投稿、コメント、検索 |
| GitLab | コード管理 | GitLab CE | リポジトリ操作、Issue管理 |
| Map | 地図サービス | OpenStreetMap | ルート検索、地点情報取得 |
| CMS | コンテンツ管理 | WordPress | 記事作成、メディア管理 |
各サイトは実データ(商品カタログ、フォーラム投稿、コードリポジトリ等)がプリロードされており、現実の使用状況を忠実に再現しています。
タスク設計
タスクは4つのカテゴリに分類されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from dataclasses import dataclass
from enum import Enum
class TaskCategory(Enum):
"""WebArenaタスクのカテゴリ"""
INFORMATION_SEEKING = "info" # 情報検索型
SITE_NAVIGATION = "nav" # サイト内ナビゲーション型
CONTENT_CREATION = "create" # コンテンツ作成型
CONFIGURATION = "config" # 設定変更型
@dataclass
class WebArenaTask:
"""WebArenaの1タスクの構造"""
task_id: int
intent: str # タスクの目的(自然言語)
sites: list[str] # 使用するサイト(複数可)
category: TaskCategory
start_url: str # 開始URL
eval_config: dict # 評価設定
# 評価方法
eval_types: list[str] # url_match, element_check, etc.
reference_answers: dict # 正解条件
タスク例(情報検索型):
“Find the most popular product (by number of reviews) in the Electronics category on OneStopShop. What is its price?”
→ ECサイトにアクセス → Electronicsカテゴリ → レビュー数でソート → 最も人気の商品 → 価格を取得。5ステップのナビゲーションと情報抽出。
タスク例(コンテンツ作成型):
“Create a new issue in the ‘web-agent’ repository on GitLab titled ‘Fix navigation bug’ with the description ‘The top menu doesn’t collapse on mobile’.”
→ GitLabにアクセス → リポジトリを見つける → New Issue → タイトルと説明を入力 → 送信。
エージェントの入力と出力
エージェントは2つのモードでWebページを「見る」ことができます。
1. アクセシビリティツリーモード:
1
2
3
4
5
6
[1] heading "Welcome to OneStopShop"
[2] link "Electronics"
[3] link "Clothing"
[4] textbox "Search" [focused]
[5] button "Search"
[6] link "Sign In"
2. スクリーンショットモード(マルチモーダル): ブラウザのスクリーンショットを直接LLMに入力します。視覚的理解が必要なタスク(レイアウトの確認、画像の識別等)に有効です。
エージェントの出力は以下のアクション空間から選択されます。
\[\mathcal{A} = \{\text{click}[id], \text{type}[id, \text{text}], \text{scroll}[\text{dir}], \text{goto}[\text{url}], \text{stop}[\text{answer}]\}\]ここで、
- $\text{click}[id]$: 要素$id$をクリック
- $\text{type}[id, text]$: 要素$id$にテキストを入力
- $\text{scroll}[dir]$: 上下にスクロール
- $\text{goto}[url]$: URLに直接アクセス
- $\text{stop}[answer]$: タスク完了を宣言(オプションで回答を付与)
機能的正解評価
WebArenaの評価は機能的正解(Functional Correctness)に基づきます。同じ結果に到達する異なるパスを正解として許容します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def evaluate_task(
task: WebArenaTask,
final_state: dict
) -> bool:
"""タスクの成否を評価する
Args:
task: 評価対象のタスク
final_state: エージェント実行後のブラウザ/サイトの状態
Returns:
タスク成功の場合True
"""
for eval_type in task.eval_types:
if eval_type == "url_match":
# 最終URLが期待パターンに一致するか
if not url_matches(final_state['url'],
task.reference_answers['url']):
return False
elif eval_type == "element_check":
# ページ内に期待要素が存在するか
for element in task.reference_answers['must_include']:
if element not in final_state['page_content']:
return False
elif eval_type == "exact_match":
# エージェントの回答が正解と一致するか
if normalize(final_state['answer']) != \
normalize(task.reference_answers['exact']):
return False
elif eval_type == "string_match":
# 回答に期待文字列が含まれるか
for s in task.reference_answers['must_contain']:
if s.lower() not in final_state['answer'].lower():
return False
return True
Docker Composeによる環境構築
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# docker-compose.yml(簡略版)
version: '3.8'
services:
shopping:
image: webarena/shopping:latest
ports:
- "7770:80"
volumes:
- shopping_data:/var/www/html
forum:
image: webarena/forum:latest
ports:
- "9999:80"
gitlab:
image: webarena/gitlab:latest
ports:
- "8023:80"
shm_size: '256m'
map:
image: webarena/map:latest
ports:
- "3000:3000"
cms:
image: webarena/cms:latest
ports:
- "7780:80"
環境要件: Docker Desktop、最低16GB RAM、約20GBのディスク容量が必要です。
実装のポイント(Implementation)
WebArenaでエージェントを評価する際の実装上の注意点を解説します。
ブラウザ自動化: Playwright(推奨)またはSeleniumを使用してブラウザを制御します。Playwrightの方がモダンなAPIを持ち、アクセシビリティツリーの取得が容易です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from playwright.sync_api import sync_playwright
def setup_browser():
"""Playwrightでブラウザをセットアップする
Returns:
ブラウザコンテキストとページオブジェクト
"""
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=True)
context = browser.new_context(
viewport={'width': 1280, 'height': 720},
user_agent='Mozilla/5.0 (compatible; WebArenaAgent/1.0)'
)
page = context.new_page()
return context, page
def get_accessibility_tree(page) -> str:
"""アクセシビリティツリーを取得する
Args:
page: Playwrightのページオブジェクト
Returns:
フォーマット済みアクセシビリティツリー
"""
tree = page.accessibility.snapshot()
return format_tree(tree)
def execute_action(page, action: str) -> None:
"""エージェントのアクションを実行する
Args:
page: Playwrightのページオブジェクト
action: アクション文字列(例: "click[42]")
"""
import re
if match := re.match(r'click\[(\d+)\]', action):
element_id = int(match.group(1))
page.locator(f'[data-webarena-id="{element_id}"]').click()
elif match := re.match(r'type\[(\d+),\s*"(.+)"\]', action):
element_id = int(match.group(1))
text = match.group(2)
locator = page.locator(f'[data-webarena-id="{element_id}"]')
locator.fill(text)
elif match := re.match(r'goto\["(.+)"\]', action):
url = match.group(1)
page.goto(url)
環境のリセット: 各タスク実行前に環境をリセットする必要があります。WebArenaはスナップショットベースのリセット機構を提供しており、データベースの状態を初期状態に復元します。
評価関数の精度: WebArena Verifiedでは、文字列マッチングベースの評価を型・正規化対応の評価に改善し、1.6〜5.2%の評価誤差を修正しました。
Production Deployment Guide
AWS実装パターン(コスト最適化重視)
WebArenaで評価されるWeb操作エージェントをAWSにデプロイする場合の構成です。
| 規模 | 月間タスク数 | 推奨構成 | 月額コスト | 主要サービス |
|---|---|---|---|---|
| Small | ~1,000 | Serverless | $150-400 | Lambda + Bedrock + ECS (browser) |
| Medium | ~10,000 | Hybrid | $800-2,000 | ECS + Bedrock + ElastiCache |
| Large | 50,000+ | Container | $3,000-8,000 | EKS + Spot + Bedrock Batch |
Small構成の詳細(月額$150-400):
- ECS Fargate: ブラウザ(Chromium)実行環境、2 vCPU / 4GB ($80/月)
- Lambda: オーケストレーション、アクション決定 ($30/月)
- Bedrock: Claude 3.5 Haiku(アクション生成)($150/月)
- S3: スクリーンショット保存 ($10/月)
- CloudWatch: 監視 ($10/月)
コスト削減テクニック:
- ECS Fargate Spotで最大70%削減(ブラウザタスクは中断可能)
- Bedrock Prompt Cachingでシステムプロンプト部分のコスト削減
- スクリーンショットの圧縮(WebPフォーマット)でS3コスト削減
- ブラウザインスタンスのプーリング(起動時間短縮)
コスト試算の注意事項:
- 上記は2026年2月時点のAWS ap-northeast-1(東京)リージョン料金に基づく概算値です
- ブラウザの実行時間とメモリ使用量により大きく変動します
- 最新料金は AWS料金計算ツール で確認してください
Terraformインフラコード
Small構成: ECS(ブラウザ)+ Lambda + Bedrock
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# --- ECSクラスタ(ブラウザ実行環境) ---
resource "aws_ecs_cluster" "browser" {
name = "webarena-browser-cluster"
setting {
name = "containerInsights"
value = "enabled"
}
}
# --- ECSタスク定義(Chromium) ---
resource "aws_ecs_task_definition" "browser" {
family = "webarena-browser"
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
cpu = "2048" # 2 vCPU
memory = "4096" # 4GB
execution_role_arn = aws_iam_role.ecs_execution.arn
task_role_arn = aws_iam_role.ecs_task.arn
container_definitions = jsonencode([{
name = "chromium"
image = "browserless/chrome:latest"
portMappings = [{
containerPort = 3000
protocol = "tcp"
}]
environment = [
{ name = "MAX_CONCURRENT_SESSIONS", value = "2" },
{ name = "CONNECTION_TIMEOUT", value = "300000" }
]
logConfiguration = {
logDriver = "awslogs"
options = {
"awslogs-group" = "/ecs/webarena-browser"
"awslogs-region" = "ap-northeast-1"
"awslogs-stream-prefix" = "browser"
}
}
}])
}
# --- IAMロール(ECS) ---
resource "aws_iam_role" "ecs_execution" {
name = "webarena-ecs-execution"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = { Service = "ecs-tasks.amazonaws.com" }
}]
})
}
resource "aws_iam_role_policy_attachment" "ecs_execution" {
role = aws_iam_role.ecs_execution.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
}
# --- Lambda(オーケストレーション) ---
resource "aws_lambda_function" "orchestrator" {
filename = "orchestrator.zip"
function_name = "webarena-orchestrator"
role = aws_iam_role.lambda_role.arn
handler = "index.handler"
runtime = "python3.12"
timeout = 300
memory_size = 1024
environment {
variables = {
BROWSER_ENDPOINT = "http://chromium:3000"
BEDROCK_MODEL_ID = "anthropic.claude-3-5-haiku-20241022-v1:0"
}
}
}
# --- CloudWatchアラーム ---
resource "aws_cloudwatch_metric_alarm" "task_success_rate" {
alarm_name = "webarena-task-success-low"
comparison_operator = "LessThanThreshold"
evaluation_periods = 1
metric_name = "TaskSuccessRate"
namespace = "WebArena"
period = 3600
statistic = "Average"
threshold = 50
alarm_description = "タスク成功率50%未満検知"
}
セキュリティベストプラクティス
- ブラウザ隔離: ECSタスクはプライベートサブネット内、外部アクセス制限
- 認証情報管理: Webサイトログイン情報はSecrets Manager経由
- ネットワーク制御: セキュリティグループで対象Webサイトのみ許可
運用・監視設定
CloudWatch Logs Insights:
1
2
3
4
5
6
-- タスクカテゴリ別の成功率
fields @timestamp, task_category, task_result
| stats count(*) as total,
sum(case when task_result = 'success' then 1 else 0 end) as succeeded
by task_category
| sort succeeded / total desc
コスト最適化チェックリスト
- ECS Fargate Spot使用(ブラウザタスクは中断可能、最大70%削減)
- ブラウザインスタンスプーリング(起動時間短縮)
- スクリーンショットWebP圧縮(S3コスト削減)
- Bedrock Prompt Caching有効化
- タスクタイムアウト設定(無限ループ防止)
- AWS Budgets月額予算設定
- CloudWatch成功率アラーム
- 夜間バッチ実行でオンデマンドコスト削減
実験結果(Results)
性能推移(2023-2025)
| 期間 | エージェント | 成功率 | アーキテクチャ |
|---|---|---|---|
| 2023年7月 | GPT-4 (vanilla) | 14.41% | 直接プロンプティング |
| 2024年初頭 | GPT-4V + SoM | 26.4% | マルチモーダル |
| 2024年中盤 | Agent-E (GPT-4o) | 35.0% | プランナー + エグゼキュータ |
| 2025年初頭 | Claude 3.7 + SAGE | 54.8% | 階層的探索 |
| 2025年2月 | IBM CUGA | 61.7% | モジュラーアーキテクチャ |
2年間で14%→60%超、4倍以上の性能向上を達成しています。この急速な進歩は、単一モデルの改善ではなく、モジュラーアーキテクチャの確立によるものです。
成功要因の分析
2024-2025年のトップエージェントに共通する「標準モデル」アーキテクチャが形成されています。
- Planner: タスクを分解し、実行計画を立案
- Executor: 個々のステップをブラウザ操作に変換
- Memory: 過去の操作履歴と中間結果を管理
タスクカテゴリ別の成功率(2025年トップエージェント)
| カテゴリ | 成功率 | 主な成功要因 |
|---|---|---|
| 情報検索 | 72% | 検索ボックスの特定と結果の解釈 |
| ナビゲーション | 65% | ページ構造の理解 |
| コンテンツ作成 | 55% | フォーム入力の正確性 |
| 設定変更 | 48% | 多段階の操作の正確な実行 |
実運用への応用(Practical Applications)
WebArenaの技術は、RPAの次世代として実用化が進んでいます。
AI-driven RPA: 従来のRPA(ルールベース)と異なり、WebArenaで訓練されたエージェントは未知のWebサイトにも適応可能。ただし、現時点では60%の成功率は業務利用には不十分で、人間のフォールバックが必要
テスト自動化: Webアプリケーションの探索的テストにエージェントを活用。テストケースの自動生成と実行にWebArenaの技術を応用
アクセシビリティ監査: アクセシビリティツリーベースの操作により、視覚障害者向けのWebサイト利用可能性を自動評価
関連研究(Related Work)
- MiniWoB++(Shi et al., 2017): 初期のWeb操作ベンチマーク。単純化されたWebページでのクリック・入力操作を評価。WebArenaより大幅に単純
- Mind2Web(Deng et al., 2023): 137サイト、2,000タスクのWeb操作データセット。静的HTML上での操作予測に限定され、対話的操作は評価不可
- VisualWebArena(Koh et al., 2024): WebArenaのマルチモーダル拡張。910タスクの視覚的Web操作を評価
- WebArena Verified(2025): WebArenaの評価関数を改善し、型正規化と状態変更検証を追加。NeurIPS 2025 Workshop採択
まとめと今後の展望
WebArenaは、現実的なWeb環境でのエージェント能力を評価する標準ベンチマークとして、2023年の公開以来急速に普及しました。2年間で14%から60%超への劇的な性能向上は、Web操作エージェントの実用化が現実的なタイムラインに入ったことを示しています。
今後の課題として、WebArena Verifiedの評価精度改善の継続、より複雑なマルチサイトタスク(複数サイトをまたいだ操作)の追加、およびWebChoreArenaのような「退屈だが現実的な」タスクへの拡張が期待されます。60%を超えた成功率は、人間のフォールバック付きの実運用を視野に入れるレベルに到達しています。
参考文献
- arXiv: https://arxiv.org/abs/2307.13854
- Code: https://github.com/web-arena-x/webarena
- Website: https://webarena.dev/
- Related Zenn article: https://zenn.dev/0h_n0/articles/cdb9712312bdbf