0
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?

エージェントのツール定義、117万トークンが約1,000に。Code Modeという「コードで呼ぶ」設計と、痛む場面

0
Posted at

はじめに

前回、Cloudflare OSの設計を読み解いたとき、賭けの2つ目として「Code Mode」に軽く触れました。エージェントが決まったツールを呼ぶのではなく、その場でコードを書いて実行する、という方式です。あのときは「そういう作りになっている」で流しましたが、これは軽く流していい話ではありませんでした。

というのも、Code Modeは今、CloudflareとAnthropicという別々のプレイヤーが、ほぼ同じ結論にたどり着いている設計思想だからです。しかも掲げている数字が派手です。Cloudflareは、2,500を超えるエンドポイントを持つAPIを従来のやり方でエージェントに渡すと約117万トークンかかるところ、Code Modeなら約1,000トークンで済むと言っています。桁が3つ違います。

なぜ「ツールを直接呼ばない」だけで、ここまで変わるのか。今回はその仕組みを、CloudflareとAnthropicの一次情報に沿って分解します。そして忘れてはいけない、効く場面と痛む場面も最後に整理します。

先に3行でまとめると

  • Code Modeは「ツールを1つずつ呼ぶ」代わりに「コードを書いて実行し、必要な結果だけ受け取る」方式。CloudflareもAnthropicも同じ方向に動いている
  • 重さの正体は2つ。使う前から全ツール定義がコンテキストを埋めること、そして大量の中間データがモデルを素通りすること。Code Modeはこの両方を減らす
  • 万能ではない。サンドボックスの運用やデバッグのしづらさ、単純な1回呼びには過剰、という痛む場面もある

この記事に出てくる用語の位置づけ

AIエージェント界隈の新しめの言葉が並びます。迷ったらここに戻ってきてください。

用語 位置づけ ざっくりの意味
Code Mode Cloudflare発(一般化しつつある) ツールを呼ぶ代わりにコードを書いて実行する方式
MCP 一般用語 エージェントに外部ツールをつなぐ標準プロトコル
ツール呼び出し(tool calling) 一般用語 モデルが関数を1つ選んで呼ぶ従来の方式
Programmatic Tool Calling Anthropic独自 コードからツールを呼び、中間結果を文脈に載せない機能
Tool Search Anthropic独自 全ツール定義を先に積まず、必要な定義だけ検索して使う機能
Dynamic Worker Loader Cloudflare独自 Code Modeのコードを走らせる軽量なV8サンドボックス
コンテキストウィンドウ 一般用語 モデルが一度に読める入力の枠。埋まるほど重く高くなる

なぜ「直接呼ぶ」と重くなるのか

まず押さえたいのは、従来のツール呼び出しには重さの原因が2つある、ということです。1つずつ見ます。

1つ目は、ツールの定義そのものです。エージェントにツールを持たせるとき、モデルは「どんなツールがあり、どんな引数を取るか」の定義を、使う前からコンテキストに積みます。ツールが数個なら誤差ですが、大きなAPIを丸ごとつなぐと話が変わります。

従来は全ツールの定義がモデルのコンテキストに積まれ約117万トークンに達するが、Code Modeは型付きSDKに圧縮して約1,000トークンで済む

Cloudflareが挙げる例がわかりやすいです。2,500を超えるエンドポイントを持つAPIをそのままツール定義として渡すと、約117万トークン。仕事を始める前から、コンテキストの大半が「ツールの取扱説明書」で埋まってしまう計算です。Code Modeでは、これを型付きのSDK越しに呼ぶ形にして、必要な定義だけ探索します。結果、入力トークンは約1,000、99.9%減とされています。

2つ目の重さは、中間結果です。たとえば大量のデータをフェッチして、条件で絞り込んで、集計する。従来のツール呼び出しだと、フェッチした生データが丸ごとモデルのコンテキストを通過してから、モデルが頭の中で絞り込むことになります。

従来は生データが全部モデルのコンテキストを通過するが、Code Modeはサンドボックスで絞り込み・集計してから最終結果だけをモデルに返す

Anthropicが挙げる例では、2,000件を超える経費明細(生データで約50KB)を扱うとき、コードで先に処理して、モデルに返すのは最終結果の約1KBだけにできます。ループや条件分岐、データ変換、エラー処理を、モデルの推論の中でぼんやりやるのではなく、コードとして明示的に書いて実行する。だから生データはモデルを素通りせず、コンテキストにも課金にも乗りません。

数字で見る効き目

両社が公表している削減率を並べておきます。いずれもベンダー自身の公表値で、条件によって変わる点は割り引いて見てください。

