cd ../back to blog
$Playbook//June 4, 2026//8 min read

AIコストを78%削減する5つの実践手法

プロンプトキャッシュ、モデルのティアリング、出力上限、並列化、賢いリトライ。実行可能なコードとともに、AI機能のコストを70〜80%削る方法を解説します。

財務ダッシュボードに並ぶ AI 機能のコスト行には、ちょっと やっかいな性質があります。トラフィックに対して非線形に膨らみ、しかも プロダクトが人気になるほど悪化していくのです。ここでは、実際に効果が あると当社が見てきた、最もレバレッジの高い 5 つの手法を、それぞれ 実行可能なコードとともに紹介します。

具体例で考えてみましょう。Claude Sonnet 4.6 上で平均 3K 入力 / 500 出力トークン、1 日 10 万回の呼び出しを処理するチャット プロダクトは、直接コストで月およそ $4,500 かかります。同じ負荷でも 下記の 5 手法を適用すれば、たいてい月 $900〜$1,200 あたりに 落ち着きます — 出力品質を実質的に損なうことなく、70〜80% の削減です。

1. プロンプトキャッシュ — 単独で最大のレバー

システムプロンプトやコンテキストブロックが約 2K トークンを超え、 複数の呼び出しで使い回されているなら、払いすぎています。Anthropic も Google も、キャッシュされた入力を通常の入力の概ね 0.1〜0.2 倍で 課金します — キャッシュが温まった後はすべての呼び出しで 5〜10 倍の 節約です。Brievio はこの節約をまるごと素通しし、繰り返しのプロンプトが 同じ上流ノードに当たり続けるアフィニティルーターを動かすので、 低い並行度でもキャッシュが生き続けます。

詳しいガイドは /docs/caching を 参照してください。

cache.py
import anthropic

client = anthropic.Anthropic(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com",
)

# プロンプトの長く静的な部分をキャッシュ可能として印を付ける。同じプレフィックスを
# 持つ次の呼び出しは Anthropic のキャッシュにヒットする — コストは 10%。
resp = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "<<your 20K-token system prompt — schema, rules, examples>>",
            "cache_control": {"type": "ephemeral"},   # キャッシュ可能として印を付ける
        },
    ],
    messages=[{"role": "user", "content": "Latest question…"}],
)

想定される節約: 長いシステムプロンプトを使う ワークロードで入力コストの 40〜70%。多くの場合、単独で最大の 改善になります。

2. モデルのティアリング — 使っていない能力に払わない

許容できる出力を生み出せる範囲で、最も安く妥当なモデルが勝ちます。 ほとんどの LLM ワークロードは難易度がロングテール分布になっており — 平均的な分類や要約のタスクに Opus は要りません。

単純な難易度推定(ヒューリスティック、分類器、あるいは Haiku 自身に トリアージさせる)を作り、それに応じてルーティングします。50 を超える Brievio アカウントを通じて、これ単独でチャットコストを 40〜60% 削れる のを当社は見てきました。

tiering.py
def pick_model(task_difficulty: int) -> str:
    """
    十分な品質を保てる最も安いモデルが勝つ。
    まず体感の難易度で選び、次に出力品質で検証する。
    """
    if task_difficulty <= 2:
        return "claude-haiku-4-5"     # Opus より約 10 倍安い
    if task_difficulty <= 4:
        return "gemini-2.5-flash"       # 非常に強力で、出力はさらに安い
    if task_difficulty <= 7:
        return "claude-sonnet-4-6"
    return "claude-opus-4-7"          # 本当に必要なときだけ

想定される節約: まとまった割合が Haiku / Gemini Flash に振り分けられれば、チャット型ワークロードで 40〜60%。

3. 出力上限と支出リミット

出力トークンは入力の概ね 5 倍のコストがかかります。タイトな ループの中で 16K トークンの応答を要求できてしまうバグこそ、人が 一晩でうっかり $400 を溶かす原因です。両方の層を守りましょう — 呼び出しごとの max_tokens と、ダッシュボードの財布 レベルの支出リミットです。

