E2B Desktop Sandbox: GUI操作Agentのための安全な仮想環境

こんにちは!AIチームの戸田です。

近年、様々な作業の自動化を目的としたAI Agent(以下、Agent)が注目を集めています。特に、GUIを操作するAgentは、ユーザーインターフェースを介したタスクの自動化を可能にするため、大きな可能性を秘めています。AnthropicのClaude 3.5 Computer UseOpenAIのOperator、オープンソースはbrowser-useなどがその代表例です。研究分野でも、学習用データセット(GUI-World: A Dataset for GUI-Oriented Multimodal Large Language Modelsなど)やベンチマーク(WebWalker: Benchmarking LLMs in Web Traversalなど)が多数公開されており、GUI操作Agentの研究開発は活発化しています。

一方で、Agentにコンピューターの操作を委任することには注意が必要です。意図せず危険なコードを実行してしまう恐れがあるため、セキュリティリスクが非常に大きいと考えられます。

そこで注目したいのが、E2Bというオープンソースのインフラストラクチャです。E2BはVMWareやVirtualboxのような仮想環境を提供し、Agentの誤操作のリスクを回避する仕組みを整えています。前回の記事でも、CodeAgentの実行環境としてE2Bを活用できることを少し触れました。

今回は、E2Bが提供するGUI環境「Desktop Sandbox」を実際に試用し、その機能や使い方、そしてLLMを用いたGUI操作のサンプルアプリケーション「Open Computer Use」について解説します。

https://e2b.dev/

Desktop Sandboxの使い方

Desktop Sandboxの使い方や、Desktop Sandboxの環境をLLMを使って操作するサンプルアプリOpen Computer Useを紹介していきます。PythonとJavaScriptのSDKが提供されていますが、本記事ではPythonを使用します

初期設定

ライブラリはpipでインストールすることができます。

pip install e2b-desktop

加えて、E2Bにサインアップし、APIキーを取得する必要があります。

KeysのAdd API Keyから追加し、発行されたAPI Keyを環境変数E2B_API_KEYに設定して下さい。

# .bashrcなどに設定
export E2B_API_KEY="xxx"

仮想環境の作成

以下のコードで仮想環境を構築できます。

from e2b_desktop import Sandbox

desktop = Sandbox()

import文を除けばたった一行で構築できます。お手軽ですね。

GUI操作の様子を映像で確認したい場合、video_stream引数にTrueを設定することで実現できます。

from e2b_desktop import Sandbox

desktop = Sandbox(video_stream=True)
stream_url = desktop.get_video_stream_url()
print(stream_url)  # https://e2b.dev/stream/sandbox/<sandbox-id>?token=<secret-token>の形式

最後のprint文で表示されたURLをブラウザで開くと、仮想マシンのデスクトップ画面がリアルタイムでストリーミング配信されます。

OSには高速で軽量なデスクトップ環境として知られるxfceが採用されており、実際に仮想環境を作成してみたところ、数秒で起動するほど軽量でした。

GUI操作

Desktop Sandboxでは、以下のGUI操作が可能です。

  • マウス操作(移動やクリック)
  • スクリーンショットを撮る
  • キーボード操作(テキストを打ち込む)
  • ファイル操作
  • bashコマンドの実行

実際に右クリックを実行する例を見てみましょう。

from e2b_desktop import Sandbox

desktop = Sandbox(video_stream=True)
stream_url = desktop.get_video_stream_url()
print(stream_url)

desktop.right_click()

他の操作に関してはここでは紹介しませんが、READMEにまとまっているので気になる方はそちらを参照していただければと思います。

GUI操作はデフォルトで提供されているメソッドに加え、PyAutoGUIを使うこともできます。PyAutoGUIを使った右クリックの例を見てみましょう。

from e2b_desktop import Sandbox

desktop = Sandbox(video_stream=True)
stream_url = desktop.get_video_stream_url()
print(stream_url)

desktop.pyautogui("pyautogui.click(button='right')")  # PyAutoGUI で右クリックする

これによりプログラマティックなGUI操作が可能になります。

以下は私がテストで作ったデスクトップ上でマウスを円形に動かすコードを紹介します。

import time
import math
from e2b_desktop import Sandbox

desktop = Sandbox(video_stream=True)
stream_url = desktop.get_video_stream_url()
print(stream_url)

