AI 開発

AI Agent は自分でネットに行き、コードを書き、タスクを実行するのか?Browser Agent から JSON Tool Calling までの完全解説

約 15 分

製品ページは「自律的に閲覧し、コードを書き、タスクを実行する」と書く。工学で正確な一文はこうだ:モデルは JSON を埋めるだけ。宿主がブラウザを開き、ファイルを改め、API を呼ぶ。本稿は Browser Agent から JSON Tool Calling まで歩き、三つの問いに答える。自分でやるのか。本当に手を動かすのは誰か。どのオブジェクトを見るべきか。

読む前の速覧

概念 一文 着地点
Browser Agent ページやデスクトップへの構造化動作 computer_use / browser JSON
Coding Agent リポジトリを読み、ファイルを改め、コマンドを走らせる tool_use / Bash
Task Agent 業務 API を呼び、状態を書き、引き継ぐ tool_calls / arguments
JSON Tool Calling 名前・引数・結果の契約 Schema / payload

分業を先に覚える。モデルはオブジェクトを提案し、宿主が副作用を実行する。銘柄を替えても、この JSON 呼び出し鎖は変わらない。

仕事はする。「自分で」はしない

2026 年の Agent は、ページを開き、フォームを埋め、書き出せる。リポジトリを読み、ファイルを改め、テストを走らせられる。注文を調べ、返金を始め、引き継げる。それは本当の副作用であり、チャットの泡ではない。

だが「自分で」という言葉は主語を誤る。大規模モデルはブラウザプロセスを持たず、shell を spawn せず、イントラネットを直接叩かない。出すのは検証可能なオブジェクトだけだ:ツール名、引数、ときに次の意図。実際にクリックするのは宿主である。

  • ネットへ行く:モデルは browser_navigate か computer_call を出し、宿主のブラウザサンドボックスが実行する。
  • コードを書く:モデルは Read / Edit / Bash を出し、宿主のワークスペースが実行する。
  • タスクを走らせる:モデルは tool_calls を出し、宿主が API かワークフローを呼ぶ。

まだ Agent、Tool Calling、Function Calling を一つの語に潰しているなら、先に AI Agent 完全ガイド を読め。本稿が扱うのは一事だけだ:三つの製品シェル、一本の JSON 呼び出し鎖。

三つのシェル、一枚のツール表

市場は製品を Browser Agent、Coding Agent、Computer Use、Operator、ChatGPT Agent と呼ぶ。シェルは違う。表は同じだ:何ができるかは、宿主がどのツールを露出したかで決まる。

  • Browser Agent:タブ、スクリーンショット、クリック、DOM 抽出。デモは一番見栄えがいい。権限も一番見積もりを誤りやすい。
  • Coding Agent:リポジトリ、パッチ、テスト、端末。変えるのはディスクとプロセスだ。
  • Task Agent:注文、チケット、カレンダー、返金。変えるのは業務システムだ。

能力を銘柄で買うな。ツール表で買え。browser ツールがなければネットへ行けない。Bash がなければ走れるパッチは書けない。業務関数がなければ返金は実行できない。

JSON Tool Calling こそ共通の骨格

Tool Calling、Function Calling、computer_use は名前が違い、形は同じだ。1 ターンはたいてい四跳びだ:

  1. 宣言:宿主が tools[] か inputSchema を出す。
  2. 提案:モデルはツール名と引数オブジェクトを埋める。自分では実行しない。
  3. 門:宿主が検証し、allowlist をかけ、人を待つか決める。
  4. 書き戻し:スクリーンショット、stdout、API 応答が次のターンで見えるオブジェクトになる。

だから Schema は prompt より高い。prompt は何を埋めるかに影響する。Schema と宿主が、何が起きうるかを決める。口径は なぜ AI に JSON Schema が要るか、プロトコル境界は MCP Tool Schema vs Function Calling。

Browser Agent:ネットへ行くのはモデルではない

Browser Agent は「自分でネットへ行く」に一番見える。画面上で本当にタブが動く。動作はそれでもオブジェクトだ。

構造化された Browser Agent——Playwright 流、Claude の browser ツール、多くの MCP ブラウザ——が出すのは検証可能なナビだ:

