LLMアプリの立ち上げで最も議論が荒れるのは、機能ではなく予算です。「月額でどれくらいかかりますか」と聞かれて即答できるエンジニアは多くありません。本記事ではDAU × 1人あたりリクエスト数 × 平均トークン数 × トークン単価という基本式をベースに、コスト試算フレームワーク、シナリオ別シミュレーション、予算超過を防ぐ監視設計までを実装付きで解説します。最後まで読めば、経営層への予算報告で堂々と数字を出せるようになります。
LLMアプリのコスト予測が難しい理由
LLMアプリのコスト予測が難しい理由は、大きく3つあります。第一に従量課金の世界だからです。従来のSaaSが月額固定だったのに対し、LLMはトークン単位の従量課金で、利用量が読めないとコストも読めません。第二にトークン数の見積もりが直感に反することです。日本語は英語よりトークン数が増えやすく、同じ文字数でも単価換算が1.5〜2倍違うケースがあります。第三に利用量の変動です。ユーザーのエンゲージメントが上がると利用量が跳ね上がり、コストも比例します。
加えて、初期設計の段階では「プロンプトが長くなる」「リトライが増える」「ツール呼び出しが連鎖する」といった、現実にしか分からないコスト増要因が見積もりに入りません。このため、初期は見積もりの1.5〜2倍の予算をバッファとして確保するのが実務的な安全策です。
コスト試算のフレームワーク
コスト試算の基本は、変数を分解して掛け合わせることです。下表の変数をそれぞれ見積もり、積算します。
| 変数 | 定義 | 見積もり方法 | 注意点 |
|---|---|---|---|
| DAU(日次アクティブユーザー) | 1日に利用するユニークユーザー数 | 類似サービスのKPIから推定 | 急成長時の過小見積に注意 |
| リクエスト数/ユーザー/日 | 1ユーザーが1日に投げるリクエスト数 | ユーザーリサーチ、ベータ計測 | ヘビーユーザーとの乖離 |
| 平均入力トークン数 | 1リクエストあたりのプロンプト長 | テストケースの計測 | RAGコンテキストを含めると急増 |
| 平均出力トークン数 | 1リクエストあたりの応答長 | ベータでの実測 | max_tokens設定で上限 |
| モデル単価 | 入力/出力の1Mトークン単価 | ベンダー価格表 | 価格改定の履歴を把握 |
| リトライ率 | エラー・検証失敗で再実行される割合 | オブザーバビリティで計測 | 初期は2〜5%が典型 |
| ツール呼び出し係数 | エージェントでのLLM呼び出しの連鎖数 | 実運用から逆算 | 数倍〜数十倍に膨らむ |
これらを元にしたコスト試算スクリプトの例です。
from dataclasses import dataclass
@dataclass
class ModelPrice:
name: str
input_per_1m: float # USD per 1M input tokens
output_per_1m: float # USD per 1M output tokens
PRICES = {
"gpt-4o": ModelPrice("gpt-4o", 2.50, 10.00),
"gpt-4o-mini": ModelPrice("gpt-4o-mini", 0.15, 0.60),
"claude-3-5-sonnet": ModelPrice("claude-3-5-sonnet", 3.00, 15.00),
}
def monthly_cost(dau: int, req_per_user: int, input_tokens: int, output_tokens: int,
model: str, retry_rate: float = 0.03, days: int = 30) -> float:
p = PRICES[model]
requests_per_month = dau * req_per_user * days * (1 + retry_rate)
input_cost = requests_per_month * input_tokens / 1_000_000 * p.input_per_1m
output_cost = requests_per_month * output_tokens / 1_000_000 * p.output_per_1m
return input_cost + output_cost
cost = monthly_cost(dau=1000, req_per_user=5, input_tokens=800, output_tokens=300, model="gpt-4o-mini")
print(f"月額コスト: ${cost:,.2f}")
シナリオ別コストシミュレーション
典型的なLLMアプリのシナリオごとに、月額コストの目安を試算します。いずれも2026年初頭のGPT-4o系の価格を前提としています。
| シナリオ | DAU | リクエスト/日 | 平均I/Oトークン | モデル | 月額コスト(USD) |
|---|---|---|---|---|---|
| 社内FAQボット | 500 | 3 | 600 / 200 | gpt-4o-mini | 約$12 |
| 社内RAGチャット | 1,000 | 5 | 3,000 / 500 | gpt-4o | 約$1,350 |
| 顧客向けサポートbot | 5,000 | 4 | 1,500 / 400 | gpt-4o-mini | 約$270 |
| 文書分析バッチ | – | 10万件/日 | 2,500 / 400 | gpt-4o-mini | 約$1,800 |
| AIエージェント(5ステップ) | 200 | 2 | 3,000 / 600(×5) | gpt-4o | 約$1,620 |
| コード生成アシスタント | 300 | 20 | 2,000 / 800 | gpt-4o | 約$5,220 |
この表を見ると、AIエージェントやコード生成系はコストが跳ね上がりやすいことが分かります。特にエージェントは「1ユーザーリクエストあたりのLLM呼び出し数」が設計次第で5〜20倍になるため、見積もり時に内部ステップ数を必ず含めてください。
コスト監視とアラート設計
事前試算も大事ですが、本番運用ではリアルタイムの監視がより重要です。LLMのコストは急に跳ね上がることがあります――RAGのインデックスに巨大文書が入り、1リクエストで数十万トークンを消費するといった事故は実際に起きます。
import datetime
from collections import defaultdict
daily_cost = defaultdict(float)
DAILY_BUDGET_USD = 100.0
def log_request(model: str, input_tokens: int, output_tokens: int):
p = PRICES[model]
cost = (input_tokens * p.input_per_1m + output_tokens * p.output_per_1m) / 1_000_000
today = datetime.date.today().isoformat()
daily_cost[today] += cost
if daily_cost[today] > DAILY_BUDGET_USD:
send_alert(f"日次予算${DAILY_BUDGET_USD}超過: 現在${daily_cost[today]:.2f}")
return cost
def send_alert(msg: str):
# Slack Webhook等で通知
print(f"ALERT: {msg}")
実運用では、日予算の80%到達で警告、100%で自動スロットリング、150%で自動停止、といった段階的な制御を実装することが多いです。特に「自動停止」の閾値は、ビジネスと協議して事前に合意しておくことが重要です。
予算超過を防ぐ5つの施策
- レートリミット――ユーザーごと・APIキーごとに、時間あたりのリクエスト数を制限します。乱用や想定外のバースト利用を防げます
- モデルルーティング――簡単な質問は軽量モデル、複雑な質問は高性能モデルに振り分けるLLMゲートウェイを導入します。平均コストが50〜80%下がるケースもあります
- キャッシュの積極活用――セマンティックキャッシュとプロンプトキャッシュを併用し、繰り返しクエリのコストをゼロ近くにします
- 出力トークン上限――max_tokensで出力長を制限します。タスクに合った適切な上限を設定するだけで、無駄な冗長出力を抑えられます
- バッチAPIの活用――リアルタイム不要なタスクはバッチAPIに回し、50%程度の割引を受けます。特に文書分析バッチには必須です
まとめ
LLMアプリのコスト管理は「試算で備え、監視で守り、施策で攻める」の三段構えです。見積もりの精度は経験で上がるため、最初は保守的な見積もりと十分なバッファを置いてスタートすることをおすすめします。関連記事としてトークンとは、LLMコスト構造、推論コスト削減、LLMオブザーバビリティもあわせてご参照ください。
よくある質問(FAQ)
Q1. LLMアプリの月額コストはどう見積もりますか?
A. 「DAU × 1人あたりリクエスト数 × 平均トークン数 × トークン単価」で基本コストを算出し、インフラ費用とサポートコストを加算します。初期は見積もりの1.5〜2倍の予算を確保することを推奨します。特にエージェント系はLLM呼び出しが連鎖するため、内部ステップ数も試算に含めてください。
Q2. コストが予算を超えないようにするには?
A. レートリミットの設定、コスト上限アラートの導入、モデルルーティング(軽量モデルの活用)、キャッシュの導入、出力トークン数の制限の5つが効果的な施策です。これらは単独で効きますが、組み合わせると相乗効果でコストを大幅に削減できます。
Q3. LLMアプリのコストは今後下がりますか?
A. はい、トークン単価は年々低下傾向にあります。GPT-4のリリース時と比較して、同等性能のモデルの料金は1年で50〜80%低下しています。ただし、利用量の増加がコスト削減を相殺する場合もあるため、継続的な監視が必要です。料金改定のたびに試算モデルを更新する運用を推奨します。