ベストプラクティス
本番環境の最適化
TokSpan 統合から最小のレイテンシ、最大のスループット、最小のコストを実現します。これらは弊社の本番スタックで実際に使用しているパターンです。
レイテンシの最小化
接続プーリングの使用
HTTP接続を再利用すると、リクエストごとのTLSハンドシェイクオーバーヘッドが排除されます(1回の呼び出しあたり約50~100msの節約)。OpenAI SDKは接続を自動的にプールしますが、本番環境ではプールサイズを調整してください:
import httpx
from openai import OpenAI
# Production-grade client with connection pooling
client = OpenAI(
api_key="sk-your-key",
base_url="https://api.tokspan.com/v1",
http_client=httpx.Client(
limits=httpx.Limits(
max_keepalive_connections=20,
max_connections=50,
),
timeout=60.0, # total timeout
),
)インタラクティブUXのための常時ストリーミング
ユーザー向けの全リクエストで stream: true を設定してください。ストリーミングは完全なレスポンスを5~30秒待つ代わりに、約100msで最初のトークンを配信します。実装については Chat Completions — ストリーミング を参照してください。
エッジルーティング
api.tokspan.com へのリクエストは、TokSpan のエッジネットワークを通じて、お使いのモデルをホストするバックエンドのリージョンにトラフィックをルーティングします。お客様側での設定は不要です。
Prompt Caching の活用
プロンプトキャッシングにより、繰り返しのプロンプトで最初のトークンまでの時間を 最大80% 短縮できます。静的なコンテンツ(システム指示、コンテキスト)をメッセージ配列の先頭に配置してください。詳細は Prompt Caching ガイド を参照してください。
レイテンシチェックリスト
| 最適化 | レイテンシへの影響 | 必要な作業 |
|---|---|---|
| 接続プーリング | リクエストあたり −50~100ms | 低 |
| ストリーミングを有効化 | 体感: −5~30秒 | 低 |
| プロンプトキャッシング | キャッシュヒット時に −80% | 中 |
コストの最小化
スマートなモデル選択
すべてのタスクにGPTやClaude Opusが必要なわけではありません。シンプルなタスクはより安価なモデルにルーティングしましょう:
| タスクタイプ | 推奨モデル | GPTとのコスト比較 |
|---|---|---|
| 分類、抽出、タグ付け | GPT mini, Claude Haiku, Gemini Flash | 10~50倍安価 |
| 下書き、要約、翻訳 | DeepSeek, Llama, Mistral | 3~10倍安価 |
| 複雑な推論、コード生成 | GPT, Claude Opus | 基準 |
| バッチ / バックグラウンド処理 | DeepSeek やその他の低コストモデル | 5~15倍安価 |
利用上限の設定
ダッシュボードでAPIキーごとの利用上限を設定します。クォータを使い切るとキーは自動的に無効化され、予期しない課金は発生しません。開発用キーには低めの上限を、クライアントと共有するキーにはより厳しい制限を設定してください。キースコーピング を参照してください。
コストチェックリスト
| 最適化 | コストへの影響 | 必要な作業 |
|---|---|---|
| シンプルなタスクをミニモデルにルーティング | 対象タスクで −70~95% | 中 |
| プロンプトキャッシングを有効化 | キャッシュヒット時に −50~90% | 低 |
| キーごとの利用上限を設定 | 最大利用額にハードキャップ | 低 |
| 使用量ダッシュボードを毎週確認 | 異常を早期に検知 | 低 |
スループットの最大化
非同期 + バッチ処理
バルク処理には、非同期クライアントと並行リクエストを使用してください。TokSpanのインフラは水平スケーリングするため、スループットの制限は通常、サーバーではなくレート制限です:
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key="sk-your-key", base_url="https://api.tokspan.com/v1")
async def process_batch(prompts: list):
tasks = [
client.chat.completions.create(
model="MODEL_NAME",
messages=[{"role": "user", "content": p}],
)
for p in prompts
]
return await asyncio.gather(*tasks)並行処理ガイドライン
以下を目安としてください:
- 従量課金: まず控えめな並行処理(同時5~10リクエスト)から始め、観測したレイテンシと応答に基づいて拡大してください
- エンタープライズ: カスタム同時実行数 — 制限についてはお問い合わせください
429 応答が発生し始めたら、並行処理を減らし、再試行の前に指数バックオフとジッターで待機してください。レート制限はプランとモデルによって異なります — 詳細は レート制限 を参照してください。
本番環境の信頼性
指数バックオフによるリトライ
ネットワークの瞬断やプロバイダーの一時的な問題は発生するものです。API呼び出しは常にリトライロジックでラップしてください:
import time
import random
from openai import OpenAI, RateLimitError, APIError
def chat_with_retry(client, model, messages, max_retries=3):
for attempt in range(max_retries):
try:
return client.chat.completions.create(model=model, messages=messages)
except RateLimitError:
if attempt == max_retries - 1: raise
# Exponential backoff with jitter
wait = (2 ** attempt) + random.uniform(0, 1)
time.sleep(wait)
except APIError as e:
if e.status_code < 500 or attempt == max_retries - 1: raise
wait = (2 ** attempt) + random.uniform(0, 1)
time.sleep(wait)自動同モデルフェイルオーバー
お使いのモデルを提供するプロバイダーにダウンタイムが発生した場合、TokSpan は自動的に同じモデルを提供する別のプロバイダーへリクエストをルーティングし直します — リクエスト消失ゼロ、手動介入不要。フェイルオーバーは同じモデル内に留まるため、出力の一貫性が保たれます。自動フェイルオーバー を参照してください。
APIキー戦略
- 開発キー: 低予算(例: $10)、安価なモデルに制限、IP制限なし
- ステージングキー: 中程度の予算(例: $50)、本番モデルセット、IP制限あり
- 本番キー: 高めの予算、全モデル、本番サーバーにIP制限
キーは90日ごとにローテーションしてください。複数のプロジェクトを管理する場合は、プロジェクトごとに個別のキーを使用してください。
クイックリファレンス: 本番環境チェックリスト
本番稼働前に、このチェックリストを確認してください:
- <strong>本番グレードのクライアントを使用する</strong> — 接続プーリングと明示的なタイムアウト(上記参照)
- <strong>すべてのユーザー向けリクエストでストリーミングを有効化</strong> して、応答性の高いUXを実現
- <strong><code>429</code> および <code>5xx</code> エラーに対して指数バックオフとジッター付きのリトライを実装</strong>
- <strong>キーごとに予算とIPホワイトリストを設定</strong> して、漏洩時に大きな請求が発生しないようにする
- <strong>静的プロンプトコンテンツを先頭に置く</strong> ことでプロンプトキャッシュのヒット率を最大化し、コストを削減