エージェントループ:「単純なタスク」が 50K トークンになる理由

ファイルを読んで編集してテストを走らせるエージェントは通常 5〜20 ターン LLM を呼びます。各ターンで成長する全履歴が再送信され、トークン請求は二乗で増加します。

Caching & long context

詳細な説明

二乗の罠

素朴なエージェントは毎ターン 会話履歴全体 を送ります。システムプロンプト 5,000 トークン、各ターンが 2,000 トークンのツール出力を追加する例:

ターン 累計入力トークン ターンあたりコスト(GPT-4o)
1 5,000 $0.0125
2 7,000 $0.0175
5 13,000 $0.0325
10 23,000 $0.0575
20 43,000 $0.108

20ターンのエージェントループの入力トークン分だけで 約 $0.85(全ターンの合計)。出力トークン(約 $0.20)を加えると1タスクあたり $1.05 になります。1日10,000タスクで $10,500/日 — しかもこれはフロンティアモデル中最安の GPT-4o の話です。

素朴なエージェントが二乗になる理由

各ターンで新コンテンツが履歴に追加されます。LLM はコール間でメモリを持たないので履歴全体を再送する必要があります。N ターンで毎回 k トークン追加すると、総送信トークン数は N(N+1)·k/2 = O(N²k) です。

3つの対処法

  1. 積極的なキャッシュ:最初の 50K トークン(システムプロンプト + few-shot 例 + ツール定義)を Anthropic キャッシュに乗せれば、ターンあたりの読み込みコストは10分の1になります。エージェントループでのキャッシュヒット率は通常 70〜90% です。

  2. 会話の要約:10ターンごとに履歴を 500 トークンの要約に置き換えます。粒度を犠牲にしてトークン数を90%削減できます。

  3. サブエージェントアーキテクチャ:各サブタスクに対して、関連コンテキストだけを持つフレッシュなエージェントを生成します。オーケストレーターの履歴は小さく保たれ、ワーカーエージェントは短命です。

ツール呼び出しのオーバーヘッド

各ツール呼び出しには次が加わります:

  • システムプロンプト内のツール定義(ツールあたり 50〜200 トークン)。
  • アシスタントメッセージ内の関数呼び出し JSON(50〜100 トークン)。
  • 次のユーザーメッセージ内のツール結果(変動。ファイル読み込みでは膨大になる)。

20ツール定義しているのに1タスクで3つしか使わないなら、タスクタイプに応じた遅延ツール読み込みを検討してください。

ユースケース

エージェント製品を設計するとき、動作中のエージェントの想定より高い請求をデバッグするとき、要約やサブエージェント導入の判断をするときに使ってください。

試してみるプロンプト トークン費用計算ツール

フルツールを開く