1. Amazon Nova Actとは
1.1 背景と開発目的
Amazon は 2025年3月31日に、ウェブブラウザ内でアクションを実行するための新 AI モデル「Amazon Nova Act」を発表しました。これは Amazon AGI Labs が提供する研究プレビュー版で、一般開発者にも公開されています。
従来の AI はテキスト生成や情報検索が中心でしたが、実際には「タスクを完了させる」能力が求められています。例として、予約作成、オンラインショッピング、フォーム入力などが挙げられます。しかし複雑なウェブ UI を理解し操作するのは AI にとって難易度が高い課題です。Nova Act はこの問題を解決するために開発された、ブラウザ操作特化型の AI モデルです。
1.2 基本コンセプト
Amazon Nova Act は「ブラウザ内でアクションを自動実行する AI モデル」です。ウェブページの構造を理解し、クリック・スクロール・テキスト入力など人間の操作を代行できます。
SDK(Python)と AI モデルがセットになっており、Playwright と統合することで、開発者は自然言語の指示をもとにブラウザ操作ワークフローを構築できます。
Nova Act の基本構成要素
- 特殊訓練済み AI モデル(UI 理解に特化)
- Python SDK(Playwright 統合用インターフェース)
- Playwright 連携モジュール
高度な自律性よりも「信頼性の高い実行」を重視し、複雑なタスクを小さなステップに分解して確実に実行する設計思想を持ちます。
2. 主な特徴と機能
2.1 信頼性を重視した設計
Nova Act は、複雑なブラウザタスクで 30~60% 程度しか成功しない既存モデルの課題を克服するため、以下の戦略を採用しています。
信頼性向上のための戦略
- タスクの細分化:大きな目標を明確なステップに分解
- コンポーザブルなコマンド:単純コマンドの組み合わせで複雑ワークフローを構築
- 細かい指示:曖昧さを排除して具体的に指定
- 直接操作と AI 操作の組み合わせ
Amazon の内部評価では、ドロップダウンメニューや日付ピッカー、ポップアップなどで 90%以上 の成功率を実現し、公開ベンチマークでも高スコアを記録しています。
ベンチマーク | Nova Act | Claude 3.7 Sonnet | OpenAI CUA |
---|---|---|---|
ScreenSpot Web Text | 0.939 | 0.900 | 0.883 |
ScreenSpot Web Icon | 0.879 | 0.854 | 0.806 |
GroundUI Web | 0.805 | 0.825 | 0.823 |
2.2 主要コンポーネント
Python SDK の主なコンポーネント:
- NovaAct クラス:ブラウザセッション管理と AI モデル連携の中核クラス
- act() メソッド:自然言語指示を受けて操作実行、スクリーンショット送信~返却指示実行まで
- Playwright 統合:Microsoft 製自動化フレームワークと連携
- 構造化データ抽出:Pydantic 連携により JSON スキーマでデータ抽出
これらを組み合わせ、条件分岐や並列処理、エラーハンドリングなど標準的なプログラミング技法を活用できます。
2.3 従来のブラウザ自動化との違い
従来ツール(Selenium 等)と Nova Act の比較:
機能 | 従来の自動化 | Amazon Nova Act |
---|---|---|
インターフェース理解 | セレクタ/XPath に依存 | AI が視覚的に要素を理解 |
サイト変更への対応 | 壊れやすい(セレクタ変更で失敗) | 視覚的理解で柔軟性あり |
開発方法 | 詳細コーディング必須 | 自然言語指示中心 |
汎用性 | サイトごとに実装必要 | 同一コードを複数サイトで再利用可 |
メンテナンス | 頻繁な更新が必要 | コスト低減 |
ヒント:AI が「ログインボタンをクリック」など視覚的に理解するため、セレクタ指定は不要です。
3. 使い方ガイド
3.1 環境セットアップ
前提条件とインストール手順:
前提条件
- macOS または Ubuntu
- Python 3.10 以上
- Nova Act API キー
- API キーを nova.amazon.com/act で生成
- 環境変数に設定:
export NOVA_ACT_API_KEY="あなたのAPIキー"
- SDK のインストール:
pip install nova-act
注意事項
- API キーは秘密情報として管理
- 初回実行時に Playwright モジュールのインストールがあるため時間がかかる
- キー漏洩時は即時無効化・再発行を
3.2 基本的な使い方
スクリプトモードとインタラクティブモードがあります。初心者はスクリプトモードからスタートを推奨。
スクリプトモード例
from nova_act import NovaAct
with NovaAct(starting_page="https://www.amazon.com") as nova:
nova.act("search for a coffee maker")
nova.act("select the first result")
nova.act("scroll until you see 'add to cart' and click 'add to cart'")
上記で以下の操作が自動実行されます:
- Chrome で Amazon.com を開く
- “coffee maker” を検索
- 最初の検索結果を選択
- “カートに追加” をクリック
- 完了後にブラウザを閉じる
インタラクティブモード例
# ターミナルで Python 起動
>>> from nova_act import NovaAct
>>> nova = NovaAct(starting_page="https://www.amazon.com")
>>> nova.start()
>>> nova.act("search for a coffee maker")
# ブラウザの動きを確認
>>> nova.act("select the first result")
>>> nova.stop()
ポイント:
- Python 標準インタープリタで動作(IPython 非サポート)
- 1 コマンドずつ結果を確認可能
- 実行中は手動操作を避ける
- 終了時は
nova.stop()
を必ず呼び出して閉じる
3.3 効果的な指示の出し方
以下のベストプラクティスで、信頼性の高い結果を得られます。ベストプラクティス
- 具体的で明確な指示
✖️ 避ける例:nova.act("Indiaパレスから最後に注文したものを再注文して")
✅ 良い例:nova.act("ハンバーガーメニューを開き、注文履歴から Indiaパレス の最新注文を再注文")
- タスクを小ステップに分解
✖️ 避ける例:nova.act("100ドル以下で最高評価のホテルを予約して")
✅ 良い例:nova.act("ヒューストンのホテルを {出発日} から {到着日} で検索")
nova.act("顧客評価順に並び替え")
nova.act("100ドル以下の最初のホテルで予約をクリック") - 一貫した指示スタイル
「クリック」「入力」「選択」など同じ動詞を使い続けると、AI はパターンを学習しやすくなります。
構造化データの抽出
Pydantic モデルを使うと、結果を型付きで取得できます:
from pydantic import BaseModel
from nova_act import NovaAct, BOOL_SCHEMA
class Product(BaseModel):
name: str
price: float
rating: float
class ProductList(BaseModel):
products: list[Product]
with NovaAct(starting_page="https://www.amazon.com") as nova:
nova.act("search for bluetooth headphones")
result = nova.act(
"Extract the name, price, and rating of the first 3 products",
schema=ProductList.model_json_schema()
)
if result.matches_schema:
products = ProductList.model_validate(result.parsed_response)
for p in products.products:
print(f"{p.name}: ${p.price}, 評価 {p.rating}/5")
ポイント:
- 抽出は単独の
act()
呼び出しに分ける - Yes/No は
BOOL_SCHEMA
が便利 result.matches_schema
を必ずチェック
4. 応用例とユースケース
Nova Act は実践的なシナリオで大きな効果を発揮します。
4.1 ショッピング自動化
特定条件の商品を自動で検索・購入する例:
with NovaAct(starting_page="https://www.amazon.com") as nova:
nova.act("search for running shoes mens size 10")
nova.act("filter by 4 stars & up")
nova.act("filter price between $50 and $100")
is_available = nova.act(
"Is the first product available in stock?",
schema=BOOL_SCHEMA
)
if is_available.parsed_response:
nova.act("click on the first product")
nova.act("select size 10")
nova.act("add to cart")
nova.act("proceed to checkout")
ポイント:事前にログイン済みプロファイル(user_data_dir
)を指定し、Playwright 経由で機密情報を扱うのが安全です。
4.2 データ抽出と整理
不動産情報をまとめて距離計算し、並列処理で効率化する例:
from pydantic import BaseModel
from concurrent.futures import ThreadPoolExecutor, as_completed
from nova_act import NovaAct
class Apartment(BaseModel):
address: str
price: float
bedrooms: int
distance_to_station: float = None
class ApartmentList(BaseModel):
apartments: list[Apartment]
def get_apartments():
with NovaAct(starting_page="https://www.apartments.com") as nova:
nova.act("search for apartments in San Francisco")
nova.act("filter for 2 bedroom apartments")
result = nova.act(
"Extract the address, price, and bedrooms for the first 5 listings",
schema=ApartmentList.model_json_schema()
)
if result.matches_schema:
return ApartmentList.model_validate(result.parsed_response)
return None
def get_distance_to_station(apt):
with NovaAct(starting_page="https://www.google.com/maps") as nova:
nova.act(f"search for directions from {apt.address} to Caltrain Station")
res = nova.act(
"What is the walking distance in miles?",
schema={"type":"number"}
)
if res.matches_schema:
apt.distance_to_station = res.parsed_response
return apt
apartments = get_apartments()
if apartments:
with ThreadPoolExecutor(max_workers=5) as executor:
for future in as_completed([executor.submit(get_distance_to_station, a) for a in apartments.apartments]):
a = future.result()
print(f"{a.address}: ${a.price}, {a.bedrooms}BD, 距離 {a.distance_to_station}マイル")
ヒント:
- Pydantic モデルでデータ構造を明示
- ThreadPoolExecutor で並列実行
- 各セッションは独立して起動
- 複雑なページは適切にスクロールを指示
4.3 定期タスクの自動化
毎週火曜 18:00 にサラダを自動注文する例:
import schedule, time
from datetime import datetime
from nova_act import NovaAct, BOOL_SCHEMA
def order_salad():
print(f"注文開始: {datetime.now()}")
with NovaAct(
starting_page="https://order.sweetgreen.com/",
user_data_dir="/path/to/profile",
headless=True
) as nova:
nova.act("click on 'order now'")
nova.act("select 'deliver it'")
nova.act("search for 'Kale Caesar'")
nova.act("add to cart")
nova.act("go to checkout")
nova.act("select 'deliver tonight at 6:30 PM'")
nova.act("click 'place order'")
confirm = nova.act(
"Did the order complete successfully?",
schema=BOOL_SCHEMA
)
print("注文完了!" if confirm.parsed_response else "注文失敗。")
schedule.every().tuesday.at("18:00").do(order_salad)
print("サラダ自動注文サービスを開始しました。")
while True:
schedule.run_pending()
time.sleep(60)
注意:
- 長期運用にはエラーハンドリング・再試行ロジックを実装
- 支払いタスクはテスト時に
headless=False
で動作確認を - メール通知などの確認手段を組み込む
5. 制限事項と考慮点
研究プレビュー版ゆえの制限と注意点を把握してください。
5.1 現在の技術的制限
技術的制限事項
- ブラウザ外アプリ操作不可
- 高レベルな曖昧指示で信頼性低下
- マウスオーバー要素は扱いづらい
- ブラウザ UI(権限ダイアログ等)は操作不可
- CAPTCHA 自動解決不可
対処方法
- 小ステップ分解
- CAPTCHA 登場時は手動介入ロジックを実装
- キーボード操作など代替手段を検討
- エラーハンドリング/フォールバックを用意
5.2 セキュリティと個人情報
以下の点に注意して運用してください。重要なセキュリティ考慮事項
- プロンプトやスクリーンショットが収集される可能性
- API キーはコード埋め込み/コミット厳禁
- パスワード等の機密情報は Playwright 経由で安全入力
- スクリーンショットに情報が含まれる点に注意
機密情報の安全入力例
import getpass
from nova_act import NovaAct
with NovaAct(starting_page="https://example.com/login") as nova:
nova.act("enter username 'janedoe' and click password field")
pwd = getpass.getpass("パスワード: ")
nova.page.keyboard.type(pwd)
nova.act("click sign in")
注意:重要タスクは初期段階で人間監視下で動作確認を行い、Amazon 利用規約に従ってください。
6. 将来の展望
Amazon は長期的にブラウザ操作 AI の実用化を見据えています。
- より信頼性の高いマルチステップ自動化
- 強化学習でエージェント性能向上
- 複雑 UI への対応強化
- 自動回復能力の向上
- 自然言語指示のさらなる直感化
Amazon AGI Labs のビジョン:
エージェントが多様な環境で強化学習を通じて訓練されることで、より高度なマルチステップタスクを高い信頼性で実行できる未来を目指しています。
7. まとめ
Amazon Nova Act は、従来ツールにはない自然言語指示と視覚的理解を活用したブラウザ自動化を実現します。主な利点
- 自然言語でのブラウザ操作
- 視覚的理解に基づく堅牢性
- サイト変更に強い柔軟性
- 小ステップ分解設計
- Python 連携で拡張性高い
- 並列処理による効率化
現在の制限
- ブラウザ外アプリ非対応
- 曖昧指示で信頼性低下
- CAPTCHA 非対応
- 研究プレビュー版のデータ収集あり
- macOS/Ubuntu のみサポート
開発者はぜひ SDK を試用し、フィードバックを通じて次世代のブラウザ操作 AI を共に育ててください。
コメント