OpenRouter on Ubuntu — 複数LLMを1つのAPIで使い分ける設定方法

ローカルLLM

OpenRouter は、OpenAI・Google・Anthropic・Mistral など 340 以上のLLMを 1つのAPIエンドポイントで呼び分けられる プロキシサービスです。「今日は Gemma で試して、本番は Claude に切り替える」という使い方を、コードのURLを1行変えるだけで実現できます。

Ubuntu から試す場合、セットアップは pip3 install openai だけで完了します。OpenAI SDK がそのまま動くので、既存の Python スクリプトをほぼ変更せずに使い始められます。

本記事では Ubuntu 22.04 LTS を使って、OpenRouter への接続から無料モデルでの動作確認まで実際に手を動かした結果を載せます。公式ドキュメントの Quickstart をベースに、詰まりやすいポイントも補足します。

この記事のポイント

  • pip3 install openai でインストール完了。追加ライブラリ不要
  • OPENROUTER_API_KEY を設定し、base_urlhttps://openrouter.ai/api/v1 に変えるだけで動く
  • 2026-06-21 時点で 340 モデル対応、うち 23 モデルが無料で使える(実測)
  • model パラメータをコード1行変えるだけでLLMを切り替えられる
  • curl での疎通確認から Python コードでのチャットまで順を追って解説

目次

  1. OpenRouter とは
  2. 動作確認済み環境
  3. アカウント作成と API キー発行
  4. Ubuntu 側のセットアップ
  5. curl で動作確認する
  6. Python コードで使う
  7. 使えるモデルと無料枠
  8. よくあるエラーと解決策
  9. まとめ

OpenRouter とは

OpenRouter は複数のLLMプロバイダーを束ねたゲートウェイサービスです。利用者はモデルを切り替えてもエンドポイントの URL を変える必要がなく、model パラメータだけを書き換えます。

OpenRouter トップページ(複数LLMを1つのAPIで呼び出すコンセプト図)
OpenRouter トップページ(複数LLMを1つのAPIで呼び出すコンセプト図)

個人での利用で便利な点が 2 つあります。1 つ目は 無料モデルが常時 20 件以上ある こと。Google Gemma 4 や NVIDIA Nemotron など、コンテキスト長 100 万トークンのモデルも無料で使えます(2026-06-21 実測)。2 つ目は OpenAI SDK と完全互換なこと。PyPI に公開されている openai パッケージをそのまま使えるので、環境構築でつまずく部分が少ないです。

プロバイダー別モデル数(実測)バーチャート
プロバイダー別モデル数(実測)バーチャート

動作確認済み環境

項目 バージョン・環境
OS Ubuntu 22.04.5 LTS (Jammy Jellyfish)
Python 3.10.12(apt 標準パッケージ)
pip 22.0.2(python3-pip 22.0.2+dfsg-1ubuntu0.7)
openai パッケージ 2.43.0(pip install openai)
curl 7.81.0(Ubuntu 22.04 標準)
検証日 2026-06-21
Ubuntu 22.04 セットアップ環境(stat_cards)
Ubuntu 22.04 セットアップ環境(stat_cards)

アカウント作成と API キー発行

①アカウントを作成する

openrouter.ai にアクセスして「Sign in」からアカウントを作成します。Google や GitHub でのログインに対応しています。初回ログイン後、無料クレジット($1〜$5 程度)が付与されるため、最初は課金なしで動作確認できます。

OpenRouter モデル一覧ページ(340 モデルが確認できる)
OpenRouter モデル一覧ページ(340 モデルが確認できる)

②API キーを発行する

ログイン後、右上のアカウントメニューから「API Keys」を開き、「Create Key」ボタンをクリックします。名前(例: ubuntu-test)を入力して作成すると、sk-or-v1-xxxxxxxxx 形式のキーが表示されます。

注意

API キーはページを離れると再表示できません。作成直後にテキストエディタや 1Password などにコピーしておいてください。

③API キーを環境変数に設定する




ubuntu@linuxlab: ~
$ export OPENROUTER_API_KEY=”sk-or-v1-xxxxxxxxxx”
$ echo $OPENROUTER_API_KEY
sk-or-v1-xxxxxxxxxx

毎回 export するのが面倒なら ~/.bashrc または ~/.profile に追記して永続化します。




ubuntu@linuxlab: ~
$ echo ‘export OPENROUTER_API_KEY=”sk-or-v1-xxxxxxxxxx”‘ >> ~/.bashrc
$ source ~/.bashrc

