エージェント向けLLMコスト管理:支出を制限する5つのガードレール
AIエージェントが一気に月間予算を使い果たすのを防ぐ5つのガードレール、各フラッグシップモデルでの200ステップの暴走ループの価格例、およびドル上限で中断する30行のPythonランナー。
記事本文には確認日が記載されています。下の料金表はデプロイのたびにライブカタログから再構築されます。
最速の勝ち方
エージェントのコストはステップ数の二乗に比例して増加します。これは、各ステップがそれ以前のすべてを再送信するためです。Claude Sonnet 5での正常な12ステップ実行は約$0.39ですが、同じエージェントが200ステップのループに陥ると3,670万の入力トークンを読み取り、約$74、Claude Opus 5では$185かかります。各レスポンスの使用状況フィールドから計算された実行ごとのドル予算と、ハードなステップ上限が、被害に比例する唯一のガードレールです。
AIエージェントの支出制限に関する簡潔な回答
Claude Sonnet 5 での健全な12ステップのエージェント実行は約0.39ドルです。同じエージェントが200ステップのループに陥ると、コンテキストが1ステップあたり1,800トークン増加し、毎ステップすべてを再送信するため、合計3,670万入力トークンとなり、約74ドルかかります。Claude Opus 5 または GPT-5.5 では、同じループで約185ドルです。5つのガードレールがこれを防ぎます: 呼び出しごとの max_tokens、実行ごとのステップ上限、明示的な停止条件、各レスポンスの usage フィールドから計算される実行ごとのドル予算、そしてベンダーコンソールでの1日あたりの上限です。
最初の3つはそれぞれ1行です。4つ目は以下の30行のランナーです。5つ目はコンソール設定です。5つすべてを実行してください。それぞれが他の見逃す障害をキャッチするからです。
暴走ループが発生する仕組み
エージェントは通常、1つの巨大なレスポンスを生成することで失敗するわけではありません。小さく一見合理的なステップを何度も繰り返すことで失敗します。私たちが最もよく目にする障害モードは以下の通りです:
- モデルがエラーメッセージを再試行のプロンプトとして扱い、同じ引数で無限に試行を続けるツール
- 「作業を検証せよ」という指示に対し、モデルがタスク全体を再実行することで応答する
- 呼び出しごとにわずかに異なる結果を返すため、モデルが完了したと感じられない検索ツール
- 2つのエージェントがタスクを互いに渡し合い、それぞれが相手が完了責任を負っていると信じている
stop_reasonがmax_tokensである場合に、ループコードが「何かがおかしい」ではなく「もう一度呼び出せ」と扱う
これらのどれもステップ5では高く見えません。ステップ80では、コンテキストが147,000トークンになり、各ステップのコストが最初の20ステップの合計を超えるため、高く見えます。その増加の仕組みは [AIエージェントの実行コスト](/guides/how-much-does-an-ai-agent-cost-to-run) にあります。
各フラッグシップモデルでの200ステップループのコスト
参考トレース:4,000トークンのプレフィックス、500トークンのタスク、各ステップで300トークンのツール呼び出しと1,500トークンの結果が追加されます。ステップkでの入力は4,500 + 1,800 × (k − 1)です。200ステップの合計:200 × 4,500 + 1,800 × 19,900 = 36,720,000入力トークン。出力は200 × 300 = 60,000トークン。ステップ200でのコンテキストは362,700トークンで、1Mウィンドウに収まります。従来のClaude Haiku 4.5のような200Kモデルでは、ステップ109あたりでエラーになりますが、これは意図的なガードレールではなく、偶然のものです。
| Model ($/1M in / out) | Input cost | Output cost | 200-step total | Healthy 12-step run |
|---|---|---|---|---|
| Claude Sonnet 5 ($2 / $10) | 36.72M × $2 = $73.44 | 60,000 × $10 = $0.60 | $74.04 | $0.39 |
| Claude Opus 5 ($5 / $25) | 36.72M × $5 = $183.60 | 60,000 × $15 = $1.50 | $185.10 | $0.98 |
| GPT-5.4 ($2.50 / $15) | 36.72M × $2.50 = $91.80 | 60,000 × $15 = $0.90 | $92.70 | $0.50 |
| GPT-5.5 ($5 / $30) | 36.72M × $5 = $183.60 | 60,000 × $30 = $1.80 | $185.40 | $1.01 |
| Gemini 3.1 Pro ($2 / $12) | 36.72M × $2 = $73.44 | 60,000 × $12 = $0.72 | $74.16 | $0.40 |
| Gemini 3.8 Flash ($0.75 / $3.75) | 36.72M × $0.75 = $27.54 | 60,000 × $3.75 = $0.23 | $27.77 | $0.15 |
| DeepSeek V4.1 Flash ($0.30 / $1.20) | 36.72M × $0.30 = $11.02 | 60,000 × $1.20 = $0.07 | $11.09 | $0.058 |
ステップ数が17倍になると、コストは約190倍になります。プロンプトキャッシング(Anthropicではキャッシュ読み取りがリスト価格の約10%、書き込みが約125%)を使用すると、Sonnet 5ループは362,700 × $2.50 + 36,357,300 × $0.20 + $0.60 = 約$8.78になります。キャッシングは価値があります。[prompt caching for AI agents](/guides/prompt-caching-for-ai-agents)が示すように、しかし健全な実行の22倍のコストは依然として目立つ請求額です。DeepSeek V4.1 Flash(API名 deepseek-flash)は、DeepSeekが廃止したV4 Flashを置き換えました。DeepSeekの行はピーク時レートを使用しています。オフピーク時は半額です。DeepSeekの価格は2026-10-27にapi-docs.deepseek.comで確認しました。
5つのガードレール
1. 呼び出しごとの max_tokens。ステップに合わせてサイズ設定し、モデルの上限に合わせないでください。ツール呼び出しステップには512〜2,048トークンが必要です。最終レポートには4,000トークンが必要かもしれません。Opus 5 での暴走32,000トークンレスポンスは、それだけで32,000 × $25 = $0.80 になり、その後すべての後続ステップのコンテキストに残ります。
2. 実行ごとの最大ステップ数。トレースから数値を選びます: 成功した実行のp95にマージンを加えた値。ほとんどのツールループでは15〜30です。上限に達した実行は、静かにその時点の結果を返すのではなく、大きなエラーを出すべきです。
3. 明示的な停止条件。モデルに finish または report ツールを提供し、それが呼び出されたとき、または stop_reason が end_turn のときにループを終了します。また、退化した進行を検出します: 同じツールが同じ引数で連続して2回呼び出された場合はループであり、実行を中断すべきです。
4. usage からの実行ごとのUSD予算。各レスポンスは入力、キャッシュ、出力トークンを報告します。モデルのレートを掛けて累積し、合計が上限を超えたら中断します。これは、実際に関心のある単位でしきい値を設定できる唯一のガードレールです。
5. ベンダーコンソールでの1日あたりのアカウント上限。Anthropic と OpenAI は、ワークスペースまたはプロジェクトごとにアラート付きの支出制限を設定できます。Google Cloud の予算はアラートを出し、支出を停止するように設定できます。これは、まだ考えついていないバグのための最後の防衛線です。
リトライとバックオフのコスト
SDKクライアントはデフォルトでレート制限とサーバーエラーをリトライします。通常は指数バックオフで2〜3回試行します。拒否されたリクエストは通常課金されませんが、生成開始後にタイムアウトしたリクエストは課金されることが多く、アプリケーションレベルでのステップのリトライはコンテキスト全体を再送信します。
参照ループのステップ100では、コンテキストは4,500 + 99 × 1,800 = 182,700トークンです。Sonnet 5 でのキャッシュなしの1回の試行は182,700 × $2 = $0.37、3回の試行は$1.10で進捗ゼロです。キャッシュありでは、各試行は約$0.04です。2つのルールが導かれます: SDKのリトライ回数を維持し、独自のリトライループでラップしないこと。また、失敗した実行を最初からリトライする必要がある場合は、新しい予算を開始するのではなく、同じ実行予算に対してカウントすること。
30行のBudgetedRunner
このPythonランナーはClaudeツールループを駆動し、ドル上限またはステップ上限に達すると停止します。同じ構造はOpenAIでもresponses.createとusage.input_tokens_details.cached_tokensで動作します。
from anthropic import Anthropic
PRICES = {"claude-sonnet-5": (2.0, 2.5, 0.2, 10.0)} # $/1M: input, cache write, cache read, output
class BudgetedRunner:
def __init__(self, model, system, tools, budget_usd, max_steps=25):
self.client, self.model, self.system, self.tools = Anthropic(), model, system, tools
self.budget, self.max_steps, self.spent = budget_usd, max_steps, 0.0
def cost(self, u):
i, w, r, o = PRICES[self.model]
return (u.input_tokens * i + (u.cache_creation_input_tokens or 0) * w
+ (u.cache_read_input_tokens or 0) * r + u.output_tokens * o) / 1e6
def run(self, messages, execute_tool):
for step in range(1, self.max_steps + 1):
resp = self.client.messages.create(model=self.model, max_tokens=1024,
system=self.system, tools=self.tools, messages=messages)
self.spent += self.cost(resp.usage) # e.g. 24,300 in × $2 + 300 out × $10 = $0.052
if self.spent > self.budget:
raise RuntimeError(f"budget ${self.budget} exceeded at step {step}: ${self.spent:.3f}")
messages.append({"role": "assistant", "content": resp.content})
if resp.stop_reason != "tool_use":
return resp, self.spent
results = [{"type": "tool_result", "tool_use_id": b.id,
"content": execute_tool(b.name, b.input)}
for b in resp.content if b.type == "tool_use"]
messages.append({"role": "user", "content": results})
raise RuntimeError(f"step cap {self.max_steps} hit after ${self.spent:.3f}")budget_usdはトレースから設定します。成功した実行の中央値の3倍が妥当な出発点です。Sonnet 5のリファレンス実行では約$1.20で、200ステップのループではステップ24でこの金額に達し、コンソールが気付くまでに約$73かかります。
請求が届く前にアラートを出す方法
予算は1回の実行を止めます。アラートは、実行が予算を必要とし始めたことを知らせます。
- コストは呼び出しごとではなく、実行ごとに、モデル、ステップ数、停止理由とともに記録する
- すべての実行をトリガーした機能や顧客でタグ付けし、スパイクの責任者を明確にする
- 実行ごとのp99コストと、ステップ上限または予算に達した実行の割合にアラートを設定する。両方が同時に上昇する場合、それは繁忙日ではなく、新たな障害モードを示す
- ベンダーの使用状況レポートと毎週調整する。トークンを過小カウントするランナーのバグ自体が暴走の原因になるからだ
OpenRouterを経由する場合、キーごとのクレジット制限により、ベンダーに依存しない2つ目の上限が得られます。トレードオフについては、[OpenRouter vs direct API](/compare/openrouter-vs-direct-api)を参照してください。
これを実行できる最安のモデルと、フラッグシップに課金するタイミング
ガードレールは損害を制限し、モデルの選択が傾きを決めます。適切に指定されたループでは、DeepSeek V4.1 Flash($0.30 / $1.20)は200ステップの災害を$11の迷惑に変え、Gemini 3.8 Flash($0.75 / $3.75)は$28にします。私たちの経験では、両方ともタスクが明確な場合の構造化ツールコールで信頼性が高く、[Gemini agent API cost](/guides/gemini-agent-api-cost)の記事でGemini側をカバーしています。
タスクがあいまいだったりループが長い場合は、Claude Sonnet 5、GPT-5.4、またはフラッグシップモデルにお金を払ってください。なぜなら、それらの実行では安価なモデルが迷いやすく、その迷いが上の表の価格に反映されているからです。どれを選んでも、上記のランナーは変更なしで動作します。異なるのはPRICES行だけです。独自のトレースを[calculator](/calculator)で価格設定し、ベンダーごとの使用状況フィールドについては[Claude agent API cost](/guides/claude-agent-api-cost)を参照してください。
重要なポイント
- →200ステップのループは36.7M入力トークン:Claude Sonnet 5で$74、GPT-5.4で$93、Opus 5とGPT-5.5で$185、Gemini 3.8 Flashで$28、DeepSeek V4.1 Flashで$11
- →これは正常な12ステップの実行のコストの約190倍で、ステップ数は17倍です。コストはステップ数に対して2乗で増加します
- →5つのガードレール:呼び出しごとのmax_tokens、実行ごとの最大ステップ数、明示的な停止条件、使用状況に基づく実行ごとのUSD予算、ベンダーコンソールでの1日あたりの上限
- →ステップ100での再試行では約183Kトークンが再送されます。Sonnet 5ではキャッシュなしで1試行あたり$0.37、キャッシュありで約$0.04
- →プロンプトキャッシングにより、Sonnet 5での200ステップの災害は約$8.78に削減されますが、それでも正常な実行の22倍です
- →実行ごとのコストを記録し、機能ごとに実行をタグ付けします。p99が跳ね上がるのが最初の警告です
編集コンテキスト
これは誰向けですか?
本番環境でツール呼び出しエージェントを実行している開発者およびプラットフォームチーム向け。実行に問題が発生した場合でも機能する支出上限が必要な場合。
これを使用すべきでない場合
人間がすべてのステップを監視している一回限りのスクリプトやノートブックでは、ガードレールは依然として役立ちますが、実行ごとの予算は過剰です。
料金インサイト
同じエージェントがClaude Sonnet 5上で12ステップで$0.39、200ステップで$74かかります。これは、各ステップで増大するコンテキストを再送信するためです。
検討すべき代替案
ベンダー側のワークスペース制限、OpenRouterのキーごとのクレジット制限、およびより安価なループモデルはいずれもリスクを軽減しますが、実行ごとの予算に代わるものはありません。
最終的な結論
エージェントをユーザーに公開する前に、すべての実行にドル上限を設定してください。たった30行のコードで、$0.39の実行と$74の実行の違いを生みます。
よくある質問
AIエージェントの支出を制限するにはどうすればよいですか?
5つの制御を一緒に使用します:すべての呼び出しでのmax_tokens、実行ごとの最大ステップ数、モデルがトリガーできる明示的な停止条件、各レスポンスの使用状況オブジェクトから計算される実行ごとのドル予算、ベンダーコンソールでの日次または月次の上限。実行ごとの予算が実際に損害を追跡します。エージェントのコストはステップ数の2乗に比例して増加するためです。
暴走エージェントループのコストはいくらですか?
4,500トークンの開始コンテキストが1ステップあたり1,800トークン増加する200ステップのループは、約36.7百万入力トークンを読み取ります。ピークレートで、Claude Sonnet 5で約$74、GPT-5.4で約$93、Claude Opus 5またはGPT-5.5で約$185、Gemini 3.8 Flashで約$28、DeepSeek V4.1 Flashで約$11です。同じエージェントの健全な12ステップ実行はSonnet 5で約$0.39です。
APIレスポンスから実行ごとのコストを計算するにはどうすればよいですか?
すべてのレスポンスには usage オブジェクトが含まれます。Anthropic では input_tokens、cache_creation_input_tokens、cache_read_input_tokens、output_tokens を100万トークンあたりのレートで乗算します。OpenAI では input_tokens、input_tokens_details.cached_tokens、output_tokens を使用します。Gemini では usage_metadata を使用します。ループ全体で合計し、上限を超えたら中止します。
リトライには費用がかかりますか?
レート制限エラーで拒否されたリクエストは通常課金されませんが、モデルが生成を開始した後にタイムアウトしたリクエストは通常課金されます。また、アプリケーションレベルのリトライではステップ全体を再送信し、コンテキスト全体が再送されます。参照ループのステップ100では約183,000トークンで、キャッシュなしのClaude Sonnet 5では1回の試行あたり約$0.37です。SDKのリトライ回数を意図的に設定し、別のリトライループでラップしないでください。
ベンダーコンソールでハードな支出制限を設定できますか?
はい、ただし違いがあります。Anthropic と OpenAI はどちらもワークスペースまたはプロジェクトごとにアラートしきい値付きの支出制限を設定でき、ハードリミットに達するとリクエストは失敗します。Google Cloud の予算はデフォルトでアラートを送信し、支出を停止するには追加の設定が必要です。コンソールの上限は最後の防御線として扱ってください。最初ではありません。なぜなら、それはすべての実行を停止するものであり、問題のある実行だけを停止するものではないからです。
プロンプトキャッシュは暴走ループから保護してくれますか?
それらを緩和します。キャッシュ読み取りがリストの約10%の場合、200ステップのClaude Sonnet 5ループは約$74から約$8.78に低下します。それでも正常な実行の22倍なので、キャッシングはコスト最適化であり、ガードレールではありません。ステップ上限とドル予算は引き続き維持してください。
Related
無料コース · サインアップ不要
まだ決められない?まず基本を学んでから、価格に戻ってきてください。