正直に言う
最初は「Ollamaでほぼ無料でいける」と思ってた。
実際、ローカルLLMは電気代だけで動く。APIクレジットは消えない。月5万円収益化を目指してパイプラインを組んでいると、「タスクに応じてどちらを使うか」は死活問題になってくる。それで3ヶ月ほど、ちゃんとログを取りながら使い続けた。
結論を先に言うと、「全部Ollamaに置き換えれば安くなる」は半分正解で半分嘘だった。
使った構成と測定条件
MacBook Pro M5 32GB。ローカルLLMは qwen3.5:9b をメインで使っている。Claude は Haiku と Sonnet を用途別に振り分け。呼び出しはすべて 01_Scripts/lib/ai_client.py 経由で一元管理している。
# ai_client.py の呼び出し側
result = await ai_client.generate(
task="bsky_post",
prompt=prompt,
prefer_claude=True # False にすれば即 Ollama へ
)
ai_config.yaml でタスクごとのモデル割り当てを定義してあって、prefer_claude: false にすれば全パイプラインがOllamaに切り替わる設計。この切り替え機能があったおかげで、ABテストみたいにデータを取れた。
月あたりの呼び出し数は大体こんな感じだった。
BSky投稿生成: 約300回
X投稿生成: 約200回
note記事生成: 約80回
ブログ記事: 約40回
KDP本文: 約30回
品質チェック: 約250回
Discord通知文: 約150回
その他(雑): 約50回
------------------------------
合計: 約1100回/月
コスト実測値
Claude API側は、Haiku と Sonnet で単価が全然違う。
Haiku(claude-haiku-4-5)は入力1Mトークンあたり$0.80、出力が$4.00。短い投稿文を大量生成するのに使ってるので、1回あたり平均200〜400トークンくらい。
Sonnet(claude-sonnet-4-6)は入力$3.00、出力$15.00。記事生成に使うから1回2000〜4000トークン。
3ヶ月分の領収書をまとめたら、月あたり平均で Claude 側に$8〜12かかっていた。円換算で1,200〜1,800円くらい。
Ollama側は、M5で qwen3.5:9b を動かしたときの電力消費が大体15〜25W増加(アイドル比較)。1回の推論が平均5〜15秒。月1100回だと、電気代換算で30〜60円程度。
数字だけ見ると「全部Ollama」が正解に見える
1,200円 vs 50円。差は圧倒的だ。
ところが実際にやってみたら違った。
prefer_claude: false にして全タスクをOllamaに切り替えた週があった。note記事の品質が落ちた。具体的には、文体が均一になりすぎて「AI感」が強くなった。BSky投稿の「絵文字✨のみ」ルールを守れないことが増えた。品質チェック(multi_agent_quality.py)のスコアが平均Bから平均Cに下がった。
Claude使用時: 平均スコア 81.3/100
Ollama使用時: 平均スコア 67.4/100
スコアが下がると投稿キューに積まれるまでに時間がかかる。投稿頻度が落ちる。エンゲージが下がる。収益化の速度が鈍る。——という連鎖が起きた。
結局どう振り分けたか
今の設定はこうなっている。
| タスク | モデル | 理由 |
|---|---|---|
| BSky/X短文 | Haiku | 安くて速い、品質差が小さい |
| note/ブログ | Sonnet | 品質差が顕著に出る |
| KDP本文 | Sonnet | 文章の一貫性が必要 |
| 品質チェック | Haiku | 採点精度はHaikuでも十分 |
| ログ解析/画像判定 | Ollama | 精度より速度優先 |
| Discord通知文 | Ollama | 短くてフォーマットが固定 |
短文でフォーマットが決まってるやつはOllamaで十分だった。「ログ異常を検知してDiscordに通知する」みたいな処理は、文章の質より確実性のほうが大事だから。
一方、読み物として成立させたいnote記事やKDPは、Sonnetとの差が体感でわかるレベルで出た。ここをケチると直接収益に影響する。
キャッシュで劇的に変わった話
途中でプロンプトキャッシュを入れた。
システムプロンプトが長いタスク(ペルソナ設定を毎回渡すやつ)は、キャッシュヒット率が上がると入力コストが90%オフになる。ai_client.py にキャッシュ制御を入れてから、月のAPI費用が$12→$7に落ちた。
# キャッシュ対象にするシステムプロンプト
system_content = [
{
"type": "text",
"text": LONG_SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"}
}
]
これは体感コストが一番変わった施策だった。ペルソナ文が長ければ長いほど効く。
Ollama の「隠れコスト」
Ollama側に見えないコストが2つある。
ひとつは「遅さ」。qwen3.5:9b でブログ記事を生成すると4〜8分かかることがある。Claude Sonnetだと30〜60秒。パイプラインが詰まると launchd のタイムアウトに引っかかるし、複数タスクが同時に走ると順番待ちが発生する。
もうひとつは「試行回数の消費」。品質スコアがCやDだと自動リトライが走る。Claudeで1回で通るところが、Ollamaだと2〜3回回ることがあった。トークンは無料でも時間と電力は使う。
まとめ
「ローカルLLMを使えばAPIコストがゼロになる」は本当だけど、「使えばいいというものでもない」が正直な感想。
月1,000〜1,100回使って、最終的に落ち着いたのはハイブリッド構成。短文・分類・通知はOllama、長文・品質が問われるコンテンツはClaude。これで月のAPI費用は$6〜9程度に収まってる。
ローカルLLMの価値は「量産の自由度」にある。試行を繰り返しても課金されないから、プロンプトの実験がしやすい。品質を詰めた後に、そのプロンプトをClaudeに渡す——という使い方が一番コスパよかった。
完璧な切り替えじゃなくて、タスクに合った使い分けが答え。✨