Ubuntu 側のセットアップ

①python3-pip をインストールする

Ubuntu 22.04 には Python 3.10.12 がプリインストールされています。pip がまだない場合はインストールします。




ubuntu@linuxlab: ~
$ sudo apt-get update && sudo apt-get install -y python3-pip
Reading package lists… Done
Building dependency tree… Done
Setting up python3-pip (22.0.2+dfsg-1ubuntu0.7) …
$ pip3 –version
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)

②openai パッケージをインストールする

OpenRouter は OpenAI 互換 API なので、openrouter という専用パッケージは不要です。公式 SDK の openai をそのまま使います。

pip install openai の実行ログ(実測)
pip install openai の実行ログ(実測)



ubuntu@linuxlab: ~
$ pip3 install openai
Collecting openai
Collecting httpx<1,>=0.23.0
Collecting pydantic<3,>=1.9.0
Collecting anyio<5,>=3.5.0
Installing collected packages: typing-extensions, tqdm, sniffio, jiter, idna,
h11, distro, certifi, pydantic-core, httpcore, pydantic, anyio, httpx, openai
Successfully installed openai-2.43.0 httpx-0.28.1 pydantic-2.13.4
$ python3 -c “import openai; print(openai.__version__)”
2.43.0

pip が Successfully installed openai-2.43.0 と表示されれば準備完了です。httpx と pydantic も一緒に入るので追加インストールは不要です。

curl で動作確認する

Python コードを書く前に、まず curl で API の疎通を確認します。OpenRouter の公開エンドポイント /api/v1/models は認証なしで叩けるので、接続チェックに使えます。

curl コマンドでのAPI呼び出し例(実測)
curl コマンドでのAPI呼び出し例(実測)



