はじめに
本記事はJapan AWS Ambassador Advent Calendar 2025の14日目の記事です。
ラスベガスでは熱気にあふれ充実した日々を送りましたが、反動からか帰国日に体調を崩し帰国後2-3日の記憶がありません😅 皆様も体調管理お気をつけ下さい!
さて、前回記事に引き続き参加レポートとなります。
AWS re:Invent2025で開催されたBuilders Session
Automate Review Analysis with Nova Act and Generative AI [NTA301] に参加してきました。
※現時点では、Nova Actサービスは米国東部(バージニア北部)リージョンでのみ提供されており、東京リージョンからは利用できません。(一部ドキュメント、サービスへも、日本からはアクセスできません)
また、APIキー発行等には Amazon.com アカウント(.co.jpでは無い)も必要という事や規約・ライセンス等で、すぐに活用する事は現時点では難しいかもしれませんので、こんなコードでこのように動作するのね程度にご覧頂ければと思います。
目次
セッションの概要
参加したセッションでは下記のような事を解説頂き・実施しました
- Nova Actを使用したWeb自動操作
自然言語指示でウェブサイトと対話できるAmazonの最新AIエージェントの使用方法 - 非構造化データの処理
ウェブコンテンツを整理された構造化データに変換 - スケーラブルなデータ抽出
ページネーション、再試行、エラー処理などの実世界の課題に対応 - 実践的な応用
これらのスキルを任意のウェブサイトやデータソースに適用
ワークショップ
- 提示されたコードの実行(Webコンテンツから情報収集)
- 提示されたコードの実行(収集した情報解析 )
提示されたコードを利用すると、あるWebサイトからユーザレビューを収集・構造化、および分析する事ができました。
そのような知見を、競合調査、市場分析、コンテンツ集約、ビジネスインテリジェンスなど、多様なシナリオに適用していく事が可能となる、といった内容となります。
Nova Actとは
概要
Nova 2 Liteモデルをベースに構築され、Amazon Novaモデルファミリーの一部として位置づけられているAmazon Nova Actは、ブラウザUIの自動化とワークフロー実行に最適化されたエージェントサービスとなります。
単なるモデルではなく、モデル+実行環境+SDKの統合ソリューションとして提供されています。
日本からでも確認できるドキュメント
Nova Act概要
https://aws.amazon.com/jp/nova/act/
費用
https://aws.amazon.com/jp/nova/pricing/
ユーザガイド
https://docs.aws.amazon.com/nova-act/latest/userguide/what-is-nova-act.html
サンプルコード
https://github.com/amazon-agi-labs/nova-act-samples
ユースケース
Amazon Nova Act ヘッドレスモードを使用して自動スモークテストを実装する
https://aws.amazon.com/jp/blogs/machine-learning/implement-automated-smoke-testing-using-amazon-nova-act-headless-mode/
Dr. Swami Keynote - Nova Act GA発表部分 公式YouTubeより
実際に利用してみる
弊社のブログページへアクセスし最新記事へアクセス、最下段近くの執筆者情報を取得するコードとなります。
公式には日本語対応されていないハズですが、.act 指示出しですんなり動作してしまったので驚きました😅
試す中で特にハマる点はないのですが、要素を探す際に勝手にスクロールダウンしていってくれるのですが
要素が見つからない場合、フッターに含まれるソーシャルメディアの過去記事を延々と見続けてしまう等
試行回数を制限してあげる必要がある事や、明確な指示出しをしたつもりでもうまく行かないケースがありました。
こういった点は、Playwright APIとの併用や指示の出し方を変える等が必要と感じました。
また、実際にバッチのような形で、呼び出す際には実行時間が増える事で費用にも跳ねるためどこで終えるか、どの部分を繰り返し実行させるかも考慮する必要があると感じました。
※実際にワークショップで提示されたコードでは、より高度な制御(X回試行して諦める、データ構造化、Playwright APIとの併用)を実施されていたのですが、以下は自然言語処理のみで動作確認出来た範囲の超簡易デモとなります。
実行したプログラム
実質書いた内容は、WebページのURLと .act 内の指示文章だけで動作しちゃいます...凄い
|
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 |
import time import logging from nova_act import NovaAct # Set up logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) def main(): """Main extraction function.""" logger.info("Starting") # Initialize Nova Act nova = NovaAct( starting_page="https://www.skyarch.net/blog/", headless=False ) try: nova.start() logger.info("Browser started successfully") # 指示無しでも、Popupが出ると消す処理を自動的に実施してくれる事があったのですが確実性を高めるため記載 result = nova.act("Cookieポリシーが表示されたらPopupを消す。日付記載のある一番最初の記事を開く") print(result) result = nova.act("記事をスクロールし、ABOUT この記事をかいた人 の名前をテキスト化し終了") print(result) except Exception as e: logger.error(f"Extraction process failed: {e}") raise finally: # Clean up try: nova.stop() logger.info("Browser session closed") except: pass if __name__ == "__main__": main() |
動作時のスクショ(アニメーション 約4倍速)
出力されたログ(抜粋)
以下抜粋ログとなりますが、headless を Falseとしてブラウザ操作が見える状態で動かすと
何を目的に、どのように現状判断がされているかを見ることが出来デバックしやすかったです。
プログラム起動〜指示1の実行&完了
|
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 |
$ python3 nova-act.py 07:25:00,605 - INFO - Starting start session xxx on https://www.skyarch.net/blog/ logs dir xxx 07:25:10,888 - INFO - Browser started successfully 4021> act("Cookieポリシーが表示されたらPopupを消す。日付記載のある一番最初の記事を開く") 4021> think("I am on the Skyarch Broadcasting website. I see a cookie policy popup. I should complete my task by closing the popup and opening the first article with a date. The popup is still open, which is not what I need. I should click on the "Accept" button to close the popup."); 4021> agentClick(" <box>709,1077,752,1231</box> "); 4021> think("The popup is now closed, which means my prior action was successful. The page is now showing the articles, but the first article is not open yet. I should click on the first article to open it."); 4021> agentClick(" <box>675,257,744,576</box> "); 4021> think("The first article is now open, which means my prior action of clicking on the first article was successful. The page is now showing the article, which is what I need. My task is complete, and no return information was asked of me. I should empty return."); 4021> return; ActResultWithoutResponse( response = None parsed_response = None valid_json = None matches_schema = None metadata = ActMetadata( session_id = 402144f3-c057-4da5-828a-a0fe54bad047 act_id = 31b3a1fa-e12f-4e33-af4a-91e9e936b0cc num_steps_executed = 3 start_time = 07:25:10.888244 JST end_time = 07:25:34.645124 JST step_server_times_s = ['6.176', '5.146', '4.417'] prompt = 'Cookieポリシーが表示されたらPopupを消す。日付記載のある一番最初の記事を開く' ) ) |
指示2の実行&完了
|
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 |
4021> act("記事をスクロールし、ABOUT この記事をかいた人 の名前をテキスト化し終了") 4021> ... 4021> think("I am on the Skyarch Broadcasting page. I see a section with the title 'PowerShellとCloudWatchログの接続と設定とのコツのついて'. I should complete my task by scrolling down the article to find the 'ABOUTこの記事をかいた人' section and returning the name of the author. I am now on the 'PowerShellとCloudWatchログの接続と設定とのコツのついて' section, but the 'ABOUTこの記事をかいた人' section is not visible. I should scroll down to find the 'ABOUTこの記事をかいた人' section."); 4021> agentScroll("down", " <box>0,0,812,1594</box> "); ...指示の 「ABOUTこの記事をかいた人」 にたどり着くまで scroll down が何回か試行され最終的に見つかる... 4021> think("The page now shows the 'ABOUTこの記事をかいた人' section. My prior action of scrolling down was successful. The 'ABOUTこの記事をかいた人' section is now visible, and the name of the author is 'YoshiSaaana'. My task is complete, and I should return the name of the author, 'YoshiSaaana'."); 4021> return "YoshiSaaana"; 4021> ** View your act run here: /var/folders/cz/g92pw5vd46d9ckwn_23wfcvw0000gn/T/tmpg9_colly_nova_act_logs/402144f3-c057-4da5-828a-a0fe54bad047/act_d760fc40-1f3f-453b-9b56-88b7c1637433_記事をスクロールし、ABOUT_この記事をかいた人_の名前を.html ActResultWithoutResponse( response = YoshiSaaana parsed_response = None valid_json = None matches_schema = None metadata = ActMetadata( session_id = 402144f3-c057-4da5-828a-a0fe54bad047 act_id = d760fc40-1f3f-453b-9b56-88b7c1637433 num_steps_executed = 10 start_time = 07:25:35.004921 JST end_time = 07:27:06.870382 JST step_server_times_s = ['8.567', '5.829', '7.228', '5.606', '6.615', '6.306', '8.947', '6.820', '7.750', '7.115'] prompt = '記事をスクロールし、ABOUT この記事をかいた人 の名前をテキスト化し終了' ) ) 07:27:07,680 - INFO - Browser session closed |
最終的に、response = YoshiSaaana が response に入って返却されました!
本当は、YoshiSaaaan なのですが、現時点ではご愛嬌という事でと思います(正常に返される記事もあるので、画像解析の精度等と考えていますが詳細不明)
まとめ
Nova Actを利用する事で、従来はPlaywrightやSeleniumなどで複雑なセレクタ指定やDOM操作が必要だったWeb自動化が、自然言語の指示だけで実現できるようになりました。
特に、動的に変化するWebサイトや構造が複雑なページでも、AI(Agent)が自律的に要素を探索し操作してくれる点が大きな利点です。
一方で、現時点では米国東部リージョンでのみ提供されており、日本から、東京リージョンから公式利用出来る日を待ちたいと思います。
また、今回のKeynoteでは Agent AIとして、Nova Act、他発表されたサービスは始まりに過ぎないという話もあったため、この先さらにどのようなサービスが出てくるか、我々自身も作っていく事が出来るかとても楽しみとなりました。😀
投稿者プロフィール
-
Japan AWS Ambassadors 2023, 2024
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております
機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。




