openrouter-skill
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese<objective>
Enable intelligent routing to Chinese/open-source LLMs through OpenRouter's unified API. Provides model selection guidance, cost optimization, and production patterns for LangChain/LangGraph integration.
</objective>
<quick_start>
<objective>
通过OpenRouter的统一API实现对中文/开源大模型的智能路由。为LangChain/LangGraph集成提供模型选择指导、成本优化方案及生产级实践模式。
</objective>
<quick_start>
1. Basic LangChain Setup
1. 基础LangChain配置
python
from langchain_openai import ChatOpenAI
import ospython
from langchain_openai import ChatOpenAI
import osAny OpenRouter model works with ChatOpenAI
Any OpenRouter model works with ChatOpenAI
llm = ChatOpenAI(
model="deepseek/deepseek-chat",
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1",
default_headers={
"HTTP-Referer": "https://your-app.com", # Optional but recommended
"X-Title": "Your App Name"
}
)
response = llm.invoke("Explain quantum computing in simple terms")
undefinedllm = ChatOpenAI(
model="deepseek/deepseek-chat",
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1",
default_headers={
"HTTP-Referer": "https://your-app.com", # Optional but recommended
"X-Title": "Your App Name"
}
)
response = llm.invoke("Explain quantum computing in simple terms")
undefined2. Vision Analysis (Charts, Documents)
2. 视觉分析(图表、文档)
python
from langchain_core.messages import HumanMessage
import base64
llm = ChatOpenAI(
model="qwen/qwen-2-vl-72b-instruct",
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1"
)python
from langchain_core.messages import HumanMessage
import base64
llm = ChatOpenAI(
model="qwen/qwen-2-vl-72b-instruct",
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1"
)From URL
From URL
response = llm.invoke([
HumanMessage(content=[
{"type": "text", "text": "Analyze this chart and identify key trends"},
{"type": "image_url", "image_url": {"url": "https://example.com/chart.png"}}
])
])
response = llm.invoke([
HumanMessage(content=[
{"type": "text", "text": "Analyze this chart and identify key trends"},
{"type": "image_url", "image_url": {"url": "https://example.com/chart.png"}}
])
])
From base64
From base64
with open("chart.png", "rb") as f:
image_data = base64.b64encode(f.read()).decode()
response = llm.invoke([
HumanMessage(content=[
{"type": "text", "text": "What does this chart show?"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_data}"}}
])
])
undefinedwith open("chart.png", "rb") as f:
image_data = base64.b64encode(f.read()).decode()
response = llm.invoke([
HumanMessage(content=[
{"type": "text", "text": "What does this chart show?"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_data}"}}
])
])
undefined3. Auto-Routing (Let OpenRouter Choose)
3. 自动路由(由OpenRouter选择)
python
undefinedpython
undefinedOpenRouter's Auto model selects the best model for your prompt
OpenRouter's Auto model selects the best model for your prompt
llm = ChatOpenAI(
model="openrouter/auto", # Powered by NotDiamond
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1"
)
</quick_start>
<success_criteria>
- OpenRouter API key configured and authenticated
- Model selection follows the decision tree (vision -> Qwen-VL, code -> DeepSeek Coder, etc.)
- LangChain ChatOpenAI integration working with correct base URL and headers
- Cost savings of 60-97% vs Western model equivalents for comparable quality
- Fallback chain configured for production reliability
</success_criteria>
<core_concepts>llm = ChatOpenAI(
model="openrouter/auto", # Powered by NotDiamond
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1"
)
</quick_start>
<success_criteria>
- OpenRouter API密钥已配置并验证
- 模型选择遵循决策树(视觉/图表任务→qwen/qwen-2-vl-72b-instruct,代码生成→deepseek/deepseek-coder等)
- LangChain ChatOpenAI与正确的基础URL及请求头集成正常
- 与同质量的西方大模型相比,成本降低60-97%
- 已配置降级链以保障生产环境可靠性
</success_criteria>
<core_concepts>Model Selection Decision Tree
模型选择决策树
Task Type
│
├─ Vision/Charts ──────────> qwen/qwen-2-vl-72b-instruct ($0.40/M)
├─ Code Generation ────────> deepseek/deepseek-coder ($0.14/$0.28)
├─ Deep Reasoning ─────────> qwen/qwq-32b ($0.15/$0.40)
├─ Long Documents ─────────> moonshot/moonshot-v1-128k ($0.55/M)
├─ Fast/Cheap Tasks ───────> qwen/qwen-2.5-7b-instruct ($0.09/M)
├─ General Analysis ───────> deepseek/deepseek-chat ($0.27/$1.10)
└─ Unknown/Auto ───────────> openrouter/auto任务类型
│
├─ 视觉/图表 ──────────> qwen/qwen-2-vl-72b-instruct ($0.40/M)
├─ 代码生成 ────────> deepseek/deepseek-coder ($0.14/$0.28)
├─ 深度推理 ─────────> qwen/qwq-32b ($0.15/$0.40)
├─ 长文档处理 ─────────> moonshot/moonshot-v1-128k ($0.55/M)
├─ 快速/低成本任务 ───────> qwen/qwen-2.5-7b-instruct ($0.09/M)
├─ 通用分析 ───────> deepseek/deepseek-chat ($0.27/$1.10)
└─ 未知/自动选择 ───────────> openrouter/autoTop Chinese LLMs
主流中文大模型
| Model | Best For | Cost ($/1M tokens) |
|---|---|---|
| General reasoning, analysis | $0.27 in / $1.10 out |
| Code generation | $0.14 / $0.28 |
| Vision, charts | $0.40 / $0.40 |
| Fast, cheap tasks | $0.09 / $0.09 |
| Deep reasoning | $0.15 / $0.40 |
| Long context (128K) | $0.55 / $0.55 |
| 模型 | 适用场景 | 成本(美元/百万token) |
|---|---|---|
| 通用推理、分析 | $0.27 输入 / $1.10 输出 |
| 代码生成 | $0.14 / $0.28 |
| 视觉、图表处理 | $0.40 / $0.40 |
| 快速、低成本任务 | $0.09 / $0.09 |
| 深度推理 | $0.15 / $0.40 |
| 长上下文处理(128K) | $0.55 / $0.55 |
Cost Comparison vs Western Models
与西方大模型的成本对比
| Task | Western Model | Cost | Chinese Model | Cost | Savings |
|---|---|---|---|---|---|
| Chat | GPT-4o | $5.00/$15.00 | DeepSeek Chat | $0.27/$1.10 | 95% |
| Code | Claude Sonnet | $3.00/$15.00 | DeepSeek Coder | $0.14/$0.28 | 95% |
| Vision | GPT-4o | $5.00/$15.00 | Qwen-VL | $0.40/$0.40 | 97% |
| Fast | GPT-4o-mini | $0.15/$0.60 | Qwen-7B | $0.09/$0.09 | 60% |
| 任务类型 | 西方大模型 | 成本 | 中文大模型 | 成本 | 成本节约率 |
|---|---|---|---|---|---|
| 聊天对话 | GPT-4o | $5.00/$15.00 | DeepSeek Chat | $0.27/$1.10 | 95% |
| 代码生成 | Claude Sonnet | $3.00/$15.00 | DeepSeek Coder | $0.14/$0.28 | 95% |
| 视觉处理 | GPT-4o | $5.00/$15.00 | Qwen-VL | $0.40/$0.40 | 97% |
| 快速任务 | GPT-4o-mini | $0.15/$0.60 | Qwen-7B | $0.09/$0.09 | 60% |
LangGraph Multi-Model Factory
LangGraph多模型工厂
python
from enum import Enum
from langchain_openai import ChatOpenAI
import os
class ChineseModel(str, Enum):
DEEPSEEK_CHAT = "deepseek/deepseek-chat"
DEEPSEEK_CODER = "deepseek/deepseek-coder"
QWEN_VL = "qwen/qwen-2-vl-72b-instruct"
QWEN_FAST = "qwen/qwen-2.5-7b-instruct"
QWQ_REASONING = "qwen/qwq-32b"
MOONSHOT_LONG = "moonshot/moonshot-v1-128k"
AUTO = "openrouter/auto"
def create_llm(model: ChineseModel, **kwargs) -> ChatOpenAI:
"""Factory for OpenRouter LLMs with sensible defaults."""
return ChatOpenAI(
model=model.value,
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1",
default_headers={
"HTTP-Referer": os.getenv("APP_URL", "http://localhost"),
"X-Title": os.getenv("APP_NAME", "LangChain App")
},
**kwargs
)python
from enum import Enum
from langchain_openai import ChatOpenAI
import os
class ChineseModel(str, Enum):
DEEPSEEK_CHAT = "deepseek/deepseek-chat"
DEEPSEEK_CODER = "deepseek/deepseek-coder"
QWEN_VL = "qwen/qwen-2-vl-72b-instruct"
QWEN_FAST = "qwen/qwen-2.5-7b-instruct"
QWQ_REASONING = "qwen/qwq-32b"
MOONSHOT_LONG = "moonshot/moonshot-v1-128k"
AUTO = "openrouter/auto"
def create_llm(model: ChineseModel, **kwargs) -> ChatOpenAI:
"""基于合理默认值创建OpenRouter大模型的工厂函数。"""
return ChatOpenAI(
model=model.value,
openai_api_key=os.getenv("OPENROUTER_API_KEY"),
openai_api_base="https://openrouter.ai/api/v1",
default_headers={
"HTTP-Referer": os.getenv("APP_URL", "http://localhost"),
"X-Title": os.getenv("APP_NAME", "LangChain App")
},
**kwargs
)Usage
Usage
chat_llm = create_llm(ChineseModel.DEEPSEEK_CHAT)
vision_llm = create_llm(ChineseModel.QWEN_VL)
fast_llm = create_llm(ChineseModel.QWEN_FAST, temperature=0)
undefinedchat_llm = create_llm(ChineseModel.DEEPSEEK_CHAT)
vision_llm = create_llm(ChineseModel.QWEN_VL)
fast_llm = create_llm(ChineseModel.QWEN_FAST, temperature=0)
undefinedEnvironment Setup
环境配置
bash
undefinedbash
undefined.env
.env
OPENROUTER_API_KEY=sk-or-v1-...
APP_URL=https://your-app.com # For attribution (optional)
APP_NAME=Your App Name # For attribution (optional)
</core_concepts>
<routing>
For detailed information, see:
- `reference/models-catalog.md` - Complete model listing with capabilities
- `reference/routing-strategies.md` - Auto, provider, and custom routing
- `reference/langchain-integration.md` - LangChain/LangGraph patterns
- `reference/cost-optimization.md` - Budget management and caching
- `reference/tool-calling.md` - Function calling patterns
- `reference/multimodal.md` - Vision, PDF, audio support
- `reference/observability.md` - Monitoring and tracing
</routing>
<checklist>
When implementing OpenRouter integration:
- [ ] Set OPENROUTER_API_KEY environment variable
- [ ] Choose appropriate model for task type (see decision tree)
- [ ] Use ChatOpenAI with openai_api_base="https://openrouter.ai/api/v1"
- [ ] Add HTTP-Referer and X-Title headers for attribution
- [ ] Consider cost implications (Chinese models are 10-100x cheaper)
- [ ] Enable streaming for chat interfaces
- [ ] Implement fallback chain for production reliability
- [ ] Set up cost tracking/budget limits
</checklist>OPENROUTER_API_KEY=sk-or-v1-...
APP_URL=https://your-app.com # 用于归因(可选)
APP_NAME=Your App Name # 用于归因(可选)
</core_concepts>
<routing>
如需详细信息,请参阅:
- `reference/models-catalog.md` - 包含模型能力的完整模型列表
- `reference/routing-strategies.md` - 自动路由、提供商路由及自定义路由策略
- `reference/langchain-integration.md` - LangChain/LangGraph集成模式
- `reference/cost-optimization.md` - 预算管理与缓存策略
- `reference/tool-calling.md` - 函数调用模式
- `reference/multimodal.md` - 视觉、PDF、音频支持
- `reference/observability.md` - 监控与追踪
</routing>
<checklist>
在集成OpenRouter时,请确认:
- [ ] 已设置OPENROUTER_API_KEY环境变量
- [ ] 根据任务类型选择合适的模型(参考决策树)
- [ ] 使用ChatOpenAI并设置openai_api_base="https://openrouter.ai/api/v1"
- [ ] 添加HTTP-Referer和X-Title请求头以完成归因
- [ ] 考虑成本因素(中文大模型的价格是西方模型的1/10到1/100)
- [ ] 为聊天界面启用流式传输
- [ ] 实现降级链以保障生产环境可靠性
- [ ] 设置成本追踪/预算限制
</checklist>