OpenAI、Anthropic、Google の API Key と SDK を個別に管理していると、Agent 開発では切り替えコストが雪だるま式に増えます。OpenRouter は 70+ プロバイダー、400+ モデルを単一の OpenAI 互換エンドポイントに集約し、モデル ID は vendor/model 形式(例:anthropic/claude-sonnet-4、openai/gpt-4o、google/gemini-2.0-flash-001)です。Cursor、Claude Code、自社 Agent を構築する開発者・Tech Lead 向けに、定義とルーティングから curl / Python / Node の実装例、3 ステップ入門+6 ステップ Runbook、英語トラフィック診断、多言語 SEO、hreflang / Schema まで網羅し、NUKCLOUD 独占クラウド Mac への接続方法も示します。OpenRouter CLI ツールランキング や LLM トレンド選定 と併読すると、モデル選定と API 接続の全体像が揃います。
00OpenRouter とは:統一 LLM ゲートウェイ
OpenRouter はモデル集約レイヤー(Model Gateway)です。アプリ側では 1 つの API Key と Base URL だけを維持し、バックエンドで Anthropic、OpenAI、Google、DeepSeek、Meta などへリクエストを転送します。外部インターフェースは OpenAI Chat Completions API と互換のため、LangChain、OpenAI SDK、Cursor、Aider などは base_url と model の変更だけで全モデルに切り替えられます。
主要エンドポイントは POST https://openrouter.ai/api/v1/chat/completions、モデル一覧は GET https://openrouter.ai/api/v1/models です。ダッシュボードでモデル別の使用量と課金を確認でき、HTTP-Referer / X-Title ヘッダーでランキング帰属(公開ドキュメント推奨)も設定できます。
課題複数 Key・SDK 分散とルーティング不足のコスト
- アカウント分散:ベンダーごとに Key 申請、クォータ、請求が別管理になり、調達サイクルが長引きます。
- SDK の微妙な差異:OpenAI 形式に収束していても、ヘッダー、ツール呼び出し、ストリームイベントに差があり、Agent フレームワークで「1 行設定でモデル切替」が難しくなります。
- fallback なしの SPOF:プロバイダーの 429 やリージョン障害時、ルーティング層がなければ Agent 全体が停止します。
- ホストと API の不一致:オーバーセル VPS 上で 7×24 Hermes / Claude Code ゲートウェイを動かすと、長時間接続リセットがレート制限より先にタスクを落とします。
01Model Routing と Provider Routing
OpenRouter には 2 層のルーティングセマンティクスがあります。Runbook ではどちらを使うか明記してください。
| 観点 | Model Routing | Provider Routing |
|---|---|---|
| リクエスト | model: "anthropic/claude-sonnet-4" | provider で優先順位指定 |
| 決定主体 | OpenRouter が遅延/コスト最適なプロバイダーを選択 | 固定プロバイダー順(コンプライアンス、リージョン) |
| 用途 | 日常 Agent、モデル A/B | 特定クラウドのみ、固定 SLA |
| Fallback | models: ["primary", "backup"] | プロバイダー枯渇後にモデル fallback |
| リスク | バックエンド切替でレイテンシ分布が変わる | 指定プロバイダー障害時は手動で順序変更 |
料金は各モデルの公式単価どおり(トークン上乗せなし)。チャージ時に約 5.5% の手数料。BYOK(各社 Key 持込)では月約 100 万回 の転送が無料枠(公式プラン参照)。無料モデルは 25+:未チャージ約 50 回/日、$10 チャージ後約 1000 回/日。
- 引用データ 1:70+ プロバイダー、400+ モデル、単一 OpenAI 互換エンドポイント。
- 引用データ 2:集約レイヤーの追加レイテンシは典型 10–80ms(リージョン依存)。
- 引用データ 3:チャージ手数料 5.5%;BYOK は約 100 万 req/月 無転送料(公式条件)。
025 つの利点と使わない 4 ケース
利点 1:1 Key で全モデル。 dev / staging で Secret を 1 本化し、漏洩面とローテーションコストを削減します。
利点 2:トークン上乗せなし。 各モデル公開単価で請求され、直契約見積と比較しやすいです。
利点 3:fallback 内蔵。 主モデル 429 時に自動で予備モデルへ切替、無人 Agent の夜間停止を減らします。
利点 4:OpenAI SDK 即利用。 base_url 変更だけで LangChain / Vercel AI SDK に接続できます。
利点 5:統一メトリクス。 ダッシュボードでモデル別 spend を集約、/models で新モデルをプログラム発見できます。
033 ステップ入門:登録・Key・初回リクエスト
-
01
登録と Key 作成:OpenRouter コンソールで API Key を発行し、Secret Manager に保存(Git 禁止)。$10 チャージで無料枠上限が拡大します。
-
02
モデル ID 選択:Models から
vendor/modelをコピー。コーディング用途はdeepseek/deepseek-chatやanthropic/claude-sonnet-4から開始できます。 -
03
Chat Completions 送信:Base URL を
https://openrouter.ai/api/v1、Authorization をBearer YOUR_KEYに設定。成功後、ダッシュボードで使用量を確認します。
04コード例:curl、Python、Node、ストリーム、Fallback
curl 基本
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-H "HTTP-Referer: https://your-app.example" \
-H "X-Title: My Agent" \
-d '{
"model": "anthropic/claude-sonnet-4",
"messages": [{"role": "user", "content": "OpenRouter ルーティングを3文で"}]
}'
Python(requests)
import os, requests
r = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}",
"Content-Type": "application/json",
},
json={
"model": "openai/gpt-4o",
"messages": [{"role": "user", "content": "Hello"}],
},
timeout=60,
)
print(r.json()["choices"][0]["message"]["content"])
Python(OpenAI SDK + base_url)
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
resp = client.chat.completions.create(
model="google/gemini-2.0-flash-001",
messages=[{"role": "user", "content": "routing と fallback の違い"}],
)
print(resp.choices[0].message.content)
Node(OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
});
const completion = await client.chat.completions.create({
model: "anthropic/claude-sonnet-4",
messages: [{ role: "user", content: "model routing を説明" }],
});
console.log(completion.choices[0].message.content);
ストリーミング(Node)
const stream = await client.chat.completions.create({
model: "deepseek/deepseek-chat",
messages: [{ role: "user", content: "ストリームで返答" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}
Fallback モデル配列
{
"model": "anthropic/claude-sonnet-4",
"models": [
"anthropic/claude-sonnet-4",
"openai/gpt-4o-mini",
"google/gemini-2.0-flash-001"
],
"messages": [{"role": "user", "content": "primary 失敗時は backup へ"}]
}
モデル一覧
curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $OPENROUTER_API_KEY" | jq '.data[:5]'
05応用:Provider 指定、BYOK、Agent 統合
リクエスト body の provider でプロバイダーを制限・並べ替えできます(OpenRouter ドキュメント参照)。BYOK では各社 Key をコンソールに登録し、大流量時の転送料を抑えられます。Cursor / Claude Code は OpenAI Base URL を OpenRouter に向けるだけで多くの場合動作します。長時間 Agent は独占 macOS ホスト上で launchd 常駐ゲートウェイを推奨します。
06英語トラフィック低迷の診断チェックリスト
- Search Console:
/en/URL が検証済みか、「検出-未インデックス」が大量にないか。 - CDN / WAF:Googlebot や米国 ASN への誤 403 がないか、オリジン直叩きと比較。
- hreflang:一覧ページで言語対応を宣言;詳細ページは canonical のみ(当サイト規約)。
- 機械翻訳痕:英語 Title が中文と 1 対 1 対応だと CTR・滞在時間が低下。翻訳ではなくローカライズ。
- 被リンク:HN / Reddit が英語 canonical を指しているか(中文デフォルト URL ではないか)。
07中文+英語 SEO 戦略概要
| 言語 | キーワード例 | Title シグナル | Meta テンプレート |
|---|---|---|---|
| 繁体中文 | OpenRouter 教程、GPT Claude 接入 | 保姆級 / 從0到1 / 2026 | 70–80 字:課題+モデル名+Runbook |
| 英語 | OpenRouter API guide、one key GPT Claude | How to / 2026 Guide | 120–160 文字:benefit+code+年 |
同一 slug を 8 言語で揃えつつ、本文は各言語で独立執筆します。日本語版は手順再現性とです・ます調を優先し、英語版は短段落と数値根拠を優先します。
08hreflang、Canonical、Sitemap、Schema
- URL:
https://nukcloud.com/{lang}/blog/{slug}.html(8 言語)。 - Canonical:各詳細ページは自言語 URL を指す;詳細ページに hreflang を並べない。
- Sitemap:公開後
generate-sitemap.jsで同一 slug を全言語登録。 - Schema:
BlogPostingのmainEntityにFAQPage;headlineに| NUKCLOUDを付けない。
09配信チャネル、優先度、指標
| チャネル | 優先度 | アクション | KPI |
|---|---|---|---|
| IndexNow / Sitemap | P0 | canonical URL 送信 | インデックス率、初回収録日数 |
| サイト内相互リンク | P0 | OpenRouter シリーズ相互導線 | ブログ内 CTR、滞在時間 |
| 開発者コミュニティ | P1 | X、Qiita、Telegram | 参照トラフィック |
| HN / Reddit(英語) | P1 | 英語 canonical+コード断片 | en セッション、被リンク |
| Newsletter | P2 | 月次ルーティングまとめ | 開封率、再訪率 |
追跡指標:オーガニッククリック、FAQ リッチ結果、OpenRouter 関連クエリ順位、注文ページ CVR。Matomo で CTA と内部リンクにイベントを設定し、ja と en のファネルを月次比較します。
106 ステップ Runbook:OpenRouter+クラウド Mac 本番
-
01
ルーティング表を固定:主モデル+2 fallback+タスク別 token 上限。機密 repo では無料 Stealth モデルを禁止。
-
02
Secret 管理:Key は CI / 1Password のみ。
.envは.gitignore。BYOK はテナント別に分離。 - 03
-
04
ゲートウェイ常駐:インスタンス上で launchd により OpenRouter プロキシまたは Hermes を常駐。Cursor Base URL は内部 HTTPS リバースプロキシへ。
-
05
可観測性:model id、latency、429 回数、fallback 発火率をログ化。OpenRouter ダッシュボードと突合。
-
06
月次レビュー:API spend と 料金ページ の Mac レンタルコストを比較。7×24 Agent が頻繁に切断される場合はモデル追加より独占ノードへ。
共有 macOS VPS では帯域ジッター、オーバーセル、長時間接続リセットが Claude Code 型の「数千ツール呼び出し・12 時間バックグラウンド Agent」に致命的です。監査可能な本番環境には NUKCLOUD 多リージョンベアメタル Mac / クラウド Mac ノードの独占セマンティクスと SSH ベースラインが適合しやすく、料金ページ でスペックと契約期間を評価できます。
11よくある質問
models 配列の fallback を組み合わせるのが一般的です。