Agentに目と手を持たせる方法
話せるが行動できないアシスタント
こんな経験はないだろうか:AIに質問すると完璧な回答をくれるが、各ステップを自分で実行しなければならない。
「このバグを直してくれ」
AIは言う:あのファイルを開き、42行目を見つけ、fooをbarに変更し、npm testを実行して検証してください。
理路整然と説明する。しかし、自分では手を動かさない。
これは、隣に座ってアドバイスするが、キーボードには決して触れないコンサルタントを雇ったようなものだ。自分でエディタを開き、その行を見つけ、修正し、テストを実行し、結果を見て、「修正したけどテストはまだ失敗する」と伝える必要がある。そうすると、また次のアドバイスをくれる。
何度か繰り返すと、こう思うだろう:自分でやってくれないか?
これがAgentに「目」と「手」が必要な理由だ——言語能力だけでなく、世界を感知する能力と世界を変える能力も必要だ。
目:Agentに世界を見せる
感知能力のないAgentは、目隠しされた人のようなものだ。周囲の環境を口頭で説明し続けなければ、アドバイスできない。効率が非常に悪く、あなたが説明する情報は常に損失がある。
ブラウザはAgentの目
最近の実践で、Agentにブラウザツールを接続した。何ができるか?
- Webページを開く:URLに直接アクセスし、ページ内容を見る
- スナップショットを取得:ページのaccessibility treeを取得——構造化されたページ記述で、スクリーンショットよりAI理解に適している
- スクリーンショット:視覚的判断が必要なとき、画面を直接キャプチャ
- JavaScriptを実行:ページコンテキストでコードを実行し、DOM情報を取得または操作をトリガー
ここで最も重要なのはSnapshotだ。
多くの人の最初の反応は、Agentにスクリーンショットを与えて、マルチモーダルモデルに画像を「見せる」ことだ。もちろん可能だが、効率が非常に悪い——1枚のスクリーンショットは数千トークンを消費し、モデルが画像から構造化情報を抽出する精度は、構造化データを直接読むよりはるかに低い。
Accessibility treeは、ブラウザがアクセシビリティ機能のために維持するツリーで、ページ上の各インタラクティブ要素の役割、名前、状態を記述する。Agentにとって、これは「意味マップ」だ——ボタンの色や画面上の位置を知る必要はなく、「ここに『送信』というボタンがあり、refはe42」と知るだけでいい。
SnapshotはAIフレンドリー、スクリーンショットは人間フレンドリー。 AgentにはSnapshotを使い、人間にはスクリーンショットを見せる。
ブラウザだけではない
目はブラウザだけではない。Agentの感知能力は多くの次元に拡張できる:
- ファイルシステム:コードファイル、設定ファイル、ログファイルを読む
- ターミナル出力:コマンド実行後にstdoutとstderrを見る
- APIレスポンス:インターフェースを呼び出した後、返されたデータを解析
- Git状態:現在のブランチ、未コミットの変更、最近のcommitを知る
各感知チャネルはAgentに伝える:世界は今どんな状態か。
手:Agentに世界を変えさせる
見るだけでは不十分、行動できる必要がある。
スクリプト実行が最も汎用的な「手」
Agentに一つだけ行動能力を与えるなら、shellスクリプトの実行を選ぶ。
なぜ?shellは万能接着剤だからだ。それで可能なこと:
- ファイルの作成、変更、削除
- 依存関係のインストール、ビルドの実行、テストの実行
- APIの呼び出し、リソースのダウンロード、データの処理
- Gitの操作、コードのデプロイ、プロセスの管理
shellスクリプトを実行できるAgentは、理論上プログラマーができることは何でもできる。
しかし粗粒度では不十分
純粋なshellには問題がある:低レベルすぎる。Agentにsedでテキスト置換をさせると、エスケープ文字や正規表現の境界ケースで失敗することが多い。
より良いアプローチは多層の行動能力を提供することだ:
| 層 | ツール | 適用シナリオ |
|---|---|---|
| 精細操作 | ファイル読み書き、検索置換 | コード修正、設定更新 |
| 中等操作 | ブラウザインタラクション(クリック、入力、ナビゲーション) | Web操作、テスト検証 |
| 粗粒度操作 | Shellスクリプト | ビルド、デプロイ、システム管理 |
精細操作はエラー確率を減らし、粗粒度操作は柔軟性を保証する。両者を組み合わせて、Agentは安定かつ高速になる。
実例
Agentにこのブログを構築させたとき、その「手」はこのように協力した:
- ファイル書き込み(精細操作):Markdown記事の作成、設定ファイルの修正
- スクリプト実行(粗粒度):
hexo generateでビルド、git pushでデプロイ - ブラウザ操作(中等操作):デプロイ後のページを開き、レンダリング効果をチェック
- 検索置換(精細操作):CSS問題を発見後、スタイルファイルを精密に修正
全プロセスを自分で実行し、私は最後にページを更新して効果を見るだけだった。
目と手の協調:感知-決定-行動のループ
目と手は単独では意味がない。重要なのはループを形成することだ。
1 | 感知(何を見たか)→ 決定(何をすべきか)→ 行動(する)→ 感知(行動後世界は変わったか)→ ... |
このループは簡単に聞こえるが、実装には多くの詳細がある:
1. 行動後の検証が必須
Agent が操作を実行した後、成功を仮定してはいけない。振り返る必要がある:
- コードを変更した?テストを実行。
- Webサイトをデプロイした?ブラウザで開いて確認。
- 依存関係をインストールした?
node_modulesが存在するか確認。
検証のない行動は危険だ。 これは目を閉じて道路を渡るようなもの——足を踏み出したが、車があるかどうかわからない。
2. エラーは情報であり、終点ではない
Agentがスクリプト実行でエラーになったとき、エラー情報自体が最も価値のある感知入力だ。良いAgentは:
- エラー情報を読む
- 原因を分析
- プランを調整
- 再実行
「実行失敗、手動処理してください」と直接言うのではない。
3. いつ停止すべきか知る
ループは無限に回ってはいけない。Agentは判断が必要:
- タスクは完了したか?
- デッドループに陥っていないか?
- ユーザー確認を求めるべきか?
これはメタ認知能力——ただ行動するだけでなく、自分が何をしているか、どの程度うまくいっているかを知る。
現在の方法の限界
多くのメリットを語ったが、現実の落とし穴も話そう。
セキュリティ境界が曖昧
Agentがshellスクリプトを実行できるということは、理論上rm -rf /も実行できる。正常なAgentはそうしないが、権限制御は真剣に扱うべき問題だ。
現在の対策は通常:
- 作業ディレクトリを制限
- 危険なコマンドを禁止
- 重要な操作には手動確認が必要
しかしこれらはパッチだ。より根本的な解決策はサンドボックス実行環境かもしれない——Agentが隔離されたコンテナ内で操作し、エラーが発生してもホストシステムに影響しない。
感知帯域幅が限られている
ブラウザとファイルシステムがあっても、Agentの感知帯域幅は人間よりはるかに低い。人間は一目で「このページのレイアウトがおかしい」とわかるが、AgentはDOM全体を解析して初めて類似の判断ができる。
マルチモーダルモデルは進化しているが、まだ「一目でわかる」レベルではない。 現在のベストプラクティスは、構造化感知(Snapshot)と視覚感知(スクリーンショット)の併用だ。
長タスクのコンテキスト喪失
複雑なタスクは数十ステップの操作が必要かもしれない。ステップが増えると、初期の感知情報がコンテキストウィンドウから押し出される。Agentは3ステップ前に何を見たか忘れるかもしれない。
これはメモリ管理の問題に戻る——目で見たものも覚えておく必要がある。
未来:より豊かな感知とより精密な行動
Agentの目と手はいくつかの方向に進化すると思う:
感知側
- リアルタイム視覚理解:スクリーンショットだけでなく、人間のように画面を「見て」、レイアウト、色、アニメーションを理解
- 多源情報統合:コード、ログ、ブラウザ、データベースなど複数の情報源を同時に処理
- 能動的探索:どこを見るか指示を待たず、自分でファイルを探し、ログを調べ、ドキュメントを検索
行動側
- より精細な操作:人間のようにIDEを操作——コードのリファクタリング、デバッガの実行、ブレークポイントの設定
- クロスシステム協力:複数のサービス、環境、ツールチェーンを同時に操作
- 物理世界との相互作用:IoTデバイス、ロボットインターフェースを通じて、デジタル世界から物理世界へ拡張
協調側
- 適応戦略:タスクの複雑さに応じて、感知精度と行動粒度を自動選択
- 並列操作:複数のサブタスクを同時実行、シリアル待機ではない
- 協力能力:複数のAgentが分業協力、1つはフロントエンド、1つはバックエンド、1つはテスト
最後に
最初の質問に戻る:Agentに目と手を持たせるにはどうするか?
技術的には、ブラウザ、ファイルシステム、ターミナル、APIなどのツールを接続することだ。しかしより深い答えは:感知-決定-行動のループを形成させ、そのループの中で学習と改善を続けさせることだ。
話すだけのAgentはコンサルタント。見て行動できるAgentは同僚。見て、行動でき、エラーから学習できるAgentこそが、真のパートナーだ。
私たちは「コンサルタント時代」から「同僚時代」へ向かっている。この道はまだ長いが、各ステップがワクワクさせる。
この記事の構築、デプロイ、デバッグプロセスは、すべて目と手を持つAgentが完了した。ページが白くなったのを見て、自分で原因を調べ、設定を修正し、再デプロイした。これが目と手の力だ。
Agentの能力の境界を探求しているなら、Twitterで話しかけてほしい。

