TL;DR
- OpenRouter の
:freeモデルは商用利用可のものも多く、エージェント自動化のコストをゼロに近づけられる - Claude Code から OpenRouter モデルを呼び出す設定は環境変数1行で完結する
- 2026年時点で実用に耐える無料モデル5つを用途別に整理した
背景
LLM を使ったタスク自動化を毎日動かしていると、従量課金がじわじわ効いてくる。特に「要約して保存」「フォーマット変換」「分類ラベル付け」のような 補助的な推論タスク は、GPT-4o や Claude 3.7 Sonnet を使うには過剰スペックだ。
OpenRouter は複数プロバイダのモデルを統一 API で呼び出せるルーターサービスで、一部モデルは 1日あたりの呼び出し回数制限付きで無料(:free) で提供されている。ここでは Claude Code ベースのエージェントから OpenRouter 無料モデルを呼び出す実装パターンを中心に解説する。
OpenRouter :free モデルとは
OpenRouter のモデル ID には末尾に :free を付けると、レート制限付き無料枠 でアクセスできるバリアントが存在する。2026年5月時点での主な特徴:
| 項目 | 内容 |
|---|---|
| 課金 | $0(ただし OpenRouter の利用規約に従いレート制限あり) |
| Rate Limit | 通常 20 req/min・200 req/day 前後(モデルによる) |
| コンテキスト | 4K〜128K(モデル依存) |
| 用途制限 | モデルのオリジナルライセンスに依存(商用可 / 非商用のみ など) |
⚠️
:freeバリアントは提供側の都合でいつでも変更・廃止になりえる。本番のクリティカルパスではなく、補助タスク・バッチ処理・開発環境 での使用を推奨する。
2026年版:実用無料モデル5選
1. google/gemini-2.0-flash-exp:free
用途: 高速・汎用テキスト処理
Gemini 2.0 Flash の experimental バリアント。128K コンテキストで長文要約や構造化抽出に強い。レイテンシが低く、バッチジョブ向き。
モデルID: google/gemini-2.0-flash-exp:free
コンテキスト: 1,048,576 tokens(実質無制限に近い)
用途: 文書要約・JSON抽出・翻訳補助
ライセンス: Google Gemini Terms of Service(商用利用は別途確認要)
2. meta-llama/llama-3.3-70b-instruct:free
用途: 高品質な instruction following
Meta の Llama 3.3 70B。オープンウェイトモデルの中でトップクラスの命令追従性能を持つ。ライセンスは Llama 3 Community License(月間アクティブユーザー7億人未満であれば商用利用可)。
モデルID: meta-llama/llama-3.3-70b-instruct:free
コンテキスト: 131,072 tokens
用途: コード生成補助・タスク分解・要約
ライセンス: Llama 3 Community License(商用可・MAU 7億以下)
3. qwen/qwen3-8b:free
用途: 軽量・日本語対応
Alibaba の Qwen3 シリーズの8Bモデル。日本語・中国語・英語のトリリンガル対応が強み。小規模なのにコンテキスト窓が広く、分類・ラベリングタスクに適している。
モデルID: qwen/qwen3-8b:free
コンテキスト: 32,768 tokens
用途: 日本語テキスト分類・タグ付け・短文生成
ライセンス: Apache 2.0(商用利用可)
4. mistralai/mistral-7b-instruct:free
用途: 英語コード・低レイテンシ
Mistral AI の 7B Instruct。Apache 2.0 ライセンスで商用利用可の中で最も安定した無料枠モデルの一つ。英語コードスニペットの生成・補完に安定している。
モデルID: mistralai/mistral-7b-instruct:free
コンテキスト: 32,768 tokens
用途: 英語コード補助・JSON スキーマ生成
ライセンス: Apache 2.0(商用利用可)
5. deepseek/deepseek-r1:free
用途: 推論タスク・Chain-of-Thought
DeepSeek の R1 モデル。数学・論理推論・多ステップ問題解決で他の無料モデルを大きく上回る性能を持つ。ただし思考トークンが多く、レスポンスが長くなりがち。
モデルID: deepseek/deepseek-r1:free
コンテキスト: 163,840 tokens
用途: 推論・多ステップ計画生成・コードレビュー
ライセンス: MIT(商用利用可)
Claude Code から OpenRouter を呼び出す設定
Claude Code 自身(Anthropic API)はそのままに、サブタスクの LLM 呼び出し を OpenRouter 無料モデルに切り替えるパターンを示す。
パターン1: OpenAI 互換エンドポイントを直接叩く
OpenRouter は OpenAI SDK 互換のエンドポイント(https://openrouter.ai/api/v1)を持つ。Python/TypeScript どちらでも既存コードの数行変更で切り替えられる。
Python(openai ライブラリ使用)
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<YOUR_OPENROUTER_API_KEY>", # 環境変数から取得推奨
)
def summarize_with_free_model(text: str) -> str:
response = client.chat.completions.create(
model="meta-llama/llama-3.3-70b-instruct:free",
messages=[
{"role": "system", "content": "以下のテキストを3行で要約してください。"},
{"role": "user", "content": text},
],
max_tokens=256,
)
return response.choices[0].message.content
TypeScript(Vercel AI SDK + OpenAI provider)
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";
const openrouter = createOpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
});
async function classifyText(input: string): Promise<string> {
const { text } = await generateText({
model: openrouter("qwen/qwen3-8b:free"),
prompt: `次のテキストのカテゴリを ["技術", "ビジネス", "その他"] から1つ選んでください。\n\n${input}`,
maxTokens: 16,
});
return text.trim();
}
パターン2: LangChain から使う
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="google/gemini-2.0-flash-exp:free",
openai_api_base="https://openrouter.ai/api/v1",
openai_api_key="<YOUR_OPENROUTER_API_KEY>",
max_tokens=512,
)
result = llm.invoke("Rustのasync/awaitを初心者向けに説明してください")
print(result.content)
用途別モデル選択フローチャート
タスクは何?
├── 日本語テキスト処理(分類・要約)
│ └── → qwen/qwen3-8b:free(Apache 2.0・軽量・日本語強)
├── 英語コード生成・補完
│ └── → mistralai/mistral-7b-instruct:free(Apache 2.0・安定)
├── 長文要約・大量ドキュメント処理
│ └── → google/gemini-2.0-flash-exp:free(超長コンテキスト)
├── 複雑な推論・多ステップ計画
│ └── → deepseek/deepseek-r1:free(MIT・推論特化)
└── 汎用 instruction following(英語)
└── → meta-llama/llama-3.3-70b-instruct:free(70B・高品質)
レート制限のハンドリング実装
無料モデルは 429 Too Many Requests が返ることがある。シンプルなリトライロジックを入れておくと安定する。
import time
import random
from openai import OpenAI, RateLimitError
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<YOUR_OPENROUTER_API_KEY>",
)
def call_with_retry(
model: str,
messages: list,
max_retries: int = 5,
base_delay: float = 2.0,
) -> str:
"""Exponential backoff + jitter でレート制限を回避"""
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model=model,
messages=messages,
max_tokens=512,
)
return response.choices[0].message.content
except RateLimitError:
if attempt == max_retries - 1:
raise
delay = base_delay * (2 ** attempt) + random.uniform(0, 1)
print(f"Rate limited. Retrying in {delay:.1f}s... (attempt {attempt + 1})")
time.sleep(delay)
return "" # unreachable
フォールバック戦略: 無料 → 有料へ自動切り替え
コスト最適化の実践的なパターンとして、無料モデルを第一候補にして失敗時のみ有料モデルにフォールバック する構成が有効。
from openai import OpenAI, RateLimitError
FREE_MODEL = "meta-llama/llama-3.3-70b-instruct:free"
FALLBACK_MODEL = "anthropic/claude-3-haiku" # 最安コストの有料モデル
def smart_completion(prompt: str) -> str:
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<YOUR_OPENROUTER_API_KEY>",
)
messages = [{"role": "user", "content": prompt}]
# まず無料モデルで試みる
try:
resp = client.chat.completions.create(
model=FREE_MODEL,
messages=messages,
max_tokens=256,
)
return resp.choices[0].message.content
except RateLimitError:
pass # レート制限時のみフォールバック
# フォールバック: 有料モデル
resp = client.chat.completions.create(
model=FALLBACK_MODEL,
messages=messages,
max_tokens=256,
)
return resp.choices[0].message.content
このパターンでは 日中の低負荷時間帯はほぼコスト0 で動き、深夜バッチなどレート上限に達する場合だけ有料モデルが起動する。
注意点まとめ
ライセンス確認は必須
| モデル | ライセンス | 商用可否 |
|---|---|---|
| Llama 3.3 70B | Llama 3 Community License | ✅(MAU 7億以下) |
| Qwen3 8B | Apache 2.0 | ✅ |
| Mistral 7B Instruct | Apache 2.0 | ✅ |
| DeepSeek R1 | MIT | ✅ |
| Gemini 2.0 Flash Exp | Google Terms | ⚠️ 要確認 |
Gemini 系は Google の利用規約が別途適用されるため、商用サービスへの組み込みは必ず Google AI Terms of Service を確認すること。
品質が要件を満たすか検証する
無料モデルを本番投入する前に、自社のユースケースに特化した評価セット を用意して精度測定を行うことを強く推奨する。汎用ベンチマーク(MMLU, HumanEval 等)上の数字と実業務での性能は必ずしも一致しない。
個人情報・機密データを送らない
OpenRouter 経由でデータは外部プロバイダに送信される。PII や社内機密を含むテキストは送信しないこと。匿名化・サニタイズ後のデータのみを扱う設計にする。
まとめ
- OpenRouter
:freeモデルは 補助タスク・バッチ処理・開発環境 での LLM コスト削減に有効 - Python/TypeScript どちらも
base_urlを差し替えるだけで既存コードがそのまま動く - 用途に合わせて「日本語 → Qwen3」「推論 → DeepSeek R1」「汎用 → Llama 3.3 70B」と選び分けると効果的
- レート制限は exponential backoff で安全にハンドリング
- 無料 → 有料フォールバック戦略でコストと安定性を両立できる
コスト圧力が高まる中で、「使うべき場面では強いモデルを、補助タスクにはゼロコストモデルを」という 階層型モデル選択 はエージェント設計の基本戦略になりつつある。
参考リンク
- OpenRouter公式ドキュメント
- OpenRouter モデル一覧
- Llama 3 Community License
- Qwen3 GitHub (Apache 2.0)
- DeepSeek R1 GitHub (MIT)
- Vercel AI SDK ドキュメント
- LangChain ChatOpenAI ドキュメント
✍️ 本記事の著者: 合同会社ジモラボ
ジモラボは、八王子を拠点に AI を活用した SaaS を多数開発しています。本記事の技術検証もそうした開発過程の副産物です。
- 🌐 公式サイト: https://locallab.jp
- 🔍 AI SEO 最適化 SaaS: lookupai.jp
- 📺 YouTube: @locallab_llc
- ✉️ お問い合わせ: info@locallab.jp
興味を持っていただけたら、ぜひ各 SNS のフォローもお願いします!