# 円の中心座標(画面の中央付近に設定)
screen_width, screen_height = desktop.get_screen_size()
cx, cy = screen_width // 2, screen_height // 2

r = 100  # 半径の設定
interval = 0.01  # 動作間隔
loops = 3  # 3周回す

for _ in range(loops):
    for angle in range(0, 360, 15):  # 15度刻みで移動
        x = cx + r * math.cos(math.radians(angle))
        y = cy + r * math.sin(math.radians(angle))
        desktop.pyautogui(f"pyautogui.moveTo({x}, {y}, duration={interval})")

このコードを実行し、出力されたURLにアクセスすると、以下のような映像が確認できます。

少しカクついてはいますが、マウスがぐるぐる円運動をしていることがわかります。

Open Computer Use

Desktop Sandboxの基本的な使い方を紹介しましたが、LLMを用いて操作するには、さらに工夫が必要です。browser-useなどの既存のGUIを操作する Agentを参考にすると、LLMによるGUI操作Agentの一般的な処理フローは以下の通りです。

  1. ユーザーからの指示を受け取る
  2. スクリーンショットを撮る
  3. マウスの座標など指示されたタスク遂行に必要な情報を得る
  4. 必要な操作を予測する
  5. 予測された操作を実行する
    以下、指示が完了するまで2-5を繰り返す

このフローを自力で実装することも可能ですが、少々手間がかかります。E2Bは、このフローを簡単に実現できるサンプルアプリケーション「Open Computer Use」を提供しています。以下はOpen Computer Useのアーキテクチャ図です。

以下に環境構築手順を示します。(macOSを想定しています)

# 必要なライブラリのインストール
brew install poetry ffmpeg

# リポジトリのクローン
git clone https://github.com/e2b-dev/open-computer-use/

# 依存するPythonライブラリのインストール
cd open-computer-use && poetry install

次に、使用したいLLMプロバイダのAPIキーを環境変数に設定し、該当するプロバイダの設定を有効にします。そしてリポジトリ内のconfig.pyの設定をプロバイダに合わせます。私はOpenAIのAPI Keyを設定したので、vision_model = providers.OpenAIProvider("gpt-4o")action_model = providers.OpenAIProvider("gpt-4o")のコメントを外しました。

以上で準備は完了です。実際にOpen Computer Useを実行してみましょう。今回はAgentに「Webブラウザを開いて、UCIのirisのデータセットをダウンロードし、ダウンロードされたzipファイルを解凍して中身を確認する」といった指示を与えます。

poetry run start --prompt "Download the UCI iris dataset using a web browser, unzip the downloaded zip file, and check the contents."

上記のコマンドを実行すると、仮想環境内でブラウザが起動し、指示に従って操作が開始されます。操作ログの動画とAgentの行動ログを以下に示します。

▼ Agentの行動ログ

Agentの行動ログはAgentの思考であるTHOUGHTと実行したACTION、そして、観測した情報のOBSERVATIONに分けられています。

Agentの行動ログと操作ログの動画を合わせて見てみると、Webブラウザのアイコンを見つけられなかったり、UCIのサイトで迷子になったりと、目的のデータセットにたどり着くまでに時間がかかったりしていることがわかります。しかし、最終的には指示通りIrisデータセットのダウンロードと確認に成功しています。

終わりに

本記事では、E2Bが提供するGUI操作Agent開発のための安全な仮想環境「Desktop Sandbox」とその活用例として「Open Computer Use」を紹介しました。Desktop Sandboxを利用することで、非常に簡単に仮想環境を構築でき、Open Computer Useを使えば、GUI操作Agentへの指示をすぐに試すことが可能です。

しかし、現状のGUI操作Agentの精度はまだ発展途上であり、複雑なタスクや予期せぬ状況への対応には課題が残るようです。ベースとなるLLMの性能向上や、より洗練されたアーキテクチャの開発によりこれが解決できることを期待しています。

E2Bのような安全な開発環境は、こうした Agentの発展を後押しするとともに、身元不明の実行ファイルのテストや、マルウェア・スパイウェアの解析などにも使えるのではないでしょうか?私も活用方法を模索していきたいと思います。

最後までお読みいただきありがとうございました!

PICK UP

TAG