Anthropic Computer Useを極める:デスクトップを操作するAIエージェントの構築

AI tutorial - IT technology blog
AI tutorial - IT technology blog

午前2時の自動化の壁

火曜日の午前2時。私は本番環境のトラブルを目の前にしていました。REST APIもCLIもなく、デプロイのたびにCSSクラスが更新されるレガシーなCRMシステムが、500件の重要な顧客アカウントをロックアウトしてしまったのです。私のSeleniumスクリプトは役に立ちませんでした。DOMは難読化されたReactコンポーネントの墓場と化していたからです。この瞬間、セレクターベースの脆弱な自動化は行き止まりであると確信しました。

何十年もの間、私たちは機械にUIの背後にあるコードを解析させようとしてきました。しかし、人間はコードを読みません。ピクセルを見ているのです。AnthropicのComputer Use APIはこの常識を覆します。これにより、Claude 3.5 Sonnetは画面を「見」て、カーソルを動かし、人間と全く同じようにボタンをクリックできるようになります。単なるチャットボットを超えて、現実世界の問題を解決するエージェントを構築したいなら、この視覚的なループをマスターすることが次なる論理的なステップです。

Computer Useのアーキテクチャは実際にどのように機能するのか

これは標準的なテキスト入力・出力のAPIコールではありません。スクリプト、モデル、そしてホストOSの間で行われる反復的な対話だと考えてください。スクリーンショットだけで1ステップあたり約1,600トークンを消費するため、ループの効率性を理解することが極めて重要です。

ワークフローは以下の厳格なサイクルに従います:

  • 観察 (Observation): システムがスクリーンショットをキャプチャし、Claudeに渡します。
  • 思考 (Thought): ClaudeがUIの座標(例:512, 384にある「送信」ボタンなど)を特定し、次の動きを計画します。
  • 実行指示 (Action): Claudeが mouse_movekey といった特定のツール呼び出しを返します。
  • 実行 (Execution): ローカル環境がコマンドを実行し、その結果(通常は新しいスクリーンショット)をモデルにフィードバックします。

このサイクルは目標が達成されるまで繰り返されます。内部で動いているのは computer_20241022 ベータ機能であり、 computerbashstr_replace_editor という3つの主要ツールへのアクセスを可能にしています。

実践:初めてのデスクトップエージェントを構築する

経験上、これらのエージェントをDockerコンテナ内で実行するのが唯一の安全な道です。OSを「探索」している最中に、AIエージェントが誤って /home ディレクトリを削除してしまうような事態は避けたいものです。Anthropicはリファレンス実装を提供していますが、オーケストレーションのロジックをゼロから構築することで、エージェントの自律性をより厳密に制御できるようになります。

1. 環境のセットアップ

まずはAPIキーを取得しましょう。最新の anthropic Pythonライブラリが必要です。依存関係のトラブルを避けるため、私は常に仮想環境を使用するようにしています。

export ANTHROPIC_API_KEY="your_api_key_here"
pip install anthropic

2. 基本的な制御ループ

以下は、ClaudeにFirefoxを開かせ、ビットコインの現在価格を確認させるための簡略化されたスクリプトです。モデルが自身の位置を把握しやすくするために、ディスプレイの解像度を明示的に定義している点に注目してください。

import anthropic
import os

client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))

# コアとなるオーケストレーション呼び出し
response = client.beta.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    tools=[{
        "type": "computer_20241022",
        "name": "computer",
        "display_width_px": 1024,
        "display_height_px": 768,
        "display_number": 0,
    }],
    messages=[{
        "role": "user",
        "content": "Firefoxを開いてビットコインの価格を検索して。"
    }],
    betas=["computer-use-2024-10-22"]
)

print(response.content)

3. 座標とスケーリングを極める

座標のスケーリングは、多くの開発者がつまずくポイントです。Claudeは、ツール設定で定義した display_width_px に基づいた座標を想定しています。もし実際のディスプレイが4Kなのに、Claudeに1024×768だと伝えてしまうと、クリック位置が大きくずれてしまいます。視覚的な詳細とトークンコストのバランスが最も良い、1024×768 または 1280×800 に固定するのが賢明です。

Claudeがインタラクションを決定すると、次のようなJSONオブジェクトを送信します:

{
  "action": "mouse_move",
  "coordinate": [512, 384]
}

実行レイヤー(通常は pyautogui を使用したPythonスクリプト)は、これらの数値をコンテナ化されたデスクトップ内の物理的なカーソル移動に変換します。

現場からの教訓:セキュリティと信頼性

本番環境のエージェントを「放りっぱなし」にすることはできません。ランダムなクッキー同意のポップアップが視界を遮ったために、エージェントが10分間も同じ場所をぐるぐると空回りするのを見たことがあります。本番レベルのエージェントにおける私の譲れないルールは以下の通りです:

  • 完全な隔離 (Total Isolation): 専用のVMを使用してください。メインマシンのファイルシステムや保存されたブラウザのパスワードへのアクセス権をエージェントに与えてはいけません。
  • 人間による確認 (Human-in-the-loop): 「削除」ボタンのクリックや銀行振込の実行といった「破壊的」なアクションについては、Slack通知を飛ばして人間の承認を求めるようにします。
  • トークンのガードレール (Token Guardrails): 各ステップにはコストがかかります。スクリーンショット1枚あたり約0.005ドルとして、100ステップの暴走ループは0.50ドルの損失になります。予算を守るため、1つのタスクにつき最大15回までのイテレーション制限を設けてください。

DOMの先へ

Computer Use APIの真の力はその汎用性にあります。先週、私は2008年製のレガシーなJavaアプレットに対し、45項目のデータ入力タスクを自動化するためにこれを使用しました。最新のスクレイパーでも手が出せない代物でしたが、Claudeは単にラベルを見てマウスを動かし、3分足らずで仕事を終えました。

私たちは、特定のアプリのためにスクリプトを書くのをやめ、エージェントに対して目標を定義する時代に入りつつあります。ボタンのIDを探す代わりに、エージェントにこう伝えるのです。「緑色の成功ランプが点灯したらフォームを送信して」。これは命令形(imperative)のコードから、宣言型(declarative)の意図への根本的な転換です。変化し続けるDOMセレクターとの戦いはやめて、ピクセルに目を向けましょう。あなたが見ることができるものなら、Claudeがそれを自動化できるのです。

Share: