2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PCを物理的に操作してくれるAIを作ったよ

banner.png

https://github.com/reiwa-ai/hidclaw

別に受託案件の貸与PCでもエージェントで楽しようっていう訳じゃ無いんですが。

これは何か?

動作動画を見る

PCに接続すると、外部ディプレイとキーボード/マウスとして認識されます。
しかしその実態はHDMIキャプチャーデバイスとHIDデバイスで、キャプチャーしたスクリーン画像からComputer Use API呼び出し、PCの操作コマンドを生成し、HIDデバイス経由でキーボード/マウス操作を送り込み、PCを物理的に操作する、というAIデバイスです。

image.png

構成

Raspberry Pi5がHDMIキャプチャーを行い、Raspberry Pi PicoがHIDデバイスとなります。
Pi5とPicoはUARTで接続されていて、操作対象PCはUSBでPicoに、HDMIでキャプチャーデバイスを通じてPi5に接続しています。
Computer Use APIはOpenAIのAPIを使用しました。プランニングその他もChatGPTのAPIです。

connection.png

こんな感じ:

対象 PC
├─ HDMI OUT ── USB HDMI Capture Board ── Raspberry Pi 5
└─ USB IN   ── Raspberry Pi Pico / Pico 2

Raspberry Pi 5
├─ HDMI キャプチャーで対象 PC の画面を取得
├─ UART で Pico へ操作コマンドを送信
└─ WebUI / Discord / CLI から操作を受け付け

Raspberry Pi Pico / Pico 2
├─ UART で Pi 5 からコマンドを受信
└─ USB HID Keyboard / Mouse として対象 PC を操作

機能

  • WebUI から自然言語で対象 PC を操作する
  • Plan モードで複数ステップの操作計画を作ってから実行する
  • Manual HID で KEY WIN+RTEXT hello などの低レベルコマンドを直接送る
  • Emergency Stop / Suspend / Resume で操作を止める
  • 操作ログ、スクリーンショット、トークン使用量を保存する
  • メール通知と Discord からの操作に対応する
  • その他、ログとかトークン消費量上限設定とか、危険察知とユーザー承認とか

大雑把にやらせたいタスクを入力すると、ChatGPTのAPIでPC操作のプランを生成します。
そのPC操作のプランに従って、Picoに対してキーボード/マウス操作の指示を出します。
操作はスクリーンキャプチャを元にComputer Use APIが生成します。

操作画面はブラウザからで、スクリーンキャプチャとコマンド入力エリアがある。
image.png
「Request」はComputer Use APIに直接送信、「Plan」はChatGPTに実行プランを作らせてから操作、「Manual HID」はキーボード/マウス操作コマンドを直接送る。

非常停止、中断再開、プラン内のコマンドが危ないとAIが判断したら承認ボタンを表示する機能アリ。

ログ表示画面もある。トータルでのトークン消費量、月間でのトークン消費量、コマンド毎のトークン消費量表示。
image.png
トークン消費量の上限設定を行っておくと、上限に達したらプランの実行を続けるか承認が表示される。

Discordからも使えるようにしたので、アプリを登録しておけば外出先からでもPCを操作できるよ!

discord2.png

なぜ作ったか?

一言で言うと、AIエージェントのテスト駆動開発がどこまで出来るか試すため、ですね。
外部にハードウェアとして接続されている実行環境でしかテスト出来ない機能において、End to Endのテスト環境だけ渡して、実際にテスト駆動開発が回るのか、という話です。
今後、ハードウェア制御のシステムを作っていく上でのテストヘッドにならないかと思い作らせてみたら、思いのほか出来たので欲を出して色々機能追加していったもの、がこれになります。

AIはどのくらい開発できたか

ハッキリ言って、全部AIが作りました。
バイブコーディングで4日で全部出来ていました。

自分はソースコードは1行も書いていません。ドキュメントもほとんど書いていません。
ただし、Codexの指示プロンプトに割と詳細に、ハードウェアの構成だとか現在の状況だとかをインプットする必要はありました。

トークン消費量はこのくらい:
token-spends.png

正直、Picoのファームウェア開発と基本的なスクリーンキャプチャ→Computer Use API→HIDデバイス操作までの流れについては、自分でやった方が早かったかもしれません。
(最初にテスト環境を理解させて、ローカルのpytestではなくSCPでコピーしてSSHで実行する、という流れを納得させるまでに少し手間がかかりました)

