3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜAIは高くつくのか、コストの無駄はどこで生まれるのか

3
Posted at

LLMを開発や業務に導入すると、「思ったより費用がかかる」と感じることがあります。しかし、請求額を押し上げているのは、モデルの単価だけではありません。長いコンテキスト、冗長な出力、増え続けるターンなど、使い方による影響のほうが大きい場合があります。

本記事では、AIコストが増える仕組みと、無駄を減らす順番を整理します。例には Claude API、Claude Code、Claude Agent SDK を使います。料金は2026年9月時点の公式情報に基づいています。

1. TLDR: 単価ではなく「成功1件あたり」で考える

最初に、要点を3つにまとめます。

  1. LLMには限界費用がある。 呼び出すたびに、入力・出力トークンに応じた料金が発生します。
  2. 請求額は、単価・トークン量・呼び出し回数の積で決まる。 エージェントでは、とくにトークン量とターン数が増えやすくなります。
  3. 管理すべき指標は、請求総額ではなく成功1件あたりのコストである。 安いモデルでも失敗と再実行が増えれば、結果として高くつきます。

AIコストを下げるには、まずこの3つの要因を分けて測る必要があります。

2. なぜエージェントは高くなるのか

2.1 コストを決める3つの要因

1リクエストの基本的なコストは、次の式で表せます。

コスト = 入力トークン × 入力単価 + 出力トークン × 出力単価

入力には、システムプロンプト、ツール定義、会話履歴、ツールの実行結果が含まれます。出力には、回答だけでなく思考トークンも含まれます。

主要モデルの料金は次のとおりです。

モデル 入力($/MTok) 出力($/MTok) キャッシュ読み取り($/MTok)
Claude Fable 5.1 10 50 0.25
Claude Opus 5.5 4 20 0.20
Claude Sonnet 5 2 10 0.20
Claude Haiku 4.5 1 5 0.10

出力単価が入力単価の5倍である点は共通ですが、キャッシュ読み取りの割引率は一律ではありません。多くのモデルは入力単価の10%ですが、Opus 5.5は5%、Fable 5.1は2.5%です。またキャッシュへの書き込みには、入力単価の1.25倍(5分TTL)または2倍(1時間TTL)がかかります。キャッシュは常に安いのではなく、書き込んだ分を読み返して初めて元が取れます。

請求額が増えたら、次の順に原因を切り分けます。

要因 確認する指標 よくある原因 最初の対策
単価 モデル別の成功1件あたりのコスト 単純な処理にも最上位モデル 同じevalでモデルを比較する
トークン量 キャッシュ読み取り率、出力・思考トークン 長い履歴、冗長な回答 コンテキストと出力を短くする
呼び出し回数 ターン数、リトライ数、コストのp90/p99 曖昧な依頼、無制限のループ 終了条件と予算上限を設ける

2.2 ターンが増えると、入力はほぼ2乗で増える

エージェントは、ツールを呼び出すたびに、それまでの会話を再送します。コンテキストが毎ターン増える場合、総入力はおおよそ次の形になります。

総入力 ≈ N × 初期コンテキスト + 1ターンあたりの増分 × N² / 2

重要なのはN²です。ターン数が増えるほど、過去の履歴を繰り返し送るコストが急増します。

Sonnet 5で、コンテキストが20Kから120Kトークンまで増え、毎ターン1.5Kトークンを出力する40ターンの実行を試算すると、結果は次のようになります。総入力は約2.8Mトークン、総出力は60Kトークンです。

agent-loop-cost.png

図1:同じ40ターンでも、キャッシュの使い方によって約5.3倍の差が生じます。

キャッシュが有効なら$1.44ですが、キャッシュなしでは$6.20です。動的な値をプロンプトの先頭に置き、毎回キャッシュを無効にすると$7.60まで増えます。

キャッシュなしより「毎回破壊」のほうが高いのは、書き込み料金(入力単価の1.25倍)を毎ターン払いながら、一度も読み返せないためです。キャッシュは、設定しさえすれば安くなるものではありません。

2.3 トークン単価だけでは比較できない

安いモデルが、必ずしも安い結果を生むとは限りません。低価格のモデルで失敗が増えると、再実行と下流工程の手戻りが発生するためです。一方、高価なモデルでも、少ないターンで成功できれば、成功1件あたりでは安くなる場合があります。

モデルを比較するときは、同じタスクと同じ成功条件を使い、次の式で評価します。

成功1件あたりのコスト = すべての試行の費用 ÷ 成功数

平均だけでなく、難しいタスクや高額な実行も確認します。AIコストは、一部の長い実行に偏りやすいためです。

3. LLMの「7つのムダ」

トヨタ生産方式の「7つのムダ」をLLMに当てはめると、問題を見つけやすくなります。