{
  "type": "tool_use",
  "id": "call_nav_1",
  "name": "browser_navigate",
  "input": {
    "url": "https://docs.example.com/api/orders",
    "wait_until": "domcontentloaded"
  }
}

OpenAI 側の computer use / Operator は座標動作に近い。モデルが見るのはスクリーンショットかアクセシビリティツリーで、出すのは click、type、scroll だ:

{
  "type": "computer_call",
  "call_id": "call_8c12",
  "action": {
    "type": "click",
    "x": 412,
    "y": 268
  }
}

どちらの形も「ページを見たから自分でクリックした」と読んではいけない。文脈に入ったのは画素か木だ。クリックしたのは宿主だ。鎖すべきは引数であり、コピー文ではない:

  • URL allowlist:既定はドキュメント、ステータスページ、宣言したドメインだけ。
  • 追加ヘッダを禁じる:Cookie と Authorization は引数オブジェクトに入れない。
  • 抽出には Schema を:書き出すのはフィールドであり、ページ全体の HTML ではない。
  • ログイン状態は宿主に残す:セッションはサンドボックス方針であり、モデルの重みではない。

締めたナビ Schema はこう見える。additionalProperties: false は潔癖ではない——広い object は、イントラ URL やスクリプトを一本余分に滑り込ませる:

{
  "name": "browser_navigate",
  "description": "Open a URL in the isolated browser",
  "inputSchema": {
    "type": "object",
    "properties": {
      "url": { "type": "string", "format": "uri" },
      "wait_until": {
        "type": "string",
        "enum": ["load", "domcontentloaded"]
      }
    },
    "required": ["url"],
    "additionalProperties": false
  }
}

GPT-6 Astra ガイド は browsing と computer use を一つの能力として書く。工学ではどちらもツール JSON だ。広いブラウザツールはセッションをループに渡す。安全面は AI Agent セキュリティと JSON 検証。

Coding Agent:ディスクへ書くのもモデルではない

AI Coding Agent と JSON 呼び出し鎖 はすでに Claude Code と GPT Agent を開いた。Browser Agent に揃える一文だけ足す:コードを書くことも JSON を埋めることだ。

{
  "type": "tool_use",
  "id": "call_read_1",
  "name": "Read",
  "input": {
    "path": "src/billing/refund.py"
  }
}

モデルはファイルを open() しない。宿主が読み、tool_result を書く。次のターンで初めて Edit や Bash を出せる。

ネットとの差はツール面だけだ。片側は url / selector / screenshot、もう片側は path / command / patch。ループは同じだ。

タスク実行:副作用は API にあり、重みにはない

「タスクを実行する」は製品文が最初に飲み込む句だ。返金、チケット振り分け、カレンダー書き込み——それが Task Agent だ。形はなお Function Calling だ:

{
  "tool_calls": [{
    "id": "call_task_3",
    "type": "function",
    "function": {
      "name": "create_ticket",
      "arguments": "{\"title\":\"Refund A-1042\",\"priority\":\"high\"}"
    }
  }]
}

ここでの危険は文章ではない。広い object だ。金額上限、enum、additionalProperties: false は Schema に書く。「気をつけて」には書かない。

マルチ Agent の引き継ぎも JSON だ。handoff オブジェクトは「経理に渡して」より監査できる。ツールとワークフローを Schema に収める話は JSON Schema と AI Agent ワークフロー。

1 ターンは四跳びだけ

製品ページは「自律的に完了する」と書く。工学では Browser、Coding、Task は同じ四跳びを歩く:

  1. 観察:スクリーンショット、リポジトリ状態、前回のツール結果が文脈に入る。
  2. 提案:モデルがツール名と引数オブジェクトを出す。
  3. 実行:宿主がページを開き、ファイルを改め、API を叩く。副作用はここで起きる。
  4. 書き戻し:DOM 要約、stdout、応答本体が次に見えるオブジェクトになる。

門を一つ欠けば、JSON は命令になる。auto-mode は、ある種のオブジェクトを事前に承認したということだ。シェルを替えても、ループは変わらない。

三つの表、一本の鎖

