この記事は ServiceNow アドベントカレンダー 2024 の12月20日分(シリーズ2)の記事として執筆しています。
はじめに
昨今の ServiceNow 社の生成AIに対する力の入れっぷり、すごいですよね。
今年初めのモーサテでも注目されていました1。
Now Assist for Code や Flow Assist など、革新的な機能を次々とリリースしている ServiceNow 社。今後はどのような機能をリリースして社会に変革をもたらそうとしているのでしょうか?
今回は、ServiceNow 社が開発するオープンソースの Python パッケージ "AgentLab" を触ってみたいと思います。
とりあえず動かしてみる
以下の環境で動作確認済みです。また、OpenAI2 の API 鍵が別途必要です。
- MacBook Pro M1
- Python 3.11.7
AgentLab のインストール
ディレクトリを作って移動します。
mkdir AgentLab
cd AgentLab
Pythonの仮想環境を作ってアクティベートします。
python -m venv venv
. venv/bin/activate
AgentLab および Playwright(Webアプリケーション向けテスト自動化フレームワーク)をインストールします。
pip install agentlab
playwright install
環境変数 OPENAI_API_KEY
に OpenAI の API 鍵を登録します。
export OPENAI_API_KEY=<OpenAIのAPI鍵>
動かしてみる
agentlab-assistant
コマンドを実行します。 --start_url
オプションで初期ページ(デフォルトは https://www.google.com
)を指定できます。
agentlab-assistant --start_url=https://www.amazon.co.jp/
指定した Web ページとチャット画面が表示されるので、チャット欄に何か入力してみましょう。
デフォルトの agentlab-assistant
コマンドは click
(クリックする)、dblclick
(ダブルクリックする)、fill
(文字を入力する)などのブラウザを操作するアクションに特化しています(「画面上の内容を読み取って要約する」といったことはできません)。
こちらの入力したプロンプトに従って、的確に欲しい商品をカートに追加してくれていることがわかります。
結局 AgentLab って何なの?
AgentLab は、ServiceNow が開発する Web エージェントの開発と評価を支援するためのフレームワークです。Web エージェントの開発者に向けて提供される機能群であり、消費者向けの製品ではありません。
MiniWoB++ でベンチマークテストしてみる
具体的な利用例の一つとして、AgentLab で Web エージェントのベンチマークテストをしてみましょう。
MiniWoB++ は Web インターフェース上で強化学習エージェントの性能を評価するためのベンチマーク環境です。
Web エージェントの設計手法として強化学習によるアプローチが注目されてきましたが、強化学習ベースの Web エージェントには「膨大なデータと計算リソースが必要」「特定のタスクや環境に特化しやすく、汎用性が低い」といった課題がありました。
事前学習された大規模データを活用する LLM の登場により、ゼロショットで多目的なタスクに対応できる Web エージェントをより容易に実現できることが期待されます。
今回は GPT-4o mini を使用して、MiniWoB++ ベンチマークを実行します。
MiniWoB++ のインストール
browsergym-miniwob
をインストールします。
pip install browsergym-miniwob
GitHubの miniwob-plusplus
リポジトリをローカルマシンにクローンします。
git clone git@github.com:Farama-Foundation/miniwob-plusplus.git
git -C "./miniwob-plusplus" reset --hard 7fd85d71a4b60325c6585396ec4f48377d049838
Error: Permission denied (publickey)
のようなメッセージが出る場合は、下記の手順に従って GitHub アカウントに SSH 鍵が登録されていることを確認します。
作業中のディレクトリに miniwob-plusplus
というディレクトリが作成され、その配下の miniwob/html/miniwob
ディレクトリにベンチマーク用の HTML ファイルが格納されるので、そちらのディレクトリを環境変数 MINIWOB_URL
に登録します。
export MINIWOB_URL="file://$PWD/miniwob-plusplus/miniwob/html/miniwob/"
ベンチマークの実行
以下の Python スクリプトを作成してベンチマークを実行します。
from agentlab.agents.generic_agent import AGENT_4o_MINI,AGENT_4o
from agentlab.experiments.study import make_study
study = make_study(
benchmark="miniwob",
agent_args=[AGENT_4o_MINI],
comment="My first study",
)
study.run(n_jobs=1)
5行目でベンチマークの種類を、6行目で使用する LLM モデルを指定できます。
利用できるベンチマークには MiniWoB++ のほか、ServiceNow の PDI 環境でベンチマークを実行する "WorkArena3" や、より一般的な Web サイトを想定した "WebArena" などが指定できます。
ベンチマークの進行状況は Web ブラウザで http://127.0.0.1:8265
にアクセスして確認できます。全部で625個のベンチマークタスクが存在し、すべて完了するまでに2時間半ほどかかりました。
ちなみに MiniWoB++ ベンチマークの実行にかかった費用ですが、 GPT-4o mini の場合1ドル程度でした。GPT-4o でも試してみましたが、クレジットがみるみる削られていったため強制停止しました。
実行結果の確認
実行結果は以下のコマンドを実行し、 Web ブラウザで http://127.0.0.1:7860
にアクセスして確認できます。
agentlab-xray
"Select Experiment Directory" をクリックして、MiniWoB++ のベンチマーク結果を選択します。
ディレクトリ名の隣に avg-reward: xx.x% - completed: xxx/625 - errors: x
といった形式で実行結果の概要が表示されます。
個々のタスクの結果を確認するには "Select Task and Seed" タブを参照します。
こちらは試行回数:5回中すべて成功したタスク。Web メールを模した画面から指定した送信者のメールを探して返信せよ、というもの。
こちらは5回すべて失敗した、航空便予約システムのタスク。
GPT-4o mini の場合、カレンダーの日付をクリックするといったピンポイントのクリック作業が苦手なようです。
まとめ
ServiceNow社は「責任あるAI」の取り組みに力を入れており、透明性と説明責任を重視したAIの開発を推進しています45。その一環として、LLM ベースの Web エージェント開発を促進する機能もオープンソースで公開しているのではないかと思われます。
近い将来、問い合わせユーザーからの質問に対して自律型の AI エージェントが ServiceNow を自動制御し、解決まで導いてくれるような未来が訪れるのかもしれませんね。
参考