ubuntu@linuxlab: ~
$ curl -s https://openrouter.ai/api/v1/models | python3 -m json.tool | head -10
{
“data”: [
{
“id”: “google/gemini-3.1-flash-image”,
“name”: “Google: Nano Banana 2 (Gemini 3.1 Flash Image)”,
“context_length”: 131072,

},

実際に実行したところ 340 モデルが返ってきました(2026-06-21)。モデルの総数は日々増減するので、最新の件数は上記コマンドで確認してください。

次は API キーを使った実際のチャットリクエストを curl で送ります。




ubuntu@linuxlab: ~
$ curl https://openrouter.ai/api/v1/chat/completions \
-H “Authorization: Bearer $OPENROUTER_API_KEY” \
-H “Content-Type: application/json” \
-d ‘{
“model”: “google/gemma-4-31b-it:free”,
“messages”: [{“role”: “user”, “content”: “Ubuntuとは何ですか?一行で教えてください”}]
}’
{“id”:”gen-…”,”choices”:[{“message”:{“role”:”assistant”,
“content”:”UbuntuはDebianをベースにしたLinuxディストリビューションです。”
},”finish_reason”:”stop”}]}

モデルには無料の google/gemma-4-31b-it:free を指定しました。レスポンスが返れば接続成功です。

Python コードで使う

①基本的な使い方

Python から使う場合は OpenAI クラスの base_urlapi_key を書き換えるだけです。それ以外のメソッド名や引数は OpenAI と同じなので、既存コードの変更量が少ないです。




ubuntu@linuxlab: ~/openrouter_test
$ cat chat.py
import os
from openai import OpenAI

client = OpenAI(
base_url=”https://openrouter.ai/api/v1″,
api_key=os.environ[“OPENROUTER_API_KEY”],
)

response = client.chat.completions.create(
model=”google/gemma-4-31b-it:free”,
messages=[{“role”: “user”, “content”: “Ubuntuとは何ですか?一行で教えてください”}],
)
print(response.choices[0].message.content)



ubuntu@linuxlab: ~/openrouter_test
$ python3 chat.py
UbuntuはDebianをベースにしたLinuxディストリビューションです。

OpenAI SDK をそのまま流用しているため、messages のロール設定や temperaturemax_tokens などのパラメータも同じ書き方で動きます。

②モデルを切り替える

OpenRouter の最大のメリットがここです。model の文字列を変えるだけで、別のプロバイダーのLLMに切り替えられます。




ubuntu@linuxlab: ~/openrouter_test
$ cat switch_model.py
from openai import OpenAI
import os

client = OpenAI(
base_url=”https://openrouter.ai/api/v1″,
api_key=os.environ[“OPENROUTER_API_KEY”],
)

MODELS = [
“google/gemma-4-31b-it:free”, # 無料
“nvidia/nemotron-3-ultra-550b-a55b:free”, # 無料・コンテキスト100万
“openai/gpt-4o”, # 有料
“anthropic/claude-fable-5”, # 有料
]

for model in MODELS:
resp = client.chat.completions.create(
model=model,
messages=[{“role”: “user”, “content”: “Hello in one word”}],
)
print(f”{model}: {resp.choices[0].message.content}”)

③ストリーミングで受け取る

長い応答をリアルタイムで表示したい場合は stream=True を追加します。




ubuntu@linuxlab: ~/openrouter_test
stream = client.chat.completions.create(
model=”google/gemma-4-31b-it:free”,
messages=[{“role”: “user”, “content”: “Linuxのファイルシステム構造を教えて”}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end=””, flush=True)

使えるモデルと無料枠

OpenRouter では :free サフィックスがついたモデルが無料で使えます。2026-06-21 時点で 23 モデルが無料対応でした(openrouter.ai/api/v1/models を直接取得して確認)。

無料モデル一覧(実測取得)テーブル
無料モデル一覧(実測取得)テーブル
OpenRouter Quickstart ドキュメントページ
OpenRouter Quickstart ドキュメントページ

無料モデルにはレートリミットがあります(通常 10〜20 req/分)。個人での学習用途なら十分ですが、大量リクエストが必要な場合は有料プランへのアップグレードが必要です。

モデル種別 ID 形式 課金 用途
無料モデル provider/model-name:free $0 学習・プロトタイプ・テスト
有料モデル provider/model-name per-token 課金 本番・高精度が必要な場面

無料モデルを試して良ければ、同じ provider/ の有料モデルに切り替えてみる、という進め方が自然です。

よくあるエラーと解決策

401 Unauthorized が返る




ubuntu@linuxlab: ~
openai.AuthenticationError: Error code: 401 – {‘error’: {‘message’: ‘No auth credentials found’, ‘code’: 401}}

OPENROUTER_API_KEY が設定されていないか、空文字になっています。echo $OPENROUTER_API_KEY で値が表示されるか確認してください。

404 No endpoints found が返る




ubuntu@linuxlab: ~
openai.NotFoundError: Error code: 404 – {‘error’: {‘message’: ‘No endpoints found for model’, ‘code’: 404}}

モデルIDのタイポか、そのモデルが削除・変更された可能性があります。/api/v1/models で最新の ID を確認してください。モデル名は大文字小文字まで一致が必要です。

429 Rate Limit が返る

無料モデルのレートリミットに引っかかっています。1分待ってから再試行するか、time.sleep(2) を挟んでリクエスト間隔を空けてください。

注意

無料モデルは :free サフィックスつきのID(例: google/gemma-4-31b-it:free)を指定する必要があります。:free を付けずに google/gemma-4-31b-it と書くと有料モデルが呼ばれ、クレジットが消費されます。

ModuleNotFoundError: No module named ‘openai’

pip でインストールされていないか、venv の外から実行しています。




ubuntu@linuxlab: ~
$ pip3 install openai
$ python3 -c “import openai; print(openai.__version__)”
2.43.0

バージョンが表示されれば問題ありません。venv を使っている場合は source venv/bin/activate を忘れないよう注意してください。

まとめ

Ubuntu 22.04 から OpenRouter を使うセットアップは以下の 3 ステップでした。

  • pip3 install openai でパッケージをインストール
  • OPENROUTER_API_KEY を環境変数にセット
  • base_url="https://openrouter.ai/api/v1" に変えてクライアントを作成

実際に試して意外だったのは、コンテキスト長 100 万トークンのモデルが無料で使えることです。nvidia/nemotron-3-ultra-550b-a55b:free はコンテキスト 1,000,000 tokens で、長いドキュメントの要約や複数ファイルの一括処理に向いています。

有料モデルへの切り替えも model= の1行変更だけなので、無料モデルでプロトタイプを作ってから本番に差し替える流れが作りやすいです。

著者アイコン
著者アイコン

OpenRouter は「試す」コストが低いのが気に入っています。モデルを変えて挙動を比べるとき、環境を別々に作る必要がない点がとくに楽です。

VPS でこのコードを常時動かしたい場合は、ConoHa VPS や Vultr の東京リージョンがレスポンスが安定しています。自分のサーバーを持つ手順は以下の記事を参考にしてください。

コメント

タイトルとURLをコピーしました