ムダ LLMで起きること 例
作りすぎ 読まれない文章や不要な思考を生成する 過剰な説明、不要な自己検証
在庫 使わない情報をコンテキストに残す 長い履歴、全ツール定義、巨大な指示ファイル
運搬 同じ内容を何度も送る キャッシュ未使用、動的な接頭辞
加工のしすぎ 必要以上に高性能なモデルを使う yes/noの判定に最上位モデル
動作 不要な探索やツール呼び出しを行う 曖昧な依頼、目的のない調査
手待ち 即時性が不要な処理を同期実行する evalや夜間処理を通常APIで実行
不良 失敗した処理にも料金がかかる リトライ、途中終了、捨てられる成果物

とくに重要なのは「在庫」です。コンテキスト内の情報には、使われなくても毎ターン読み取り料金がかかります。参照されない情報は、費用だけを生む在庫です。

4. Claude Codeのコストを減らす

開発現場では、次の5点から見直します。

4.1 作業が変わったらセッションを分ける

Claude Codeは、リクエストごとに会話履歴を送信します。長いセッションでは、短い質問でも大きなコンテキストを再送することになります。

  • 別の作業へ移るときは/clearを使う
  • 履歴を引き継ぐときは/compactで残す情報を指定する
  • /compact自体にも要約コストがかかるため、継続性が不要なら/clearを選ぶ

4.2 モデルとeffortを作業に合わせる

多くのコーディング作業はSonnetで処理できます。Opusは、複雑な設計判断や長い推論が必要な作業に限定します。テスト実行や検索など、結果を検証しやすいサブエージェントにはHaikuが向きます。

effortも同様です。単純な修正や定型作業では下げ、長時間のコーディングなど、精度差が出る作業だけ上げます。

4.3 常駐する指示とツールを減らす

CLAUDE.mdはセッション開始時に読み込まれます。特定の作業にしか使わない指示はスキルへ移し、必要なときだけ読み込みます。CLAUDE.mdは200行以下が目安です。

MCPサーバーも同じです。現在のClaude Codeはツール定義を遅延読み込みするため、既定で常駐するのはツール名とサーバーの説明だけですが、サーバー数が増えればその分は積み上がります。/contextで内訳を確認し、使っていないサーバーは/mcpで無効にします。ghやawsのようにCLIで足りる操作は、MCPサーバーを追加するより常駐コストが小さく済みます。

4.4 ツールの出力を絞る

テストログやビルドログをそのまま渡す必要はありません。失敗したテスト名、エラー周辺、該当ファイルだけを抽出して返します。

大量のログ処理をサブエージェントに任せ、メインの会話には要約だけを戻す方法も有効です。詳細な出力がメインのコンテキストへ残るのを防げます。

ただし、サブエージェント自身のリクエストにも料金はかかります。減らせるのはメインの会話が毎ターン肥大化する分であり、処理そのものが無料になるわけではありません。単純な作業には小さなモデルを割り当てます。

4.5 利用状況をチームで測る

/usageでは、トークン使用量、キャッシュヒット率、キャッシュミスの原因を確認できます。組織全体ではOpenTelemetryを使い、利用者・機能・モデルごとのコストを可視化します。

自動実行には--max-budget-usdを指定し、1回の処理に支出上限を設けます。

5. API・Agent SDKのコストを減らす

対策は、効果が大きく実装しやすい順に進めます。

5.1 プロンプトキャッシュを有効にする

プロンプトキャッシュは、エージェントのコストに最も大きく影響する対策の一つです。公式ドキュメントのDeepResearch Bench IIでの計測では、1タスクあたりのコストがSonnet 5で$3.20から$1.20(約63%減)、Fable 5.1で$37.94から$7.12(約81%減)まで下がっています。

ただし、キャッシュはツール、システムプロンプト、メッセージの順に前方一致で判定されます。前半が変わると、それ以降も無効になります。

# NG:毎回変わる値を先頭に置く
system = f"現在時刻: {now}\nユーザーID: {user_id}\n" + LONG_INSTRUCTIONS

# OK:静的な接頭辞を固定してキャッシュし、動的な情報は最後のメッセージへ置く
system = [{
    "type": "text",
    "text": LONG_INSTRUCTIONS,
    "cache_control": {"type": "ephemeral"},
}]
messages = history + [{
    "role": "user",
    "content": f"現在時刻: {now}\nユーザーID: {user_id}\n{user_message}",
}]

公式ドキュメントによれば、実トラフィックのエージェントループは入力の中央値84%をキャッシュから読み取り、上位10%のハーネスでは94%以上に達します。本番では80%以上を目安にし、下回った場合は、ツール定義、システムプロンプト、effortなどが途中で変わっていないか確認します。effortは値がプロンプトに埋め込まれるため、途中で変えるとキャッシュが無効になります。

5.2 コンテキストと出力を短くする

コンテキストウィンドウが大きくても、すべてを入れる必要はありません。

  • ツール定義:必要なツールだけを遅延読み込みする
  • データ:CSVを貼り付けず、Files APIとコード実行を使う
  • 履歴:長い実行では古いツール結果を短い要約へ置き換える
  • 出力:必要な項目と上限を指定し、説明文を作りすぎない

