AI入門ガイド
AIエージェントがそんなに多くのトークンを使う理由(20ステップの例)
AIエージェントは各ステップで履歴、ツール一覧、ツール出力を再送する。20ステップの実例でトークンがどこへ行くかを見る。

エージェントに1つ質問を投げると、数分間動き続け、使用量ページには数十万トークンが表示される。壊れているわけではない。エージェントはループであり、ループの各ターンでそれまでにやり取りされたすべて(ツール一覧、履歴、ツールが返したもの)が入力トークンとして再送される。エージェントが書く回答はごく小さい。何度も読み直されるものはそうではない。
エージェントとは何か、一枚の絵で#
チャットモデルは一度だけ答える。エージェントは、ツールを備えたループの中にいる同じモデルだ。ファイルを読む、ウェブを検索する、コマンドを実行する。そしてモデルは呼び出しの間、何も覚えていない。電話を切るたびにすべてを忘れるアシスタントを想像してほしい。電話をかけ直すたびに、最初からメモを読み上げ、それから1行だけ付け加える。APIはそういうふうに動く。
Anthropicのツール使用ドキュメント(2026年10月26日確認)は、このループを次のように説明している。
- アプリがユーザーメッセージとツール一覧を送信する。
- モデルは
stop_とreason: "tool_ use" tool_useブロックで応答する。どのツールを、どの引数で使うか。 - アプリがツールを実行し、2回目のリクエストを送信する。それには以前のメッセージ、モデルのツール呼び出し、
tool_resultブロック、そして同じツール一覧が含まれる。 - モデルが答えるか、別のツールを要求し、ループがまた回る。
同じページには、ツール使用リクエストは送信された入力の合計(toolsパラメータを含む)と出力に基づいて課金されると書かれている。つまりステップ3は決して「新しい部分だけ」ではない。会話全体を再び送るのだ。
Request 1 tools + system + task
Request 2 tools + system + task + call 1 + result 1
Request 3 tools + system + task + call 1 + result 1 + call 2 + result 2
...これは長いチャットが高くつく理由と同じ仕組みで、ただ速いだけだ。チャットは入力するたびに1メッセージ分増える。エージェントは各ステップで2ブロック分増え、誰も何も入力しない。
各ステップに付いて回る3つのもの#
ツール一覧。 すべてのツールの名前、説明、パラメータスキーマが、たとえそのターンでモデルがどれも使わなくても、毎回のリクエストに入る。ドキュメントには小さな追加もある。ツールを有効にすると、APIは独自のツール使用プロンプトを追加し、Claude Sonnet 5.5、Opus 5.5、Haiku 5.5では286トークン、他のモデルでは別の数になる。
履歴。 あなたのタスク、モデルの以前のツール呼び出し、そのメモ。
ツール出力。 これが曲者だ。エージェントが読んだファイル、検索結果のページ、テストログ。一度履歴に入ると、その後のすべてのステップで再び支払うことになる。
トークンとはテキストの小さな断片で、おおよそ短い単語かその一部であり、これら3つはすべてトークンで数えられる。
20ステップの実行を数える#
3つのツール(ファイルを読む、検索、テストを実行)を持つ小さなコーディングエージェントを動かし、20ステップかかるタスクを与えるとしよう。次の仮定を置く。
- ツール定義:1,500トークン、システムプロンプト:500、あなたのタスク:200、したがって毎回のリクエストは2,200トークンから始まる。
- 各ステップでモデルは150トークンのツール呼び出しを書き、ツールは800トークンを返す。
- どちらも履歴に加わるので、各ステップは次のリクエストに950トークンを追加する。

実行の合計を出すには、20回のリクエストをすべて足し合わせる。2,200のベースは20回送られ、各ラウンドは後のステップに引き継がれる。ステップ1は0、ステップ2は1、という具合にステップ19までで、合計190ラウンドになる。
20 × 2,200 = 44,000
950 × 190 = 180,500
44,000 + 180,500 = 224,500入力トークン、そして20 × 150 = 3,000出力トークン。
エージェントは3,000トークンを書き、224,500を読んだ。出力トークンは入力トークンより1つあたりのコストが高い(入力トークンと出力トークンを参照)が、数が非常に少ないので、請求額は依然として入力側で決まる。以下が現在の価格でのその実行だ。
| モデル | 入力 $/1M | 出力 $/1M | コスト | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0046 | $0.0095 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0037 | $0.0111 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0117 | $0.071 |
合計 224,500 入力トークンと 3,000 出力トークン。100万トークンあたりの価格は現行のもので、当社の料金体系に合わせて変動します。OpenRouter 列は同じワークロードの参考価格を示しています。
DeepSeek-V4-Flashではそのような実行1回が$0.0037、GLM-5.3-Flashでは$0.0046になる。100回なら22,450,000入力トークンと300,000出力トークン:DeepSeek-V4-Flashで$0.367。上の表は入力と出力を合計しており、全体としてそこに挙げたモデルはOpenRouterより安くなる。
ステップ数は見た目以上に重要だ。同じ仮定で5ステップの実行:
5 × 2,200 = 11,000
950 × 10 = 9,500
11,000 + 9,500 = 20,500入力トークン。ステップ数が4倍で入力は約11倍になった。新しいステップが古いステップをすべて読み直すからだ。
どこを削るか:4つの習慣#
ツールの結果1つが最も簡単に節約できる場所だ。ステップ3のテスト実行が4,000トークンのログを返すとしよう。それはその後17回のリクエストで再送される。
- 前:4,000 × 17 = 68,000入力トークンがその1つのログによって運ばれる。
- 後:ツールが関連する40行だけ(約400トークン)を返すなら、400 × 17 = 6,800。
同じタスク、同じ回答で、その1つの結果からの入力は10分の1になる。そこから4つの習慣が導かれる。
- ツールから返すものを減らす。 ログ全体ではなくエラー周辺の行、ファイル全体ではなく関数だけ。ツール出力をコンテキストから遠ざけるにより長い考察がある。
- エージェントに与えるツールを減らす。 すべての定義が毎回のリクエストに乗る。
- ステップ数を制限し、古い履歴がもう重要でなくなったら新しいタスクを始める。
- 各ステップの使用量を合計し、あらかじめ決めた予算で実行を止める。見積もり側については、AIエージェントのコストを見積もる方法を参照。
自分の実行を数える#
すべてのレスポンスは、usageフィールドで入力と出力のトークン数を報告する。すべてのステップで合計すれば、私の仮定ではなくあなたのエージェントの実際の数値が得られる。CheapTokensを指したOpenAI Python SDKでのスケッチ(messagesとtoolsはあなたのエージェント自身のもの):
from openai import OpenAI
client = OpenAI(base_url="https://api.cheaptokens.dev/v1", api_key="YOUR_API_KEY")
total_in = total_out = 0
for step in range(20): # your agent loop
resp = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=messages,
tools=tools,
)
total_in += resp.usage.prompt_tokens
total_out += resp.usage.completion_tokens
# ...run the tool, append the result to messages
print(total_in, total_out)2つの合計は上のコスト表にそのまま当てはまる。このような長い履歴には、DeepSeek-V4-Flashは380Kのコンテキストウィンドウと回答あたり最大32,768出力トークンを、いつでも同じ価格で提供する。GLM-5.3-Flashは390Kのコンテキストと最大8,192出力トークンを持つ。セットアップはドキュメントに、各モデルの現在の価格は価格ページにあり、モデルには専用ページ安いDeepSeekがある。



