ブログに戻る

AI入門ガイド

AIエージェントがそんなに多くのトークンを使う理由(20ステップの例)

AIエージェントは各ステップで履歴、ツール一覧、ツール出力を再送する。20ステップの実例でトークンがどこへ行くかを見る。

投稿者: CheapTokens Team公開日 読了時間 7 分

チャットカード:1つの質問で数十万トークン?各ステップが履歴全体を再送する。
このページの内容
  1. エージェントとは何か、一枚の絵で
  2. 各ステップに付いて回る3つのもの
  3. 20ステップの実行を数える
  4. どこを削るか:4つの習慣
  5. 自分の実行を数える

エージェントに1つ質問を投げると、数分間動き続け、使用量ページには数十万トークンが表示される。壊れているわけではない。エージェントはループであり、ループの各ターンでそれまでにやり取りされたすべて(ツール一覧、履歴、ツールが返したもの)が入力トークンとして再送される。エージェントが書く回答はごく小さい。何度も読み直されるものはそうではない。

エージェントとは何か、一枚の絵で#

チャットモデルは一度だけ答える。エージェントは、ツールを備えたループの中にいる同じモデルだ。ファイルを読む、ウェブを検索する、コマンドを実行する。そしてモデルは呼び出しの間、何も覚えていない。電話を切るたびにすべてを忘れるアシスタントを想像してほしい。電話をかけ直すたびに、最初からメモを読み上げ、それから1行だけ付け加える。APIはそういうふうに動く。

Anthropicのツール使用ドキュメント(2026年10月26日確認)は、このループを次のように説明している。

  1. アプリがユーザーメッセージとツール一覧を送信する。
  2. モデルはstop_reason: "tool_use"とtool_useブロックで応答する。どのツールを、どの引数で使うか。
  3. アプリがツールを実行し、2回目のリクエストを送信する。それには以前のメッセージ、モデルのツール呼び出し、tool_resultブロック、そして同じツール一覧が含まれる。
  4. モデルが答えるか、別のツールを要求し、ループがまた回る。

同じページには、ツール使用リクエストは送信された入力の合計(toolsパラメータを含む)と出力に基づいて課金されると書かれている。つまりステップ3は決して「新しい部分だけ」ではない。会話全体を再び送るのだ。

text
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トークンを追加する。
エージェント実行のステップ1、5、10、20における1リクエストの入力サイズ:2,200、6,000、10,750、20,250トークン。一方、出力は各ステップ150のまま
リクエストごとの入力トークンはステップごとに増え、出力は1ステップ150トークンのまま(上記の仮定)

実行の合計を出すには、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つあたりのコストが高い(入力トークンと出力トークンを参照)が、数が非常に少ないので、請求額は依然として入力側で決まる。以下が現在の価格でのその実行だ。

モデル コスト OpenRouter
GLM-5.3-Flash $0.0046 $0.0095
DeepSeek-V4-Flash $0.0037 $0.0111
MiniMax-M2.7 $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はあなたのエージェント自身のもの):

python
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がある。