browser-useを使ってみる
モチベーション
最近見かけるようになったので、browser-useを使ってみます。以前RPAをやっていた時もあったので、自動化周りは興味がある範囲です。
また昨年、Anthropicのcomputer useを使ってみたスレッドはここです。今回はzennでスクラップにしてみます。
インストール・環境変数の準備
あんまり汚くはしたくないですが、今回はさっと試してみたいだけなので、Macのローカル環境で。
$ python3 --version
Python 3.11.6
$ pip3 install browser-use
$ pip3 install playwright
$ playwright install
$ mkdir browser-use-sample
$ cd browser-use-sample
$ touch .env
→あまりpython関連のソフトウェア触っていなかったので、pip3をアップグレードしたり、言われた通りにパスを通したりもしています。
.envファイルには払い出しておいたOPENAI_API_KEY
を設定しておきます。
OPENAI_API_KEY=sk-xxxxxxxxxxxx
サンプルコード
.envをおいたフォルダにsample.pyなどの名前でファイルを作成し、以下コードを書いて実行します。
自環境だとローカルだからなのか、.envファイルを明示的に読み込む処理を書かないとAPIキーを読み込んでくれませんでした。
タスク自体はリポジトリのREADME.mdにあるものを和訳したもので、モデルは高速・廉価なgpt-4o-mini
に変えています。
ただ後述しますが読み込みを待ちきれていない、性能面の問題なのか意図した動作をしない場面はあったのでその場合はgpt-4o
を使ったほうがいいかも知れません。
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from browser_use import Agent
import asyncio
load_dotenv()
async def main():
agent = Agent(
task="2025年1月12日にバリからオマーンへの片道フライトをGoogle Flightsで検索し、最安のオプションを教えてください。",
llm=ChatOpenAI(model="gpt-4o-mini"),
)
result = await agent.run()
print(result)
asyncio.run(main())
書いたら実行します。
$ python3 sample.py
実行(gpt-4o-mini)
実行すると、playwright関連でインストールされたと思われるchromiumが立ち上がり、自動で操作し、タスクの完了を目指します。
コンソールでは現在実行されているステップが出力されています。
途中経過。ここでおや、となるのですが、往復や発着が正しくない状態で検索結果が出力されています。
最終的にコンソールを見ると料金が表示されているものの、経過も正しくなかったので、結果としても誤っていました。
改めてコンソールを見てみると、「Eval: Unknown」や「Eval: Failed」が並んでいるので、操作がうまく行っていなくてもステップを進めているようです。
実行結果(gpt-4o)
同じサンプルコード、プロンプトでモデルだけ変えてみます。
一応サンプルコード再掲
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from browser_use import Agent
import asyncio
load_dotenv()
async def main():
agent = Agent(
task="2025年1月12日にバリからオマーンへの片道フライトをGoogle Flightsで検索し、最安のオプションを教えてください。",
llm=ChatOpenAI(model="gpt-4o"),
)
result = await agent.run()
print(result)
asyncio.run(main())
検索結果は先ほどと異なって、発着の場所、片道の指定、日付などが正しく選択できています。
最終的にはコンソール上に正しい料金が出力されています。
📍 Step 13
INFO [agent] 👍 Eval: Success - Flight options are visible.
INFO [agent] 🧠 Memory: Identify the cheapest flight option from the results.
INFO [agent] 🎯 Next goal: Find the cheapest flight option from Bali to Oman.
INFO [agent] 🛠️ Action 1/1: {"done":{"text":"The cheapest flight from Bali to Oman on January 12, 2025, is to Muscat with a layover, taking 44 hours and 55 minutes, costing ¥63,360."}}
INFO [agent] 📄 Result: The cheapest flight from Bali to Oman on January 12, 2025, is to Muscat with a layover, taking 44 hours and 55 minutes, costing ¥63,360.
INFO [agent] ✅ Task completed successfully
わかったこと
- ブラウザでの操作を自然言語で指示して自動で実行できることが試せました。
- セキュリティ面を懸念していましたが、自分の利用ブラウザを操作するわけではなく現状は自動テスト同様Chromiumを操作する形です。
- モデルによって、操作の精度が異なりました。(性能なのか、APIの応答時間の都合なのかは不明)
- 検索の用途で使う場合、最初に検索して出たページが正しい前提で情報を取得するので、そもそもページに回答がない場合などはダメそうで、延々とスクロールだけして再度調べ直すまでは至りませんでした(事故修復してくれる記述を見かけましたがトークンが勿体無いので途中で止めました)
感想とか
- 今回は検索用途で使ってみましたが、Googleのドキュメント関連にアクセスさせられれば操作、出力の自動化までできるのかなと。 ※もちろん認証情報の取り回しは注意(ログインできないような記述も見かけました)
- 検索用途だけであればSearchGPTの方が早く正確、情報源を出してくれたりするので、やはり出力や操作を自動化したいところかなと思いました。