openrouter について
OpenRouterを使って開発する人向けのスキルです。複数プロバイダーのモデルに統一APIでアクセスする方法や、ルーティング、フォールバック、応答形式、リクエストパラメーターを説明します。
主な機能
- 01OpenRouter統一APIのガイダンス
- 02モデルとプロバイダーの自動ルーティング
- 03モデルフォールバックの設定
- 04ストリーミングとJSON応答
- 05サンプリングと出力パラメーター
活用シーン
- 01複数のモデルプロバイダーの統合
- 02モデルの自動フェイルオーバーの追加
- 03ストリーミングチャットアプリの構築
- 04構造化JSON出力の生成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rawveg/ skillsforge-marketplace --skill openrouterインストール後、Claude Code で/openrouterを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
plugin.jsonreferences/index.mdllms-full.mdllms-small.mdllms.mdother.md詳細
OpenRouter スキル
OpenRouter API の開発を包括的に支援します。インテリジェントなルーティング、自動フォールバック、標準化されたインターフェースにより、単一のエンドポイントから数百の AI モデルに統一的にアクセスできます。
このスキルを使うタイミング
次の場合にこのスキルを使ってください。
- 統一インターフェースを通じて複数の AI モデルプロバイダーに API リクエストを送信する
- モデルのフォールバック戦略や自動ルーティングを実装する
- OpenAI 互換 SDK を使いながら、複数のプロバイダーを対象にする
- 高度なサンプリングパラメーター(temperature、top_p、ペナルティ)を設定する
- ストリーミングレスポンスや構造化 JSON 出力を設定する
- さまざまな AI モデルのコストを比較する
- プロバイダーの自動フェイルオーバーが必要なアプリケーションを構築する
- さまざまなモデルで関数/ツール呼び出しを実装する
- OpenRouter 固有の機能(ルーティング、フォールバック、ゼロ完了保険)について質問する
クイックリファレンス
基本的なチャット補完(Python)
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<OPENROUTER_API_KEY>",
)
completion = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "What is the meaning of life?"}]
)
print(completion.choices[0].message.content)
基本的なチャット補完(JavaScript/TypeScript)
import OpenAI from 'openai';
const openai = new OpenAI({
baseURL: 'https://openrouter.ai/api/v1',
apiKey: '<OPENROUTER_API_KEY>',
});
const completion = await openai.chat.completions.create({
model: 'openai/gpt-4o',
messages: [{"role": 'user', "content": 'What is the meaning of life?'}],
});
console.log(completion.choices[0].message);
cURL リクエスト
curl https://openrouter.ai/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-d '{
"model": "openai/gpt-4o",
"messages": [{"role": "user", "content": "What is the meaning of life?"}]
}'
モデルのフォールバック設定(Python)
completion = client.chat.completions.create(
model="openai/gpt-4o",
extra_body={
"models": ["anthropic/claude-3.5-sonnet", "gryphe/mythomax-l2-13b"],
},
messages=[{"role": "user", "content": "Your prompt here"}]
)
モデルのフォールバック設定(TypeScript)
const completion = await client.chat.completions.create({
model: 'openai/gpt-4o',
models: ['anthropic/claude-3.5-sonnet', 'gryphe/mythomax-l2-13b'],
messages: [{ role: 'user', content: 'Your prompt here' }],
});
自動ルーター(動的なモデル選択)
completion = client.chat.completions.create(
model="openrouter/auto", # Automatically selects best model for the prompt
messages=[{"role": "user", "content": "Your prompt here"}]
)
高度なパラメーターの例
completion = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Write a creative story"}],
temperature=0.8, # Higher for creativity (0.0-2.0)
max_tokens=500, # Limit response length
top_p=0.9, # Nucleus sampling (0.0-1.0)
frequency_penalty=0.5, # Reduce repetition (-2.0-2.0)
presence_penalty=0.3 # Encourage topic diversity (-2.0-2.0)
)
ストリーミングレスポンス
stream = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Tell me a story"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end='')
JSON モード(構造化出力)
completion = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{
"role": "user",
"content": "Extract person's name, age, and city from: John is 30 and lives in NYC"
}],
response_format={"type": "json_object"}
)
Seed による決定論的な出力
completion = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Generate a random number"}],
seed=42, # Same seed = same output (when supported)
temperature=0.0 # Deterministic sampling
)
主な概念
モデルルーティング
OpenRouter はインテリジェントなルーティング機能を提供します。
- 自動ルーター(
openrouter/auto):NotDiamond を使用してプロンプトに基づく最適なモデルを自動選択します - フォールバックモデル:プライマリモデルが失敗した場合に自動で再試行する複数のモデルを指定します
- プロバイダールーティング:信頼性を高めるため、プロバイダー間で自動的にルーティングします
認証
- API キーを使った Bearer トークン認証を使用します
- API キーはプログラムから管理できます
- OpenAI SDK の認証パターンと互換性があります
モデルの命名規則
モデル名は provider/model-name の形式です。
openai/gpt-4o- OpenAI の GPT-4 Optimizedanthropic/claude-3.5-sonnet- Anthropic の Claude 3.5 Sonnetgoogle/gemini-2.0-flash-exp:free- Google の無料 Gemini モデルopenrouter/auto- 自動ルーティングシステム
サンプリングパラメーター
Temperature(0.0~2.0、デフォルト:1.0)
- 値が低いほど、予測しやすく焦点の定まった応答になります
- 値が高いほど、創造的で多様な応答になります
- 事実に基づくタスクには低い値(0.0~0.3)、創作には高い値(0.8~1.5)を使います
Top P(0.0~1.0、デフォルト:1.0)
- 確率の高いトークンの割合に選択肢を制限します
- 確率の低い候補を動的にフィルタリングします
- 一貫性と多様性のバランスを取ります
頻度ペナルティ/存在ペナルティ(-2.0~2.0、デフォルト:0.0)
- 頻度:使用回数に比例して、トークンの繰り返しを抑制します
- 存在:出現回数に応じて変化しない、より単純なペナルティです
- 正の値は繰り返しを減らし、負の値は再利用を促します
最大トークン数(整数)
- 応答の最大長を設定します
- コンテキスト長からプロンプト長を引いた値を超えることはできません
- コストの管理や、簡潔な応答の徹底に使用します
応答形式
- 標準 JSON:デフォルトのチャット補完形式
- ストリーミング:
stream: trueを指定した Server-Sent Events(SSE) - JSON モード:
response_format: {"type": "json_object"}による、有効な JSON の保証 - 構造化出力:スキーマで検証された JSON 応答
高度な機能
- ツール/関数呼び出し:モデルを外部 API に接続します
- マルチモーダル入力:画像、PDF、音声に対応します
- プロンプトキャッシュ:プロンプトの繰り返しによるコストを削減します
- ウェブ検索の統合:ウェブデータを使って応答を強化します
- ゼロ完了保険:応答の失敗に対する保護を提供します
- Logprobs:信頼度分析のためにトークン確率へアクセスします
参照ファイル
このスキルには、references/ に包括的なドキュメントが含まれています。
- llms-full.md - 利用可能なモデルの完全な一覧とメタデータ
- llms-small.md - 人気モデルを厳選した一覧
- llms.md - 標準的なモデル一覧
詳細なモデル情報が必要な場合は、view を使って該当する参照ファイルを読み込みます。
このスキルの使い方
初心者向け
- 基本的なチャット補完の例(上記の Python/JavaScript/cURL)から始めます
- 簡単に統合できる標準の OpenAI SDK を使います
openai/gpt-4oやanthropic/claude-3.5-sonnetのようなシンプルなモデル名を試します- 最初はパラメーターをシンプルに保ちます(モデルとメッセージのみ)
中級者向け
- 信頼性を高めるため、モデルのフォールバック配列を実装します
- サンプリングパラメーター(temperature、top_p)を試します
- 会話型アプリの UX を向上させるため、ストリーミングを使います
- 自動でモデルを選択する
openrouter/autoを試します - 構造化データの抽出に JSON モードを実装します
上級者向け
- 複数のサンプリングパラメーターを組み合わせて微調整します
- フォールバックチェーンを使ったカスタムルーティングロジックを実装します
- 信頼度スコアの算出に logprobs を使います
- ツール/関数呼び出し機能を活用します
- タスクごとに適切なモデルを選択してコストを最適化します
- プロンプトキャッシュ戦略を実装します
- 再現性のあるテストに seed パラメーターを使います
よくあるパターン
フォールバックを使ったエラー処理
try:
completion = client.chat.completions.create(
model="openai/gpt-4o",
extra_body={
"models": [
"anthropic/claude-3.5-sonnet",
"google/gemini-2.0-flash-exp:free"
]
},
messages=[{"role": "user", "content": "Your prompt"}]
)
except Exception as e:
print(f"All models failed: {e}")
コストを最適化したルーティング
# Use cheaper models for simple tasks
simple_completion = client.chat.completions.create(
model="google/gemini-2.0-flash-exp:free",
messages=[{"role": "user", "content": "Simple question"}]
)
# Use premium models for complex tasks
complex_completion = client.chat.completions.create(
model="openai/o1",
messages=[{"role": "user", "content": "Complex reasoning task"}]
)
コンテキストを考慮した Temperature
# Low temperature for factual responses
factual = client.chat.completions.create(
model="openai/gpt-4o",
temperature=0.2,
messages=[{"role": "user", "content": "What is the capital of France?"}]
)
# High temperature for creative content
creative = client.chat.completions.create(
model="openai/gpt-4o",
temperature=1.2,
messages=[{"role": "user", "content": "Write a unique story opening"}]
)
リソース
公式ドキュメント
- API リファレンス:https://openrouter.ai/docs/api-reference/overview
- クイックスタートガイド:https://openrouter.ai/docs/quickstart
- モデル一覧:https://openrouter.ai/docs/models
- パラメーターガイド:https://openrouter.ai/docs/api-reference/parameters
主なエンドポイント
- チャット補完:
POST https://openrouter.ai/api/v1/chat/completions - モデル一覧の取得:
GET https://openrouter.ai/api/v1/models - 生成情報:
GET https://openrouter.ai/api/v1/generation
注意事項
- OpenRouter はすべてのプロバイダー間で API スキーマを統一しています
- 移行を簡単にするため、OpenAI 互換の API 形式を使用します
- モデルがレート制限中、またはダウンしている場合は、プロバイダーを自動的にフォールバックします
- 料金は実際に使用されたモデルに基づきます(フォールバック時は重要です)
- レスポンスには、リクエストを処理したモデルに関するメタデータが含まれます
- すべてのモデルが Server-Sent Events によるストリーミングに対応しています
- 一般的なフレームワーク(LangChain、Vercel AI SDK など)と互換性があります
ベストプラクティス
- 本番アプリケーションでは、必ずフォールバックを実装します
- タスクの種類に応じて適切な temperature を使用します(事実に基づく内容には低く、創造的な内容には高く設定します)
- max_tokens を設定してコストとレスポンスの長さを制御します
- チャットアプリケーションのユーザー体験を向上させるため、ストリーミングを有効にします
- 構造化された出力を確実に得る必要がある場合は、JSON モードを使用します
- 開発中に再現可能な結果を得るため、seed パラメーターを使ってテストします
- タスクごとに適切なモデルを選択して、コストを監視します
- どのモデルの性能が最も高いか分からない場合は、自動ルーティングを使用します
- レート制限や失敗に備えて、適切なエラー処理を実装します
- コストを削減するため、繰り返しのリクエストではプロンプトをキャッシュします
コメント
Markdown 対応