💳

AIエージェントを業務に入れると、最初は「どのモデルが安いか」「どのプランを買うか」に目が行きます。けれど、現場で困るのは請求書の比較ではありません。調査 agent が巨大な context を何度も読み直す。review automation が同じ PR を何回も見に行く。subagent を増やしたら token と外部 API call が一緒に増える。MCP 経由の検索や SaaS 操作まで混ざる。こうなると、月末に初めて気付く予算管理では遅いです。

この記事では、AIエージェントの 予算ガードレール設計 を扱います。ツールごとの料金比較は AIコーディングツール料金比較 2026、稼働中の異常検知は AIエージェント本番監視設計ガイド、通常運用中の pause / cancel は AIエージェント run control 設計ガイド、承認フローは AIエージェント承認フロー設計ガイド に分けています。

今回の論点は、run を開始する前に予算単位を決め、実行中に超過しそうなら縮退・承認・停止へ分岐させることです。

先に結論: budget は月額ではなく run に持たせる

AIエージェントの費用を「月額いくらまで」にだけ寄せると、運用では使いにくいです。月額上限は経理上は必要ですが、agent が今まさに暴走しているかは分かりません。

私なら、まず次の4層で予算を分けます。

目的
workspace budget組織全体の支出上限と通知月額利用、credit、workspace spend
lane budget用途ごとの配分PR review、SEO automation、support triage
run budget1回の作業で使ってよい上限token、tool call、runtime、外部API費用
step budget高コスト操作の局所制限deep research、subagent fan-out、MCP search

大事なのは、workspace budget を最後の防波堤にしないことです。OpenAI の API project budget は利用状況の監視と通知に使えますが、project budget 自体は hard cap ではありません。Claude Code も token usage、team spend limit、usage breakdown を見られますが、それだけで「この run を続けてよいか」は決まりません。

つまり、請求側の budget と、agent runtime 側の budget gate は別物です。

既存テーマとの役割分担

このクラスタでは cost を少しずつ扱っています。予算ガードレールの境界を先に切ります。

近いテーマ扱うこと予算ガードレールで扱うこと
料金比較どのツール・プランを選ぶか選んだ後に run 単位でどう使いすぎを止めるか
本番監視cost spike を検知するspike 前に budget を割り当て、超過時の分岐を決める
run controlpause / resume / cancel の状態cost 超過をどの状態遷移に落とすか
retry 設計失敗後に安全にやり直すretry ごとに追加予算を自動で積まない
承認フローsensitive tool call を止める高額操作や外部課金操作を承認へ戻す

予算ガードレールは「節約術」ではありません。節約だけを目的にすると、必要な調査まで止めて品質が落ちます。目的は、どの仕事にいくら使う価値があるかを実行前に明示し、途中で前提が崩れたら人間へ戻すことです。

最小の budget packet を作る

run を開始するとき、私は context packet とは別に budget packet を渡します。

budget_packet:
  budget_id: "budget-seo-blog-20260709"
  lane: "content_publish"
  owner: "content-ops"
  currency: "usd"
  max_estimated_cost: 8.00
  max_total_tokens: 350000
  max_runtime_minutes: 90
  max_tool_calls:
    web_search: 20
    github_read: 50
    github_write: 3
    mcp_external: 10
  model_policy:
    default: "standard"
    escalation_requires_approval: true
  stop_conditions:
    - "estimated_cost >= 0.8 * max_estimated_cost"
    - "same_tool_same_target_failed >= 3"
    - "subagent_count > 3"
    - "external_write_without_approval"

ここで max_estimated_cost だけを入れても弱いです。token、tool call、runtime、external write を分けておかないと、どこで増えているか分かりません。

実務では、金額が正確でなくても構いません。最初は概算でよいです。重要なのは、run の途中で「残り予算が少ないので、深掘りを続けるか、人間に判断を戻すか」を決められることです。

token budget は input / output / cached を分ける

token cost は、単純な総 token 数だけでは見誤ります。Codex の rate card は input tokens、cached input tokens、output tokens を分けて credit 消費を示しています。OpenAI Agents SDK も run ごとの usage と per-request usage を取れるので、どの request が膨らんだかを追えます。

最低限、次のように分けます。

{
  "agent_run_id": "agent-20260709-budget-001",
  "usage": {
    "requests": 8,
    "input_tokens": 184000,
    "cached_input_tokens": 92000,
    "output_tokens": 21000,
    "reasoning_tokens": 6000,
    "estimated_cost_usd": 3.42
  }
}

見るべき判断は3つです。

  • input が増えている: context が太い、同じ資料を読み直している
  • output が増えている: 要約粒度が粗い、途中成果物を長く書きすぎている
  • request が増えている: retry、handoff、subagent、tool loop が増えている

OpenTelemetry GenAI semantic conventions でも input / output / cache read / reasoning などの token usage を扱う方向が示されています。vendor 固有の dashboard だけに閉じず、自社の agent_run_id と合わせて保存しておくと、後から lane 別の予算判断に使えます。

tool budget は「回数」ではなく「種類」で切る

tool call は回数だけで制限すると失敗します。Read を100回呼ぶのと、外部 SaaS に1回書き込むのでは意味が違います。

私は tool budget を次の tier で切ります。

tier既定動作
inspectfile read、search、status 確認広めに許可
computebuild、test、local script回数と runtime を制限
retrieveweb search、MCP search、社内 docs 検索source と回数を制限
draftPR body、issue draft、patch proposal許可
writePR作成、comment 投稿、DB update承認 or 小さい上限
paid_external有料API、長時間 browser、heavy crawl事前承認

