Claudeの新機能「Computer use」を試してみた

株式会社ベーシックの川上です。10月末に発表されたAnthropicの[Claude 3.5 Sonnetの新機能であるComputer use](https://docs.anthropic.com/ja/docs/build-with-claude/computer-use)のデモアプリを動かしてみました。会社としてAnthropicのAPIキーを保持していないため、GoogleCloudのVertexAIで有効化したClaude3.5の認証情報を使って、ローカルでデモアプリを動かしました。動作させるまでと、実際の動きについてまとめたいと思います。
※OSはWindows11で、Dockerが動作する環境です。

## 準備

### モデルを有効化する
1. GoogleCloudConsoleへアクセスし、VertexAIを表示し、左のメニューから「TOOLS」「ModelGarden」を選択します
1. 「Claude」で検索し、「Claude 3.5 Sonnet v2(2024年12月現在)」を表示します
 
以下の画像ではすでに有効化したものですが、本来は「ノートブックを開く」の横に「有効にする」ボタンが表示されています。ボタンをクリックして企業情報や使用用途を入力します。VertexAIでの作業は以上です。

![Pasted image 20241205180946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/59a17ba9-7ed3-13b2-05fb-6210e86af9fa.png)

### ソースコードの準備
以下のURLからデモアプリのソースコードをクローンします。
https://github.com/anthropics/anthropic-quickstarts

### Dockerイメージの作成・実行
クローンしたソースコードのcomputer-use-demoフォルダに移動し、READ MEの通りにコマンドを実行していきます。

```bash
$ docker build . -t computer-use-demo

// ブラウザでアカウントを選択してログイン後アクセスを許可
$ gcloud auth application-default login
// 認証後ローカルにjson形式のcredentialが保存される

// 保存されたcredentialをホストマシンからコンテナにマウントする
// CLOUD_ML_REGIONは us-east5 or europe-west1
$ docker run \
    -e API_PROVIDER=vertex \
    -e CLOUD_ML_REGION=us-east5 \
    -e ANTHROPIC_VERTEX_PROJECT_ID="YOUR_PROJECT_ID \
    -v C:/XXX/YYY/.config/gcloud/application_default_credentials.json:/home/computeruse/.config/gcloud/application_default_credentials.json \
    -p 5900:5900 \
    -p 8501:8501 \
    -p 6080:6080 \
    -p 8080:8080 \
    -it computer-use-demo
```

以下のログが表示されれば起動完了です。

![Pasted image 20241205185930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/fcd1ac91-9d33-2101-617b-913508a96d14.png)


## 動かしてみる
http://localhost:8080/ にアクセスすることでデモアプリの動作を確認できます。アクセスすると以下のように左側に指示を出すチャット画面、右側に操作するPCのデスクトップが表示されます。

![Pasted image 20241205190253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/a029c5a1-1de3-ee65-8c43-187cf03efd3b.png)

### 指示を出してみる
#### 電卓の起動
"電卓アプリを起動して"

![Pasted image 20241205190953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/51bdda6e-8360-7cdd-a55c-e22be2ef626e.png)

![Pasted image 20241205191015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/b4b70ac9-8b52-34ce-cd05-5ef6fa7bd182.png)

"電卓アプリを閉じて"

![Pasted image 20241205191429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/c1f6c1ae-30be-d7a3-684c-e67efa251bd8.png)

![Pasted image 20241205191454.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/ab9d9253-9369-c88c-bee4-67e26ede64f4.png)

指示を与えられるとまずスクリーンショットを撮影し、自分で電卓アプリの位置を把握しています。マウスの移動やクリックを行うとスクリーンショットを撮影し、期待値と結果が正しいか判断しているようです。

無事電卓アプリを起動し、閉じることができました。「閉じて」という曖昧な指示から「ウィンドウ右上の✕ボタンをクリックする」という詳細な動作を導き出しているのは、LLMあってのものだと感じます。

#### ブラウザでQiitaを表示

次はブラウザを起動して、Qiitaを表示してもらいます。
"Firefoxを起動して「Qiita」で検索を行い、Webサイトを表示して"

![Pasted image 20241205192320.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/40c3e90c-3f30-9e15-85ed-51df10da98d8.png)

![Pasted image 20241205192357.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/6d54fb2e-ac64-9f3b-f1a6-de064586c748.png)

![Pasted image 20241205192419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/9c4e24a0-c912-6e4d-9da5-e6fc4dc8bc47.png)

![Pasted image 20241205192447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/5df63a06-e70d-4784-7f20-c595e8d005f2.png)

![Pasted image 20241205192500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076043/ea61f6c6-ad69-bfec-7659-9abc914f91b5.png)

出力の一部を抜粋していますが、上記の流れできちんとQiitaのトップページが表示されました。

## 使ってみて

### コスト
基本的に何かアクションを行うと結果を確認するためにスクリーンショットを撮影します。撮影頻度の調整はできるかもしれませんが、次に行うアクションを確定させるためにも必要で、スクリーンショットを入力トークンとしているためコストはかかりそうです。
結果を確認するためのスクリーンショットと指示の期待値を比較して、不足している場合は自動的に最初からリトライを行っていました。そのため、ある程度の回数を行って期待する処理を行えなかった場合は停止する処理がないと入力トークン数も大きくなり続けそうでした。
Claudeのベータ版として[トークンカウント機能](https://docs.anthropic.com/ja/docs/build-with-claude/token-counting)が実装されたので、後日入力に使用したトークン数を計算できるようにできればと思います。

### 動作
今後ある程度は改善されていくと思いますが、スクリーンショットを毎回撮影する都合上自分が想像していたより遅かったです。スクリーンショットで把握できないスクロールが必要な場合はさらにアクションが増えるため、ミスも多くなりがちでした。

### 不得意

#### タイピング（日本語の変換）
日本語の変換が苦手なようです。英数字に関しては数回入力を指示してもほとんどミスすることはありませんでした。しかし、弊社のHPを表示させようと、「ベーシック 高田馬場」で検索するように指示しましたが、一度も成功しませんでした。「ベ 田」や「ー田場」などで検索を行っていました。アルファベットのみの検索には失敗しなかったので、日本語特有の変換が難しいようです。

#### スクロール
公式からも言われていましたが、スクロール操作が苦手なようです。入力情報はスクリーンショットなため、WEBサイト全体を把握することはできず、都度「ページの一番下までスクロールして」と指示する必要がありました。「Qiita記事を開いて、ページ下部までスクロールして記事全文を確認し、内容を要約して」というような指示を出しても、一番下まではスクロールできず、3回ほどで止まってしまい、見出しを要約として出力することが多かったです。

## これから
今回はデモアプリで、Docker上にubuntuを準備して動作を確認しましたが、自分のPCで行うとなるとまだまだ安全性に不安があると感じました。
WEBサイト全体やスクロールしないと見えないようなUIの場合は毎回スクロールを指示する必要があるため、動作が不安定だったり、間違った操作をしたりすることがありました。複雑な指示の場合は想定外の操作を行うことがあるので、安心して任せられる段階ではないと思います。

現段階では業務レベルの作業を行うことは難しそうです。作業内容にもよりますが、エラーに対する修正力や、操作精度、処理速度が上がっていけば、人間が行っている作業を代替することもできるようになるのは割と近い未来なのかなと思います。