「AIエージェントキャッチアップ #8 - Anthropic Claude Computer use」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #8 - Anthropic Claude Computer use」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

youtube.com

Anthropic Claudeの「Computer use」

今回は、Anthropic Claudeの「Computer use」について、公式ブログやドキュメントを見て、サンプルコードを動かしたり読んだりしてみました。

今回のポイント

Computer useの概要

Computer useの概要は、以下の2つの公式ブログ記事に書かれています。

www.anthropic.com

www.anthropic.com

2つ目の記事には以下のように書かれています。

we trained Claude to interpret what’s happening on a screen and then use the software tools available to carry out tasks.

これはつまり、画面上で起こっていることを解釈してソフトウェアを使用できるように、Claudeをトレーニングしたということです。

その結果、OSWorldというベンチマークで今までのAIよりも遥かに良いスコアとなったとのことです。 (といっても人間にはまだまだ及ばないスコアです)

実際に動かしてみた

とにかく実際に動かしてみたかったので、上記のブログ記事で紹介されている以下のデモを動かしてみました。

github.com

Computer useはその特性上、PCで直接実行せず、仮想マシンやコンテナで実行することを推奨されています。 実際、上記のデモはDockerを使って動くようになっています。

docker runコマンドを実行すると、無事起動してアクセスできました。 (配信中は環境の関係で少し手間取りましたが、あとでもう一度試すと非常に簡単に起動できました)

画面左がClaudeに指示を出すためのStreamlitのアプリで、画面右がVNCで操作対象のコンピュータに接続した様子です。

例として「ブラウザを開いて」と指示すると、Firefoxのアイコンをクリックしてブラウザを開いてくれました。

このとき、Tool useで

Tool Use: computer
Input: {'action': 'screenshot'}

のように「computer」に対してスクリーンショットの撮影を実行し、

Tool Use: computer
Input: {'action': 'mouse_move', 'coordinate': [804, 738]}

のように特定の座標にマウスを移動し、

Tool Use: computer
Input: {'action': 'left_click'}

のように左クリックする、という操作がされていました。

その後、「LangChainとLangGraphの日本語の書籍を調べて」と指示すると、ブラウザにテキストを入力して調べてくれました。

個人的に驚いた点

上記の内容を試していて個人的に驚いたのが、Input: {'action': 'mouse_move', 'coordinate': [804, 738]} のように座標を指定してマウスを動かす操作をしていることです。

私の経験上、GPT-4oなどに画像を与えて特定のアイコンの座標などを出力するよう指示しても、あまり正確な座標は得られません。 そのため、Firefoxのアイコンの位置などを正確な座標として出力できていることに驚きました。

公式ブログ(https://www.anthropic.com/news/developing-computer-use)には

Training Claude to count pixels accurately was critical.

と書かれており、正確な座標を出力するようにモデルをトレーニングしていることが分かります。

そもそも、LLMを使ってコンピュータを操作してみること自体は、Tool use(Function calling)などで今までも可能ではありました。

しかし、Anthropic ClaudeのComputer useは、より正確にコンピュータを操作できるようにモデルをトレーニングした、というのが大きなポイントだと言えます。

Computer useを使うコードの実装方法

さて、Computer useを使うコードの実装方法については、公式ドキュメントの以下のページで説明されています。

docs.anthropic.com

Computer useでは、以下のようにLLMにツールを与えます。

    "tools": [
      {
        "type": "computer_20241022",
        "name": "computer",
        "display_width_px": 1024,
        "display_height_px": 768,
        "display_number": 1
      },
      {
        "type": "text_editor_20241022",
        "name": "str_replace_editor"
      },
      {
        "type": "bash_20241022",
        "name": "bash"
      }
    ],

「display_width_px」や「display_height_px」というパラメータでディスプレイのサイズを指定することが分かります。

また、通常のTool useと異なり、computer・str_replace_editor・bashというツールについては、出力のスキーマを指定していないことがポイントです。

上記の公式ドキュメントのページには、これらのツールがどのようなスキーマで応答するかが書かれています。 Computer useで提供されるツールを使う場合、モデルがトレーニングしたのと同じ形式で出力するため、利用者側がスキーマを指定しない、ということだと思われます。

ちなみに、Computer useのツールは通常のツールとの併用も可能です。

デモの実装

上記のように、Computer useでは出力されるスキーマが決まっています。 しかし、その出力をもとに実際にコンピュータを操作する処理は利用者側が実装するという点では、通常のTool useと同じです。

実際、動かしてみたデモのコードでは、mouse_moveというアクションに対して、マウスを動かすというコマンドを実行するように実装されています。

            if action == "mouse_move":
                return await self.shell(f"{self.xdotool} mousemove --sync {x} {y}")

https://github.com/anthropics/anthropic-quickstarts/blob/main/computer-use-demo/computer_use_demo/tools/computer.py#L130-L131

このデモのコードでは、「xdotool」というGUI操作のためのコマンドが使われていました。

Agent.exe

Anthropic公式のComputer useのデモ以外に、Computer useを簡単に試せるサンプルとして「Agent.exe」というものがあります。 (西見さんに教えてもらいました)

github.com

こちらは実際に動かす時間まではとれませんでしたが、ソースコードを簡単に見てみました。

すると、やはりClaudeの出力に応じてマウスを動かしたりするコードが実装されていました。

export const performAction = async (action: NextAction) => {
  switch (action.type) {
    case 'mouse_move':
      const { x, y } = mapFromAiSpace(action.x, action.y);
      await mouse.setPosition(new Point(x, y));
      break;

https://github.com/corbt/agent.exe/blob/00e462da0f9472d49602790cdd3cd02f2a5057d6/src/main/store/runAgent.ts#L145-L150

上記のコードでは「@nut-tree/nut-js」というパッケージによってマウスなどのGUI操作が実装されていました。

nutjs.dev

Computer useのポイント

Computer useのポイントをまとめると、以下の3つになります。

  • 画面上の座標などをうまく出力するように、モデルがトレーニングされている
  • Computer useはTool useの特別版のようなもので、通常のTool useと異なり出力のスキーマを指定しない(あらかじめ決められているスキーマで出力される)
  • コンピュータの実際の操作自体は、通常のTool useと同じく利用者側が実装する必要がある

コンピュータの操作をLLMによって自動化したい場合、LLMが操作しやすいAPIが提供されていれば通常のTool useで十分かもしれません。 しかし、今後あらゆるソフトウェアにLLMが使いやすいAPIが追加されてくとは限りません。

そのため、LLMエージェントがあらゆるコンピュータ操作を実行できるようにするという方向性自体は求められているものであり、その一歩として面白い取り組みだと思いました。

次回のご案内

以上、今回はAnthropic Claudeの「Computer use」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #9 - CopilotKit」ということで、アプリケーションに簡単にAIを組み込むことができる「CopilotKit」がテーマです!

github.com

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!