出力は入力より単価が高く、その後のターンでは入力として再送されます。短い出力は、生成時と再送時の両方で効きます。

5.3 モデルより先にeffortを比較する

モデルを増やす前に、同じモデルでeffortを変えてevalします。公式ドキュメントの計測では、リサーチ系のベンチマークでlowは1〜3ポイントの低下と引き換えにコストが3分の1〜半分になり、mediumは既定と同等の精度を約70〜87%のコストで達成しました。一方、SWE-bench Proのような長時間のコーディングでは差が残り、xhighはhighより約1.4ポイント高い代わりにコストは2.5倍でした。効果の出方はタスク次第なので、自分のevalで測る必要があります。

結果を自動検証できるなら、最初はlowで実行し、失敗したタスクだけhighで再実行する方法も有効です。

モデルやプロンプトを変更するときは、古いモデル向けの「必ず二度検証する」「最大限詳しく考える」といった指示も見直します。こうした指示は、精度を上げずに思考と出力だけを増やすことがあります。

5.4 待てる処理はBatch APIへ回す

Batch APIは、入力・出力ともに50%割引です。夜間処理、eval、バックフィル、定期実行など、即時応答が不要な処理に向きます。プロンプトキャッシュとも併用できます。

5.5 定型的な判断では文章を生成しない

分類、ルーティング、スコアリングの答えがラベルやyes/noで済むなら、長い文章を生成する必要はありません。

生成モデルを使う場合も、ツール呼び出しや構造化出力で返却形式を制約します。判断専用モデルを使える場合は、大半を低コストで処理し、信頼度の低いケースだけLLMへ送ります。

1日10万件のチケットを30日間(月300万件)分類する試算では、構成によって月額に約100倍の差が生じます。1件あたりの入力は1,500トークン、出力は20トークンとし、キャッシュを使う行では入力のうち1,000トークンを共通の接頭辞、500トークンを変動部分としています。判断専用モデルの行は、Jevの公表単価(入力$0.042/MTok、出力は課金なし)による計算です。

構成 月額の目安
Opus 5.5、同期、キャッシュなし 約$19,200
Sonnet 5、接頭辞をキャッシュ 約$4,200
Haiku 4.5、キャッシュ+Batch 約$1,050
判断専用モデル(Jev) 約$190

classification-monthly-cost.png

図2:処理件数が同じでも、構成によって月額は約$19,200から約$190まで変わります。品質は同じevalで確認する必要があります。

5.6 1タスクと組織全体の両方に上限を設ける

エージェントのコストは、少数の長い実行に偏ります。そのため、平均値だけでなくp90・p99を監視します。

制御 目的
タスク予算 モデルに残り予算を意識させ、探索量を調整する
max_tokens 1応答の絶対上限を設ける
max_turns ツール使用ターンを制限する
max_budget_usd 1タスクの損失上限を設ける
ワークスペース支出上限 組織全体の支出を止める

max_tokensは安全上限であり、単独では成功1件あたりのコストを下げにくい点に注意してください。途中で切れた試行にも料金がかかるためです。

5.7 そもそもLLMを呼ぶ必要があるか確認する

呼び出し方を最適化するより、呼び出し自体を減らすほうが効果的な場合があります。

  • 閲覧のたびに生成せず、コンテンツの登録時に一度だけ生成して保存する
  • 判断方法が安定したら、通常のコードやルールへ置き換える
  • 利用されていないAI機能は、evalやモデル移行を含む維持費も見て廃止を判断する
  • ローカルLLMは、API費よりGPU・運用・品質差の総コストが低い場合に限って検討する

6. TokenOps:測ってから削る

AIコストは、機能単位で継続的に管理します。追うべき指標は次の5つです。

  1. 成功1件あたりのコスト
  2. キャッシュ読み取り率
  3. 出力・思考トークン数
  4. ターン数とコストのp90・p99
  5. 定義したツールのうち、実際に呼ばれた割合

最適化は、一度で終わる作業ではありません。本番に近いタスクでevalし、小さく切り替え、結果を監視します。

取り組む順番は、次のとおりです。

  1. 成功条件と成功1件あたりのコストを定義する
  2. キャッシュを有効にし、コンテキストと出力を削る
  3. 待てる処理をBatch APIへ移す
  4. 同じモデルでeffortを比較する
  5. 必要ならモデルを変更する
  6. 最後にマルチモデル構成を検討する

7. おわりに

AIが高くつくのは、モデルの単価だけが原因ではありません。限界費用を意識せずに、すべてを渡し、長く生成し、何度も試すことが請求額を押し上げます。

まず測るべき数字は、「キャッシュ読み取り率」と「成功1件あたりのコスト」です。この2つが分かれば、どの無駄から削るべきか判断できます。

参考資料

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?