Anthropic Claude の Computer Use Demo を解剖する：仮想世界を操るAIエージェント

この記事では、Anthropic社の提供する`computer-use-demo-jp`リポジトリを徹底的に解剖し、その構造、機能、そしてコードの詳細まで踏み込んで解説します。Claude 3.5 Sonnetの"computer use"機能、すなわちAIエージェントが仮想コンピュータを操作する様子を体験できる、この画期的なプロジェクトの全貌を明らかにします。

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">WindowsのDockerでAnthropic Computer Use Demo動かしてみた！<br>お題：Amazonで昼寝枕をカートに入れて！<br>結果：成功<br>＊Windows用のパワーシェルのスクリプトや実行コマンドはリポジトリと一緒に公開します <a href="https://t.co/4Syo9rWSlx">https://t.co/4Syo9rWSlx</a> <a href="https://t.co/rDpXzuapDY">pic.twitter.com/rDpXzuapDY</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1849073250535604649?ref_src=twsrc%5Etfw">October 23, 2024</a></blockquote>


## プロジェクトの概要：AIがコンピュータを操作する未来

このデモは、Dockerコンテナ内にUbuntu仮想デスクトップ環境を構築し、その中で大規模言語モデルClaude 3.5 Sonnetが様々なツールを使ってタスクを実行する様子を、Streamlitアプリを通してインタラクティブに観察できるものです。AIアシスタントがあなたの代わりにコンピュータを操作する未来を予感させる、刺激的な体験を提供します。

## リポジトリの全体構造：コード、イメージ、設定ファイルの連携

リポジトリは、Claudeのエージェントロジックを実装した`computer_use_demo`ディレクトリ、Dockerイメージ構築に必要な`image`ディレクトリ、そしてDockerおよび開発環境の設定ファイル、セットアップスクリプト、READMEなどから構成されます。


```mermaid
graph 
    subgraph Root
        A[computer_use_demo] --> B(loop.py)
        A --> C(requirements.txt)
        A --> D(streamlit.py)
        A --> E(__init__.py)
        A --> F(tools)
        F --> G(base.py)
        F --> H(bash.py)
        F --> I(collection.py)
        F --> J(computer.py)
        F --> K(edit.py)
        F --> L(run.py)
        F --> M(__init__.py)
        N[image] --> O(entrypoint.sh)
        N --> P(http_server.py)
        N --> Q(index.html)
        N --> R(mutter_startup.sh)
        N --> S(novnc_startup.sh)
        N --> T(start_all.sh)
        N --> U(tint2_startup.sh)
        N --> V(x11vnc_startup.sh)
        N --> W(xvfb_startup.sh)
        N --> X(static_content)
        X --> Y(index.html)
        N --> Z(.config)
        Z --> AA(tint2)
        AA --> AB(tint2rc)
        AA --> AC(applications)
        AC --> AD(firefox-custom.desktop)
        AC --> AE(gedit.desktop)
        AC --> AF(terminal.desktop)
        N --> AG(.streamlit)
        AG --> AH(config.toml)

        R1(app.py)
        R2(dev-requirements.txt)
        R3(Dockerfile)
        R4(LICENSE copy)
        R5(pyproject.toml)
        R6(README.md)
        R7(requirements.txt)
        R8(ruff.toml)
        R9(setup.ps1)
        R10(setup.sh)
        R11(.env.example)
        R12(.zed)
        R12 --> R13(settings.json)
    end
```



* **`computer_use_demo/`**:  AIエージェントの頭脳を構成するPythonコードの中核部分。
* **`image/`**: Dockerイメージ構築に必要なファイル群。仮想環境の設計図と言えるでしょう。
* **その他ファイル**: 環境変数の設定、ライセンス情報、開発ツール設定など、プロジェクトを円滑に進めるための補助的なファイル群。


## `computer_use_demo`ディレクトリ：AIエージェントの思考プロセス

### `tools/`ディレクトリ: AIエージェントのツールボックス

AIエージェントClaudeが仮想環境で使用するツール群は、`tools/`ディレクトリにモジュール化されて格納されています。それぞれのツールは特定の機能を提供し、Claudeはこれらのツールを組み合わせて複雑なタスクをこなします。