caps.py
# 二層の上限: 呼び出しごとの max_tokens に加え、キーに財布レベルの厳格な上限を。
resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[...],
    max_tokens=800,       # 呼び出しごとに出力を制限
    stop=["</answer>"],   # 既知の終端で打ち切る
)

# Brievio のダッシュボードで: /app/keys → 各キーに「Spending limit」を設定。
# 本番キー: $50/日。実験キー: $5/日。CI キー: $1/日。

Brievio では /app/keys から、キー ごと・日ごとの上限を設定できます。$1/日 の CI・テストキーは暴走 スクリプトを防ぎ、本番キーは寛大なままにしておけます。

4. 並列化 — 同時に走らせても高くはならない

逐次的な呼び出しは、並列のものと比べてお金を節約してくれるわけ ではありません — けれども実時間を浪費し、それがしばしば LLM に もっとコンテキストを与えるか、より大きなモデルに替えることで 「解決」されてしまいます。独立した呼び出しは並列で発火させ、 早く終わらせ、ティアを下げましょう。

parallel.py
# N 個のタスクが独立しているなら、逐次的な推論にお金を払う必要はない。
import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(
    api_key=os.environ["BRIEVIO_API_KEY"],
    base_url="https://api.brievio.com/v1",
)

async def classify_one(text: str) -> str:
    resp = await client.chat.completions.create(
        model="claude-haiku-4-5",     # 並列 + 安い = 勝ち
        messages=[{"role": "user", "content": f"Classify: {text}"}],
        max_tokens=20,
    )
    return resp.choices[0].message.content

results = await asyncio.gather(*(classify_one(t) for t in batch))

想定される節約: 間接的 — 「速くするためにモデルを アップグレードする」罠を避けることで、たいてい 10〜20%。

5. 二重請求にならないリトライ

Brievio では、失敗したリクエスト(4xx、5xx)が課金されることは 決してありません — ただし無料になるのは失敗した呼び出し だけです。リトライのロジックがバックオフなしにあらゆる一時的な 不調で発火すれば、上流の調子が悪い日にはコストを 2〜3 倍に できてしまいます。Retry-After を尊重し、4xx (あなたのバグ)と 5xx(一時的)を区別し、試行回数に上限を かけましょう。

retry.py
from openai import APIError, RateLimitError
import time, random

def call_with_backoff(client, **kwargs):
    for attempt in range(5):
        try:
            return client.chat.completions.create(**kwargs)
        except RateLimitError as e:
            # Retry-After があれば尊重する。
            ra = getattr(e, "retry_after", None) or (2 ** attempt + random.random())
            time.sleep(min(ra, 30))
        except APIError as e:
            if 500 <= e.status_code < 600:
                time.sleep(2 ** attempt + random.random())
                continue
            raise           # 4xx — 一時的なものではなく、あなたのバグ
    raise RuntimeError("exhausted retries")

リトライの完全なルールは /docs/errorsを参照してください。

複利効果

各手法を単独で当てれば、削減はささやかです。積み重ねれば、効果は 複利で効いてきます。キャッシュで 50% 引き × ティアリングで 50% 引き × 上限設定で 10% 引き = 元コストの 22% = 78% の節約。これが、AI が 予算項目で終わるか、それとも本番のマージン貢献者になるかの分かれ目です。

Brievio 自身の料金 — 各モデルを公式リストの約 15% 下で、真の トークン数に基づいて請求する — は、5 つの手法すべての上に乗る 一律の乗数です。2026 年にフロンティア AI を運用する最も賢い やり方はこうです。止まらないインフラの上で本物のモデルを選び、 そこから正しい手法を絞り出す。両方の層が効いてきます。

現在の利用状況を無料で診断し、どこにレバレッジがあるか確かめて みませんか? おおまかな概要を添えて contact@brievio.com まで メールをいただければ、当社が分析します。