この分類は AIエージェント tool risk tier 設計ガイド とつながります。risk tier は危険度を扱いますが、budget tier は消費量と課金面を扱います。同じ tool でも、read は低リスク・低コスト、bulk search は低リスク・高コスト、write は高リスク・低回数のように分かれます。

rate limit と budget limit を混ぜない

rate limit は「短時間にどれだけ呼べるか」です。budget limit は「この仕事にどれだけ使う価値があるか」です。

OpenAI の rate limit docs では、分あたりの上限内でも短い時間単位へ量子化され、burst や長すぎる context で rate limit error が出ることがあります。つまり、rate limit error は「予算を使い切った」ではありません。

混ぜると、次のような事故が起きます。

事象誤った解釈正しい分岐
429 が出た予算超過だから停止backoff、batch 分割、max tokens 縮小
月額 alert が来たいまの run が悪いlane 別 usage を見て原因を切る
1 run の cost が急増rate limit を上げるcontext / retry / subagent / tool loop を調べる
外部 API が高いmodel を安くするpaid external tool を承認制にする

rate limit は可用性の制御、budget は意思決定の制御です。両方必要ですが、同じ dashboard に置くだけでは不十分です。

cost overrun は状態遷移に落とす

予算超過を検知したら、単に「高いです」と通知するだけでは弱いです。run state に落とします。

budget_event:
  agent_run_id: "agent-20260709-budget-001"
  event: "budget_threshold_reached"
  threshold: 0.8
  estimated_cost_usd: 6.52
  remaining_budget_usd: 1.48
  recommended_transition: "waiting_approval"
  options:
    - id: "continue_with_same_budget"
      risk: "may stop before final verification"
    - id: "increase_budget_to_12_usd"
      risk: "requires owner approval"
    - id: "summarize_and_stop"
      risk: "deliver partial result"

私は、しきい値を3段階にします。

しきい値動作目的
50%log のみ早めに傾向を見る
80%summary を作って続行判断残りで終えられるか見る
100%auto stop or approval無制限続行を防ぐ

重要なのは、80% の時点で要約を作らせることです。100% で止めるだけだと、途中まで何を見たのか分からないまま終わります。80% で findings_so_farremaining_questionscost_driver を出させると、人間が追加予算を出す価値を判断できます。

retry に新しい予算を自動で渡さない

AIエージェントのコスト事故は、単発の高額 run より retry で起きやすいです。

1回目: test failure
2回目: 別の修正を試す
3回目: さらに依存を調べる
4回目: web search を広げる
5回目: subagent に調査を投げる

それぞれは妥当に見えても、合計では最初の依頼価値を超えます。

retry packet には、前回予算の消費量を必ず入れます。

retry_budget:
  previous_run_cost_usd: 4.80
  previous_token_total: 260000
  retry_budget_usd: 2.00
  allow_new_research: false
  allow_same_tool_retry: 1
  require_human_if:
    - "new_dependency_needed"
    - "external_write_needed"
    - "third_failure_on_same_target"

詳しい retry state は AIエージェント再実行設計ガイド に分けています。予算ガードレール側では、retry を「新しい作業」ではなく「残り価値の中でやる再挑戦」として扱うのがポイントです。

私が最初に入れる実装順

最初から複雑な FinOps dashboard を作る必要はありません。私は次の順で入れます。

  1. lane ごとに max_cost_per_runmax_runtime_minutes を決める
  2. run ごとに agent_run_idbudget_id を持たせる
  3. token usage、tool call count、runtime を1つの log に集める
  4. 80% 到達時に findings_so_far を出させる
  5. paid external / write / subagent fan-out を承認制にする
  6. retry packet に前回 cost と追加予算を入れる
  7. 2週間ごとに lane budget を見直す

この順なら、最初の実装は小さいです。OpenAI Agents SDK を使っているなら run usage を取り、Codex や Claude Code の場合は usage panel / /usage / trace / automation log を集めるところからで十分です。

よくある失敗

1. 月額上限だけで安心する

月額 budget alert は必要ですが、run を止める設計ではありません。通知が来た時点で、どの lane、どの run、どの tool が原因かを追えないなら、運用としては遅いです。

2. 安いモデルへ寄せるだけで解決しようとする

安いモデルに変えても、context が太い、retry が多い、subagent が増えすぎる、外部 API が高い、という問題は残ります。モデル選択は最後ではありませんが、最初の唯一のレバーでもありません。

3. subagent を無料の並列化として扱う

subagent や agent team は、別 context を持つ別 run に近いです。調査を並列化すると速く見えますが、context window と要約コストは増えます。並列数はレビュー能力だけでなく、budget packet にも入れるべきです。

4. 予算超過を失敗扱いにしない

成果物が出たから成功、では危険です。予算を2倍使ったなら、output contract に budget_overrun を残します。成功扱いにすると、次回も同じコストで走ります。

まとめ

AIエージェントの予算管理は、請求書を見る作業ではありません。run を始める前に、token、tool、runtime、外部API、retry、subagent の上限を決める運用設計です。

私なら、最初から大きな管理基盤は作りません。budget_packet を1枚足し、usage を agent_run_id に寄せ、80% 到達時に要約して止まれるようにする。ここまで入れるだけで、AIエージェントは「動いたら終わり」ではなく「価値に対して使いすぎていないか」を判断できる運用対象になります。

参考資料

WRITTEN BY nidoneko

Full-stack engineer with 8+ years of experience in TypeScript, React, Node.js, and cloud-native development across healthcare, finance, HR, and IoT domains.

View Profile →