1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code × OpenRouter 無料モデル5選:コスト0円で自動化エージェントを動かす実践ガイド2026

1
Posted at

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 で安全にハンドリング
  • 無料 → 有料フォールバック戦略でコストと安定性を両立できる

コスト圧力が高まる中で、「使うべき場面では強いモデルを、補助タスクにはゼロコストモデルを」という 階層型モデル選択 はエージェント設計の基本戦略になりつつある。


参考リンク


✍️ 本記事の著者: 合同会社ジモラボ

ジモラボは、八王子を拠点に AI を活用した SaaS を多数開発しています。本記事の技術検証もそうした開発過程の副産物です。

興味を持っていただけたら、ぜひ各 SNS のフォローもお願いします!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?