誰が賢いかではない。宿主がどのツール表をループに掛けるかだ:

軸 Browser Agent Coding Agent Task Agent
何を見るか スクリーンショット / DOM / a11y 木 ファイル、テスト、端末出力 業務オブジェクト、前跳びの状態
何を出すか navigate / click / type Read / Edit / Bash lookup / create / handoff
副作用はどこか ブラウザサンドボックス、ログイン状態 ワークスペースのディスク、プロセス 業務 API、下流システム
何を鎖すか URL、Cookie、抽出 Schema cwd、タイムアウト、ネットワーク門 金額、列挙、必須フィールド

銘柄を替えてもループは変わらない。安定させるべきはツール契約と実行世界であり、どこかのデモ動画ではない。

見るべきはオブジェクトであり、デモ動画ではない

Agent が「ネットに行き、コードを書き、タスクを走らせた」あと、審るべきは最後の「済みました」ではない。軌跡だ。

  • tool_use / tool_calls / computer_call を 整形 し、名前と引数が想定した跳びかを見る。
  • JSONPath 抽出 で url、command、name を抜く。散文を目で追うな。
  • 先週通った軌跡と JSON Diff する。ループが漂ったら、先にツール表と引数の形を見よ。モデルを責めるのはその後だ。
  • スクリーンショット、stdout、API 応答は軌跡に入れる。「完了」の一文だけでは足りない。
  • Cookie、セッション、イントラ URL を公開フォーマッタに貼るな。JSONSort はブラウザローカルで走る。これらのオブジェクトを見る場所として適切だ。

軌跡が再構築できて、初めてセッションを復盤できる。それは本番に入れる入場券であり、飾りではない。

よくある誤解

  • モデルが自分でページを開いたと思う。開いたのは宿主のブラウザプロセスだ。
  • モデルが自分でコードを実行したと思う。実行権は宿主にあり、重みにはない。
  • デモだけ見て、ツール JSON を審らない。コマンドやクリックはすでに起きているかもしれない。
  • browser に白紙小切手を渡す。URL 門と Cookie 隔離がなければ、ループはセッション漏洩だ。
  • prompt で Schema を代用する。口径は検証できなければならない。
  • 三つの Agent を三種の知能だと思う。三つはツール表であり、三つの脳ではない。

FAQ

AI Agent は今、本当に自分でネットへ行くのか?

ページを開き、クリックし、抽出はする。「自分で」ブラウザを持つわけではない。モデルは JSON を埋め、宿主のサンドボックスが実行する。browser ツールがなければネットへ行けない。

Browser Agent と Computer Use の差は何か?

どちらも UI を操作する。Browser Agent はセレクタ、ナビ、DOM 抽出が多い。Computer Use / Operator はスクリーンショットと座標が多い。どちらも構造化呼び出しであり、手が生えたモデルではない。

コードを書くこととタスク実行は別プロトコルか?

違う。Coding Agent の Read / Bash と Task Agent の Function Calling は、Browser Agent と同じ JSON 呼び出し鎖を共有する。変わるのはツール表と副作用の半径だ。

なぜ、より賢いモデルではなく JSON を語るのか?

副作用はオブジェクトを解析したあとに起きるからだ。賢いモデルでも URL や金額を誤りうる。何が起きうるかを決めるのは Schema と宿主の門だ。

Agent に本番のログイン状態や本番 DB を触らせてよいか?

いけない。隔離ブラウザとワークスペースで起草させ、軌跡を残せ。ログイン状態、秘密、公開は人の戦略門のままにする。ループは起草し、門が通す。

結論

「AI Agent はネットに行き、コードを書き、タスクを実行する」は半分しか正しくない。正しい半分は、副作用がすでに起きていることだ。誤った半分は主語だ。主語は宿主、述語は実行、目的語はモデルが埋めた JSON だ。

今日から、「自分でやるか」の議論を減らせ。先に Browser、Coding、Task の三つのツール表、Schema、セッション軌跡をリポジトリに書け。モデルは替わる。この JSON Tool Calling 鎖を先に安定させるべきだ。同じ鎖から事故がどう育つかは Claude 事案とツール JSON。

関連記事

更新記録: 初回公開