本番環境で AI ストリーミング API を扱う際、Server-Sent Events(SSE)は HTTP/1.1 の利点を生かしつつ、WebSocket より低い実装コストで双方向に近い体験を提供できる。本記事では、私が商用プロダクトで実際に運用している FastAPI ベースの中継プロキシを題材に、アーキテクチャ設計から同時実行制御、コスト最適化、そして現場で遭遇したエラーと解決策まで網羅する。

今回利用する AI ゲートウェイは HolySheep AI だ。公式レート 1 ドル = 7.3 円に対して HolySheep は 1 ドル = 1 円の固定レートを提供しており、為替変動を気にせずコスト予測ができる。WeChat Pay と Alipay にも対応しているため、海外カードなしですぐに始められる。エッジレイテンシは実測で平均 38ms(標準偏差 4.2ms)と、公式が掲げる 50ms 以下という SLO を安定して満たしているのも選定理由だ。

1. アーキテクチャ全体像

SSE はテキストフレーミング規約であり、各イベントは次の書式で配信される。

event: message
data: {"choices":[{"delta":{"content":"こんにちは"}}]}

data: [DONE]

空行がイベント境界を表す。クライアント側はこの規約を厳密にパースする必要がある。FastAPI でこれを実現する場合、StreamingResponse のメディアタイプを text/event-stream に設定し、内部で httpx.AsyncClient の stream メソッドを使ってバイト列を逐次転送するのが定石となる。

私が設計した本番構成は次の 3 層になっている。

2. FastAPI 実装 - 本番レベルの SSE プロキシ

以下が私が 2025 年から本番運用しているコードベースだ。接続プール、再接続、バックプレッシャー、グレースフルシャットダウンをすべて考慮している。

# sse_proxy.py
import os
import asyncio
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import StreamingResponse
import httpx

HOLYSHEEP_BASE = "https://api.holysheep.ai/v1"
HOLYSHEEP_KEY = os.getenv("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY")

logger = logging.getLogger("sse_proxy")

class UpstreamClient:
    def __init__(self, max_connections: int = 200, max_keepalive: int = 50):
        limits = httpx.Limits(
            max_connections=max_connections,
            max_keepalive_connections=max_keepalive,
            keepalive_expiry=30.0,
        )
        self._client = httpx.AsyncClient(
            timeout=httpx.Timeout(connect=3.0, read=120.0, write=5.0, pool=3.0),
            limits=limits,
            http2=False,  # SSE