でも、自分でやるのだと本当に基本的な機能を実装するだけが精一杯で、色々と機能を盛れたのはAIがあったおかげだと思います。
あと、このプロジェクトは思いついてから開始するまで3ヶ月以上かかっているのですが(理由は単にやる気が出なかっただけ)、AIは常にやる気MAXで動いているのが良いですね。やり始めたら自分のやる気ポイントゲージに関係なく突き進んでくれました。あと自分が寝ている間も作業してくれるし。

フルでEnd to Endのテストを回すと1回の指示で2時間くらいかかる:
image.png

びっくりしたのは、問題が起きたときの切り分けに苦労するだろうと予測していたのが、勝手にスクリーンキャプチャ撮ってそれを開発PCにダウンロードしてChatGPTの画像認識で判定して、問題の切り分けまで自動でやってくれたことです。
特に明確な指示をしていないにもかかわらず、キャプチャーのみ撮るモードを追加し、画像をSCPで落として、勝手にChatGPTが認識していました。ちょっと怖いくらい「何でもやる」奴だな、と感じました。

目視で確認します、ってあなた目あったの?
image.png

バイブコーディングをやってみて

最初のステップはPicoのファームウェアを開発し、HIDデバイスとして動作すること、ですが、そうした初期ステップは確実に動作チェックしながら、小ステップで進めるのが良さそうです。
最初のREADME.mdとAGENT.mdはChatGPTに作らせました。

初期のAGENT.md(TDD開始前に更新される前提):
image.png

初期のPicoファームウェアとHIDデバイス周りの開発は細かいステップで実行します。この時点ではまだ仕様駆動型の開発です。
きちんとPico側とHIDデバイスとしての動作が固まったと思ったら、その時にこれでもかと盛った要求仕様を渡して、AGENT.md等を更新して開発計画を立てさせました。

その後はテスト駆動開発に移行しましたが、その際に合計10ステージからなる開発計画が作成されていたので、各ステージ内にTDDのためのテストシナリオを複数作らせました。
もちろんテストそのものもCodexに作らせました。

基本は、あとはステップ毎に実行のお願いをするだけですが、テストに詰まったりしたときにはやはり人間が実装方針の指示を出さなければならない事もあり、その辺に人間のAIスキルが効いてくるのかな、という印象を受けます。

例えば、当初は「ペイントを開いて文字を書く」というテストシナリオがありましたが、その時点のHIDコマンドにはドラッグ&ドロップが無く(クリックのみ)、どうやっても実装できないという問題が発生しました。
その時に、Pico側のファームウェアも含めて更新するのか、とりあえずテストシナリオを変更して次に進むのかを選択する必要がありました。

とりあえず次に進むのを優先させた:
image.png

他にも、きちんとテスト結果を(最終結果が赤か緑かだけではなく)ちゃんと見て、どのような問題が出てどう修正したかを把握して、都度細かな指示を行う、事ある毎にリファクタリングの依頼をする、等の指示のテクニックがあります。
これはCodexのチャット欄にChatGPTからの推論が出てくるので、きちんとそれを読みましょう、という話で、きちんと読んで理解すれば次に何が必要か解る筈ですし、その理解能力もAIスキルの一部なんだな、と感じた次第です。

image.png

バイブコーディングのログ

今回の開発でAIに指示した内容は、全て残して公開してあります。

https://github.com/reiwa-ai/hidclaw-vibecoding-log

本当にここに保存されているチャットログだけで全部出来上がりました。
手作業でのソースコード編集はゼロでした。

使う人のための注意点

PCを実際に操作するので、事故が起こる可能性もあります。
ChatGPTの判定で危険そうな操作コマンドは、事前にユーザー承認が必要となるようにしていますが、100%安全ではないので気をつけてください。

あと、スクリーンキャプチャを外部に送信するので、企業貸与のPCなどで使うと確実にアウトです
セキュリティのために利用ポリシーなどが設定されているPCでは使わないでください。

でも、正直言って監視ソフトじゃ検出できないんだよね・・・。単なる外部ディプレイとキーボード/マウスなんだもの・・・。

まぁ、Computer Use APIの操作って割と癖があるから、検出プログラムも作れそうではある。矛と盾とでセットで売ってみようかな

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?