Anthropic Claude の Computer Use Demo を解剖する:仮想世界を操るAIエージェント
この記事では、Anthropic社の提供するcomputer-use-demo-jp
リポジトリを徹底的に解剖し、その構造、機能、そしてコードの詳細まで踏み込んで解説します。Claude 3.5 Sonnetの"computer use"機能、すなわちAIエージェントが仮想コンピュータを操作する様子を体験できる、この画期的なプロジェクトの全貌を明らかにします。
プロジェクトの概要:AIがコンピュータを操作する未来
このデモは、Dockerコンテナ内にUbuntu仮想デスクトップ環境を構築し、その中で大規模言語モデルClaude 3.5 Sonnetが様々なツールを使ってタスクを実行する様子を、Streamlitアプリを通してインタラクティブに観察できるものです。AIアシスタントがあなたの代わりにコンピュータを操作する未来を予感させる、刺激的な体験を提供します。
リポジトリの全体構造:コード、イメージ、設定ファイルの連携
リポジトリは、Claudeのエージェントロジックを実装したcomputer_use_demo
ディレクトリ、Dockerイメージ構築に必要なimage
ディレクトリ、そしてDockerおよび開発環境の設定ファイル、セットアップスクリプト、READMEなどから構成されます。
-
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エージェントとの対話ループを実装しています。このループは、以下のステップを繰り返します。
- メッセージ履歴に基づいてAPIを呼び出し、Claudeのレスポンスを取得。
- レスポンスを解析し、ツールの実行が必要な場合、
ToolCollection
を使って該当のツールを実行。 - ツールの実行結果を
ToolResult
オブジェクトに格納し、メッセージ履歴に追加。 - 更新されたメッセージ履歴に基づいて再度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の可能性をさらに探求するための足がかりとすることができるでしょう。
日本語版リポジトリ
原点
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Discussion