バックエンドやAIアプリケーション開発をしている同業者なら、おそらくこんな瞬間を経験したことがあるだろう。月末にクラウドの請求書を開くと、大規模モデルAPIの支出が予算の3倍になっている。攻撃を受けたわけでも、ビジネスが急増したわけでもなく、オンラインの対話サービスが静かに金を燃やし尽くしているだけだ。この記事ではエンジニアリングの視点から、金がどこで漏れているのか、そして技術的手段でどう塞ぐかを分解して説明する。
落とし穴1:コンテキストウィンドウの無制限な膨張
マルチターン対話で最も見落とされがちなコスト源は、履歴メッセージの全量送り返しだ。カスタマーサポートのシナリオを仮定すると、1ターンあたり平均800トークンのコンテキストで、ユーザーが20ターン目まで話すと、1回のリクエストの入力は16000トークン近くになる。GPT-4oの入力$2.5/1Mトークンで計算すると、1回のリクエストの入力コストは約$0.04、1日5万回の呼び出しなら$2000になる。本当に致命的なのは、この16000トークンのうち70%が3ターン前には無関係な雑談かもしれないということだ。
最適化の考え方はスライディングウィンドウ+要約圧縮だ。直近Nターンの原文を保持し、それより前の対話は軽量モデルで200トークン以内の要約に圧縮する。我々のプロジェクトではウィンドウを「全量」から「直近6ターン+要約」に変更し、1回の入力トークンが12000から3500程度に減り、入力コストを直接7割削減した。注意すべきは、要約自体も安いモデルを通すべきで、フラッグシップモデルで要約するのは節約にならないということだ。
落とし穴2:フラッグシップモデルに雑用をさせる
これは最も普遍的で、最も勿体ない浪費だ。意図分類、感情判断、コンテンツ要約、フォーマット変換、これらのタスクはDeepSeek-V3やQwen-Maxで95%以上の精度を達成できるが、多くのチームは手間を省くために、すべてClaude 4 SonnetやGPT-4oを通している。価格差はどれほどか?フラッグシップモデルの入力単価は、軽量モデルの10倍から20倍になることが多い。
モデルの階層型呼び出しの核心はルーティングだ。タスクが入ってきたら自動的に複雑度を判断し、分類は軽量モデルを通し、複雑な推論だけフラッグシップに上げる。SiCore TokenWorksはタスクごとに最適なモデルを自動選択でき、我々のプロジェクトで使ったところ、分類タスクを軽量モデルに切り替えた後、コストが明確に下がった。この種のAI APIアグリゲーションプラットフォームの価値は、モデルごとに個別にSDKとKeyを維持する必要がなく、1つのOpenAI互換インターフェースで切り替えられることにある。以下は最小変更の例だ:
from openai import OpenAI
client = OpenAI(
api_key="your-token8341-key",
base_url="https://api.token8341.com/v1" # 1行変更するだけで、OpenAI SDKと互換
)
# 軽量タスクは安いモデルを通す
resp = client.chat.completions.create(
model="deepseek-v3",
messages=[{"role": "user", "content": "このコメントの感情を判断してください:物流は速いが梱包が破損していた"}],
max_tokens=16
)
print(resp.choices[0].message.content)ルーティング戦略はまずルールで始めればよい。タスクタイプにタグを付け、分類/要約/抽出は軽量を通し、コード生成/複雑な推論はフラッグシップを通す。しばらく運用した後に各モデルの実際のヒット率を統計してから調整し、最初から複雑なセマンティックルーティングを導入してはいけない。維持コストが節約できる金額より高くつく。
落とし穴3:リトライ機構の制御不能
タイムアウトリトライは隠れた増幅器だ。多くのSDKはデフォルトで2~3回リトライし、タイムアウト閾値が短すぎる場合(例えば10秒)、実際のP99レイテンシが25秒だと、大量のリクエストがタイムアウト後にリトライされ、1回の呼び出しが3回になる。さらに悪いことに、リトライリクエスト自体も並行数を占め、レート制限を引き起こす可能性があり、レート制限がまたリトライを引き起こし、雪崩を形成する。
我々は一度やらかした。あるインターフェースのP99レイテンシが28秒、タイムアウトを15秒に設定、リトライ3回で、実際の呼び出し量はビジネス量の2.4倍だった。その後、タイムアウト閾値をP99から30%上乗せして設定し、リトライを指数バックオフかつ最大1回に変更したところ、呼び出し量は1.1倍に落ち着いた。またリトライはエラータイプを区別すべきで、429と5xxのみリトライし、400のパラメータエラーは1万回リトライしても無駄だ。
落とし穴4:使用量の集約とアラートの欠如
これは最も根本的な問題だ。多くのチームはプロジェクト単位やKey単位で大まかに統計しているが、具体的にどの機能、どのユーザー、どのPromptが金を燃やしているのか分かっていない。請求書が出てから、あるテスト環境のKeyが閉じられていなかった、あるいはあるユーザーの超長セッションが予算を食い尽くしたと気づく。
やり方は次元ごとにタグを付けることだ。各呼び出しにteam、feature、user_idの3つのタグを付け、ログや時系列データベースに落とす。AI APIゲートウェイを統一エントリにする利点はここにある。すべての呼び出しが1層のプロキシを通り、タグと使用量の集約がゲートウェイ側で完了し、各ビジネス側のコードを変更する必要がない。アラート閾値は2段階を推奨する。日次使用量が予算の60%で警告、85%で降級(例えば非コア機能を自動的に軽量モデルに切り替える)をトリガーする。
コスト比較と選定の参考
上記4点を実装した後、我々は3つの接続方式を比較した。公式直結の単一モデル、自社構築ルーティング、アグリゲーションプラットフォームだ。公式直結は最も手軽だがモデル階層化ができず、コストは固定的だ。自社構築ルーティングは柔軟だが複数のKey、複数のSDK、複数の課金ロジックを維持する必要があり、2人月はかかる。アグリゲーションプラットフォームはモデル切り替えと使用量集約に既成の能力があり、従量課金でコストがより優れている。選定時は3点に注目すべきだ。OpenAI SDKと互換か(移行コスト)、国産モデルの全面カバレッジをサポートするか(コンプライアンスとコスト)、使用量集約インターフェースがあるか(可観測性)。
コスト最適化は一度きりのものではなく、継続的な観測と調整のプロセスだ。まず使用量集約を立ち上げ、金がどこに使われているかを明確に見てから、コンテキスト、モデル階層化、リトライ戦略を項目ごとに最適化する。順序を逆にしてはいけない。そうでなければ、長い時間をかけて最適化しても、それは大元ではないかもしれない。
著者:陳景行
公開日:2026年10月3日