OpenAI SDKの使い方
MixRouteは、公式のOpenAI SDKと完全な互換性があります。ベースURLを変更するだけで、既存のOpenAI SDKのコードからMixRouteを利用できます。インストール
pip install openai
npm install openai
go get github.com/openai/openai-go
設定
Python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxx",
base_url="https://api.mixroute.ai/v1"
)
Node.js / TypeScript
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'sk-xxxxxxxxxx',
baseURL: 'https://api.mixroute.ai/v1'
});
Go
package main
import (
"github.com/openai/openai-go"
"github.com/openai/openai-go/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey("sk-xxxxxxxxxx"),
option.WithBaseURL("https://api.mixroute.ai/v1"),
)
}
Chat Completions
基本的な使い方
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxx",
base_url="https://api.mixroute.ai/v1"
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
)
print(response.choices[0].message.content)
ストリーミング
stream = client.chat.completions.create(
model="gpt-5.5",
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="")
Node.jsのストリーミング
const stream = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [{ role: 'user', content: 'Tell me a story' }],
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || '');
}
さまざまなモデルの使用
Mixroute APIは、同じSDKで複数のプロバイダーのモデルを利用できます。# OpenAI models
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello"}]
)
# Anthropic Claude (via OpenAI format)
response = client.chat.completions.create(
model="claude-opus-4-8",
messages=[{"role": "user", "content": "Hello"}]
)
# Google Gemini (via OpenAI format)
response = client.chat.completions.create(
model="gemini-3.5-flash",
messages=[{"role": "user", "content": "Hello"}]
)
# OpenAI models
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{
"type": "image_url",
"image_url": {"url": "https://api.mixroute.ai/image.jpg"}
}
]
}
]
)
Base64画像
import base64
with open("image.jpg", "rb") as f:
image_data = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Describe this image"},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{image_data}"}
}
]
}
]
)
関数呼び出し
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name"
}
},
"required": ["location"]
}
}
}
]
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
tools=tools,
tool_choice="auto"
)
# Check if model wants to call a function
if response.choices[0].message.tool_calls:
tool_call = response.choices[0].message.tool_calls[0]
print(f"Function: {tool_call.function.name}")
print(f"Arguments: {tool_call.function.arguments}")
埋め込み
response = client.embeddings.create(
model="text-embedding-3-small",
input="The quick brown fox jumps over the lazy dog"
)
embedding = response.data[0].embedding
print(f"Dimensions: {len(embedding)}")
埋め込みの一括生成
response = client.embeddings.create(
model="text-embedding-3-small",
input=[
"First document",
"Second document",
"Third document"
]
)
for i, item in enumerate(response.data):
print(f"Document {i}: {len(item.embedding)} dimensions")
画像生成
response = client.images.generate(
model="gpt-image-2",
prompt="A serene Japanese garden with cherry blossoms",
size="1024x1024",
quality="standard",
n=1
)
image_url = response.data[0].url
print(image_url)
モデル一覧の取得
models = client.models.list()
for model in models.data:
print(f"{model.id} - {model.owned_by}")
エラー処理
from openai import OpenAI, APIError, RateLimitError, APIConnectionError
client = OpenAI(
api_key="sk-xxxxxxxxxx",
base_url="https://api.mixroute.ai/v1"
)
try:
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello"}]
)
except RateLimitError:
print("Rate limit exceeded. Please retry later.")
except APIConnectionError:
print("Connection error. Check your network.")
except APIError as e:
print(f"API error: {e.message}")
非同期での使用
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(
api_key="sk-xxxxxxxxxx",
base_url="https://api.mixroute.ai/v1"
)
async def main():
response = await client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
asyncio.run(main())
環境変数
ハードコードせずに、環境変数を設定します。export OPENAI_API_KEY="sk-xxxxxxxxxx"
export OPENAI_BASE_URL="https://api.mixroute.ai/v1"
from openai import OpenAI
# Automatically reads from environment variables
client = OpenAI()
ベストプラクティス
- APIキーには環境変数を使用します
- 一時的なエラーに対して再試行ロジックを実装します
- 長い応答では、ストリーミングを使用してユーザー体験を向上
- 複数の項目を処理する場合はリクエストをまとめる
- 使用状況を監視してレート制限内に収める