出どころ 手法 ビフォー アフター 削減
Cloudflare Code Mode(2,500超のAPI定義) 約1,170,000トークン 約1,000トークン 約99.9%
Anthropic Tool Search(定義の圧縮) 約77,000トークン 約8,700トークン 約85%
Anthropic Programmatic Tool Calling(中間結果の削減) 平均43,588トークン 平均27,297トークン 約37%

数字の大きさは前提しだいですが、方向は一致しています。ツール定義を先に全部積まない、中間結果をモデルに通さない。この2点を突くと、トークンは目に見えて減ります。

なぜコードのほうが得意なのか

ここで湧く疑問は、「そもそもモデルは、コードを書くほうがツールを呼ぶより上手いのか」です。Cloudflareの答えははっきりしています。LLMは、MCPを直接呼ぶより、MCPを呼ぶコードを書くほうが上手い、と。

理由はシンプルで、訓練データの量です。世の中には本物のコードが大量にあり、モデルはそれを浴びるほど学んでいます。一方、ツール呼び出しのための構造化フォーマットは、人工的に作られた形式で、訓練データにはほとんど現れません。だからモデルは、JavaScriptなら流暢なのに、関数呼び出しのJSONになるとたどたどしくなる。それなら、モデルが得意な「コードを書く」に寄せてしまえばいい、という発想です。Cloudflareの言葉を借りれば、コードはコンパクトな計画(compact plan)として働き、モデルは複数の操作を組み合わせて、必要なデータだけを返せます。

これは前に書いた「隔離」と同じ話

ここまで読んで、既視感がありました。以前、Claude Codeのsubagentに調べ物を丸投げすると主コンテキストが減る、という話を書いたのですが、根っこは同じです。大きな出力を、モデルが見る場所の外に置く。subagentは別ウィンドウに隔離し、Code Modeはサンドボックスに隔離する。置き場所が違うだけで、狙いは「モデルのコンテキストを、最終的に必要なものだけで満たす」ことで共通しています。

エージェントの効率化は、賢いモデルを待つ話だと思われがちです。でも実際に効いているのは、モデルに何を見せて、何を見せないかという情報設計のほうでした。Code Modeは、その設計をコードという道具でやり切ろうとしている、と読めます。

効く場面と、痛む場面

万能ではありません。導入して得をする場面と、かえって損をする場面を分けて考えるべきです。

効くのは、つなぐツールが多いときと、大量の中間データを扱うときです。この2つはまさに、さきほどの「2つの重さ」が牙をむく場面なので、Code Modeの利得がまっすぐ乗ります。

痛む場面もあります。まず、コードを安全に実行するサンドボックスが要ります。何でも実行できる環境は、プロンプトインジェクションの温床になりかねません。Cloudflareはこの点をDynamic Worker Loaderで対処していて、ファイルシステムなし、環境変数なし、外部への通信は既定で無効、という締め方をしています。裏を返せば、自前でCode Modeを組むなら、この隔離を自分で用意する責任がついてきます。

もう1つは、デバッグと単純タスクです。エージェントが書いたコードが失敗したとき、原因を追うのは、1回のツール呼び出しを追うより手間がかかります。そして、ツールを1回呼ぶだけで終わる単純なタスクに、わざわざコードを書かせて実行するのは、明らかに過剰です。トークンは減っても、仕組みの複雑さは増える。この天秤を忘れると、「流行っているから入れた」で終わります。

おわりに

Code Modeを掘ってみて感じたのは、エージェント開発の主戦場が「どのモデルを使うか」から「モデルに何を渡すか」へ、はっきり移ってきたということでした。ツール定義を積みすぎない、中間結果を通さない。やっていることは地味な情報設計ですが、その積み重ねが桁違いの差を生みます。前回のCloudflare OSが「脱SaaS」と並べてCode Modeに賭けていたのも、たぶん同じ直感からです。

Devinのようなエージェントを使っていても、結局効いてくるのは同じ問いでした。この作業で、モデルに本当に見せる必要がある情報はどれか。見せなくていいものを、どこに逃がすか。Code Modeはその逃がし先を「コードとサンドボックス」に定めた解答です。次は、手元のMCP構成で実際にどれだけトークンが動くのかを測って、公表値と自分の環境の差がどこから来るのかを確かめてみるつもりです。

参考リンク

🚀 Devin専門の解説メディア「StartDevin」を運営中!
Devinの導入・使い方・最新アップデート・活用事例を、日本語でまとめています。
👉 StartDevin をチェックする(startdevin.jp)

この記事にぜひ いいね❤️ していただけると励みになります 🙌

0
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
0
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?