ベストプラクティス

本番環境の最適化

TokSpan 統合から最小のレイテンシ、最大のスループット、最小のコストを実現します。これらは弊社の本番スタックで実際に使用しているパターンです。

レイテンシの最小化

接続プーリングの使用

HTTP接続を再利用すると、リクエストごとのTLSハンドシェイクオーバーヘッドが排除されます(1回の呼び出しあたり約50~100msの節約)。OpenAI SDKは接続を自動的にプールしますが、本番環境ではプールサイズを調整してください:

python
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 Flash10~50倍安価
下書き、要約、翻訳DeepSeek, Llama, Mistral3~10倍安価
複雑な推論、コード生成GPT, Claude Opus基準
バッチ / バックグラウンド処理DeepSeek やその他の低コストモデル5~15倍安価

利用上限の設定

ダッシュボードでAPIキーごとの利用上限を設定します。クォータを使い切るとキーは自動的に無効化され、予期しない課金は発生しません。開発用キーには低めの上限を、クライアントと共有するキーにはより厳しい制限を設定してください。キースコーピング を参照してください。

コストチェックリスト

最適化コストへの影響必要な作業
シンプルなタスクをミニモデルにルーティング対象タスクで −70~95%
プロンプトキャッシングを有効化キャッシュヒット時に −50~90%
キーごとの利用上限を設定最大利用額にハードキャップ
使用量ダッシュボードを毎週確認異常を早期に検知

スループットの最大化

非同期 + バッチ処理

バルク処理には、非同期クライアントと並行リクエストを使用してください。TokSpanのインフラは水平スケーリングするため、スループットの制限は通常、サーバーではなくレート制限です:

python
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呼び出しは常にリトライロジックでラップしてください:

python
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> ことでプロンプトキャッシュのヒット率を最大化し、コストを削減