AIでPCを操作できるということだ
通常のClaudeのチャットからは、メニューが見当たらない。
aiに、Computer useを使ってみたいと質問したところ以下のURLを紹介してもらえた
https://docs.anthropic.com/en/docs/build-with-claude/computer-use
(英文)
まだ、beta版のようである。(この記事を書いているのは、2024/10/25)
dockerでPC内に仮想PC入れる感じになるので、
本格的に使うのであれば、
32GBぐらいのRAMと、コア数の多めのPCを別途用意したほうが良さそうに思えた。
そうしないと、スワップ処理で、もっさり動作になってしまい。ほぼ停止しているかのような錯覚を感じた。
https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo
https://docs.google.com/forms/d/e/1FAIpQLSeD3IqITWsuepB19SEv889HsBvN9WOi6HRblPrJNyA9G7q02w/viewform
https://console.anthropic.com/dashboard
Docker本体のインストール手順は割愛する。他を見てほしい。
dockerが使える状態前提。
export ANTHROPIC_API_KEY=%your_api_key%
docker run \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
-v $HOME/.anthropic:/home/computeruse/.anthropic \
-p 5900:5900 \
-p 8501:8501 \
-p 6080:6080 \
-p 8080:8080 \
-it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest
Xvfb started successfully on display :1 Xvfb PID: 9 starting tint2 on display :1 ... starting mutter starting vnc PORT=5900 starting noVNC noVNC started successfully ✨ Computer Use Demo is ready! ➡️ Open http://localhost:8080 in your browser to begin
noVNCはオープンソースで開発されている、ブラウザ上で動作するHTML5製のVNCクライアントです。 このnoVNCをサーバー側にインストールして、HTTPサーバーで公開しておけば、クライアント側はブラウザでアクセスするだけでリモートデスクトップ環境を使えるようになります
ブラウザで、http://localhost:8080 を開いてみると、おそらくdockerのイメージだと思うが、dockerで立ち上げたであろうPCが立ち上がる。
dockerの中身を操作するだけならば、セキュリティは大丈夫そうだ。
ブラウザで表示した上記の画面の左側のChat欄に、どのようなことができるのか質問したら、教えてくれた。
アカウントの作成やログイン関連については、手伝えないといわれた。
OSは何ですか?と聞いたところ以下の回答だった。
Ubuntu 22.04.5 LTS
gitは、すでにインストール済みのようだ。
インストール済み:
pyenvを使用して管理されています
多数のPythonパッケージがインストールされています(numpy, pandas, streamlit, requests など)
未インストール:
テキストエディタのVIはインストールされていないようだ。
「viをインストールしてみて」
とお願いしてみた。できた。
「viのカラースキームをmonokaiにして」
とお願いしてみた。できた。日本語に対応してなかったので、まだ設定が必要そうだ
PCのメモリが16GBだと、ブラウザを立ち上げようとすると、固まってしまった。
VmmemVSLというプロセスがめちゃめちゃ占有している。
dockerがフリーズしてしまった。メモリを食いすぎ
PCにメモリはたくさん積んでおいたほうがいいだろう。
暫定対応
https://zenn.dev/quantum/articles/b29722e8795335
power shell用のコマンド
# WSLに入るコマンド。すでにWSLに入っている場合は不要 wsl # メモリをフラッシュするコマンド sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
チャットが複数セッションに分かれていないので、上限に来た場合にどうするのか? 長文のチャットだと会話の継続はできなくなってくるが、dockerでたちあげた環境に紐づいてしまっていると、チャットだけクリアすることはできるのだろうか?
自主的にどんどんファイルを更新してくれたりするのは頼もしいが、複雑になってくると、やらかしてしまった場合、戻る方法はどうするのだろうか? ソースコードならば、gitがインストールされているので、都度コミットしましょうというルールでいけそうだが、設定ファイルなどを改変されると、バックアップしていないと戻せなくなってしまう。
処理が進むと重くなってくる、となると、これを使った開発は、課題を1つ解決したらまたリセットして使う仕組みならば行けそうだ。
AIとコラボ用にGitLabサーバを立てる
AI用に最低32GBのPCを用意する。
並列で作業させたい場合もあるから、もしかしたら複数台用意したほうがいいかもしれない
問題解決に近い環境をdockerのイメージを作る
関連するファイルは自分で見に行ってもらうように指示する
Issue経由などで課題を与える
課題を手伝ってもらう
gitにコミットする
githabなどに pushする
不本意ながら、AIの処理できるトークン数に限界がくるので、次の課題に向けリセットし、上記の手順を 再度行う
dockerで作業するのではなく、ホストマシンでgit cloneしたファイルを対象にすれば、いろいろと便利なのでは?と思った。
サンプルとして、以下を持ってきた。これはanthropicの公式をforkして、自分が好き勝手にできるようにしたリポジトリです。
git clone https://github.com/khayashi4337/courses.git
目標は、github上の英語の資料を、ローカルに用意して、Couputer useにdocker-compose経由で連携し、翻訳できるかどうかチャレンジしてみるのです。そのまま、git に commitやpushできたら楽なので、ローカルの情報をどこまで持たせることができるのかも確認していきます。
ローカルファイルを使えるようにするには、Dockerfile形式ではなくdocker-compose形式が一般的だ。
なので、上記のコードをローカルファイルに変換してみます。
# Git設定を確認して環境変数に設定 export GIT_USER_NAME=$(git config --global user.name) export GIT_USER_EMAIL=$(git config --global user.email) # 設定された値を確認 echo "Git User Name: $GIT_USER_NAME" echo "Git User Email: $GIT_USER_EMAIL"
version: '3'
services:
anthropic:
image: ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- GIT_USER_NAME=${GIT_USER_NAME}
- GIT_USER_EMAIL=${GIT_USER_EMAIL}
volumes:
- ${HOME}/.anthropic:/home/computeruse/.anthropic
- /c/Users/kh/prj/courses:/home/computeruse/courses # サンプルとして追加したディレクトリ
- /c/Users/kh/.ssh:/home/computeruse/.ssh:ro # 読み取り専用
ports:
- "5900:5900"
- "8501:8501"
- "6080:6080"
- "8080:8080"
tty: true # -it フラグの代わり
stdin_open: true # -it フラグの代わり
はいdocker-composeでも起動できました。.sshフォルダ丸ごと共有はお行儀がよくない気がするが、とりあえず実験用ってことにしておく。
これができるということは、今までできなかった以下のことができるようになったのです。
毎回ブラウザでlocalhost:8080を開くのが面倒になってきたので、起動スクリプトを用意しました。
#!/bin/bash
docker-compose down
# コンテナを起動
docker-compose up &
# 20秒待機(コンテナの起動を待つ)
sleep 20
# OSタイプに応じてブラウザを起動
case "$OSTYPE" in
"msys"*|"cygwin"*|"win"*)
# Windows
if command -v start &> /dev/null; then
start chrome http://localhost:8080
else
cmd.exe /c start http://localhost:8080
fi
;;
"darwin"*)
# macOS
open -a "Google Chrome" http://localhost:8080
;;
"linux-gnu"*)
# Linux or WSL
if grep -q Microsoft /proc/version; then
# WSL環境
cmd.exe /c start http://localhost:8080
else
# 通常のLinux
if command -v google-chrome &> /dev/null; then
google-chrome http://localhost:8080
elif command -v chrome &> /dev/null; then
chrome http://localhost:8080
elif command -v chromium &> /dev/null; then
chromium http://localhost:8080
else
xdg-open http://localhost:8080
fi
fi
;;
esac
起動後に画面のchatから 「viもないような最小構成のubuntuなので、日本語環境を入れてください」 といえば、日本語環境を入れてくれますが。。。AIができないことがあります。
それは、再起動です。docker-composeを動かしているホストマシン側で
docker compose restart anthropic
と入力することで、この仮想PCだけ再起動させることができます。と言いたかったができなかった。もう少し、修行を積めばやり方がわかるのかもしれない。
でも、再起動は不要かつ、毎回入れておきたいツールって出てくるとおもうので、そのやり方をやってみる。
「viエディタぐらいは最初から有ってもいいんじゃないか?」と思ったので、dockerイメージをカスタマイズするやり方を調べてみることにする。
以下のサイトを参考にさせていただこう。
https://rooter.jp/infra-ops/build_docker_jp_env/
localeコマンドターミナルで実行すると以下の出力になる
LANG= LANGUAGE= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=
日本語環境が入っていない状況だ
# 管理者権限が必要なので sudo su -
# と入力してから、以下を入力する apt-get update apt-get install -y language-pack-ja-base language-pack-ja locales locale-gen ja_JP.UTF-8
# 管理者権限を抜ける exit
# ユーザの言語設定を、設定ファイルに書き込む echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc source ~/.bashrc
# 再びlocaleコマンドを打ちこんでみると
LANG=ja_JP.UTF-8 LANGUAGE= LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
よしよし、あとは、この状態でdockerのイメージを作ればいい。
なので、、、ホストマシン側で
docker ps
と入力しコンテナ名を調べる
ふむふむ
コンテナ名は courses-anthropic-1
なのね。
次に、現状保存のコマンドが以下らしい
docker commit ${コンテナ名} ${任意のイメージ名・タグ名}
なので、japanese-env:v1って名前にしておくとコマンドは以下になる
docker commit courses-anthropic-1 japanese-env:v1
確認のため
docker images
コマンドで確認 3G弱あるのな。。。
以下の修正を行う前に
docker compose down
しておこう!停止させる対象をがdocker composeは、このファイル見ているからだ。 さて、dockerのコンテナを停止されたところで、以下の修正を行う。
ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest
だった部分を、テキトーに決めた
japanese-env:v1
に置き換える
version: '3'
services:
anthropic:
image: japanese-env:v1
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- GIT_USER_NAME=${GIT_USER_NAME}
- GIT_USER_EMAIL=${GIT_USER_EMAIL}
volumes:
- ${HOME}/.anthropic:/home/computeruse/.anthropic
- /c/Users/kh/prj/courses:/home/computeruse/courses # サンプルとして追加したディレクトリ
- /c/Users/kh/.ssh:/home/computeruse/.ssh:ro # 読み取り専用
ports:
- "5900:5900"
- "8501:8501"
- "6080:6080"
- "8080:8080"
tty: true # -it フラグの代わり
stdin_open: true # -it フラグの代わり
うーん、起動に失敗してしまった。。。