話せるが行動できないアシスタント

こんな経験はないだろうか:AIに質問すると完璧な回答をくれるが、各ステップを自分で実行しなければならない。

「このバグを直してくれ」

AIは言う:あのファイルを開き、42行目を見つけ、foobarに変更し、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にこのブログを構築させたとき、その「手」はこのように協力した:

  1. ファイル書き込み(精細操作):Markdown記事の作成、設定ファイルの修正
  2. スクリプト実行(粗粒度):hexo generateでビルド、git pushでデプロイ
  3. ブラウザ操作(中等操作):デプロイ後のページを開き、レンダリング効果をチェック
  4. 検索置換(精細操作):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で話しかけてほしい。