* **`base.py`**:  全てのツールの基盤となる抽象クラス`BaseAnthropicTool`と、ツールの実行結果を格納する`ToolResult`データクラスを定義。エラーハンドリングや共通処理を担います。
* **`bash.py`**: `BashTool`クラスが提供するbashコマンド実行機能。`_BashSession`クラスがセッションを管理し、非同期処理でコマンドを実行、標準出力と標準エラーを`ToolResult`に格納します。
* **`collection.py`**: `ToolCollection`クラスが複数のツールを一括管理。Anthropic APIにツールリストを渡す際に使用されます。
* **`computer.py`**: `ComputerTool`クラスは、仮想デスクトップ環境における画面、キーボード、マウスの操作を可能にします。スクリーンショット撮影、座標指定のクリック、ドラッグ操作、テキスト入力などを`xdotool`を使って実現。解像度のスケーリングにも対応しています。
* **`edit.py`**: `EditTool`クラスはファイル操作機能を提供。ファイルの閲覧、新規作成、上書き保存に加え、文字列の置換、行の挿入、編集の取消などの高度な操作をサポートしています。ファイルの内容は`_file_history`に保存され、取り消し操作を可能にしています。
* **`run.py`**: `run`関数はシェルコマンドを非同期で実行し、タイムアウトを設定することで処理の停止を制御。標準出力と標準エラーをキャプチャし、`ToolResult`オブジェクトに格納して返します。出力のサイズが大きすぎる場合は切り詰め、警告メッセージを追加します。


### `loop.py`: AIエージェントの思考ループ

`loop.py`の`sampling_loop`関数は、AIエージェントとの対話ループを実装しています。このループは、以下のステップを繰り返します。

1. メッセージ履歴に基づいてAPIを呼び出し、Claudeのレスポンスを取得。
2. レスポンスを解析し、ツールの実行が必要な場合、`ToolCollection`を使って該当のツールを実行。
3. ツールの実行結果を`ToolResult`オブジェクトに格納し、メッセージ履歴に追加。
4. 更新されたメッセージ履歴に基づいて再度APIを呼び出し、次のレスポンスを取得。

このループにより、Claudeはツールを使って情報を取得し、その結果に基づいて次の行動を決定する、自律的なエージェントとして振る舞います。


### `requirements.txt`と`streamlit.py`: デモの土台

* `requirements.txt`: デモの実行に必要なPythonパッケージが記述されています。`anthropic`, `streamlit`など、主要なライブラリのバージョンが指定されています。
* `streamlit.py`: Streamlitアプリのエントリポイント。ユーザーインターフェースを提供し、チャット画面、API通信ログ表示、設定パネルなどを表示します。APIキーの管理、モデルの選択、システムプロンプトのカスタマイズなどもこのファイルで行います。


## `image`ディレクトリ: 仮想世界の設計図

`image`ディレクトリには、Dockerイメージの構築に必要なファイルが格納されています。

* **`static_content/`**: HTTPサーバーが提供する静的コンテンツ。StreamlitアプリとnoVNCクライアントを統合したHTMLファイル(`index.html`)が含まれています。ユーザーはブラウザからこのHTMLにアクセスすることで、チャット画面と仮想デスクトップ画面を同時に確認できます。
* **`entrypoint.sh`**: Dockerコンテナ起動時に実行されるエントリポイントスクリプト。`start_all.sh`を実行して仮想環境を起動し、`http_server.py`と`streamlit.py`をバックグラウンドで実行します。
* **`http_server.py`**:  Pythonの`http.server`モジュールを利用したシンプルなHTTPサーバー。`static_content/`ディレクトリの内容を配信します。StreamlitアプリとnoVNCクライアントへのアクセスを一本化するために使用されます。
* **`*.startup.sh`**: `xvfb_startup.sh`, `tint2_startup.sh`, `mutter_startup.sh`, `x11vnc_startup.sh`, `novnc_startup.sh`など、仮想デスクトップ環境を構成する各コンポーネントの起動スクリプト。それぞれ、仮想ディスプレイ、パネル、ウィンドウマネージャ、VNCサーバー、noVNCクライアントの起動と設定を行います。
* **`.config/tint2/`**: tint2パネルの設定ファイル(`tint2rc`)と、アプリケーションランチャーの設定ファイルが格納されています。


## まとめ：AIがコンピュータを操作する未来への扉

`computer-use-demo-jp`は、AIエージェントが仮想コンピュータを操作する未来を垣間見ることができる、画期的なデモプロジェクトです。この記事で解説した詳細な構造とコードの理解を通じて、その仕組みを深く理解し、AIの可能性をさらに探求するための足がかりとすることができるでしょう。

## 日本語版リポジトリ

https://github.com/Sunwood-ai-labs/computer-use-demo-jp

## 原点

https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>