低価格帯LLMの60秒タイムアウトとUI破損を防ぐバックエンドアーキテクチャ
DeepSeek Chat、GPT-4o-mini、Gemini 2.5 Flashのような低価格モデルを使用すると、APIコストは確実に削減できます。問題は、トラフィックが少し増えるだけで応答時間が10秒から60秒まで急騰する点です。一般的な同期式HTTPリクエスト構造でこのような遅延が発生すると、サーバーのワーカープロセスが待ち時間に縛られてフリーズし、フロントエンドはタイムアウトエラーを出してクラッシュしてしまいます。
1人でサイドプロジェクトを作ったり、予算が限られた1人開発者にとって、サーバーの麻痺は致命的です。だからといって高価なモデルに戻すわけにはいきません。クライアントとLLM間の直接的な同期コネクションを断ち、モデルの粗い出力をフロントエンドに安全に伝達する非同期分離アーキテクチャを自ら構築する必要があります。
CeleryとRedisベースの非同期バックグラウンドキューの構築
WebサーバーにLLMの推論完了を直接待たせてはいけません。FastAPIをAPIゲートウェイとし、RedisメッセージブローカーとCelery分散ワーカーを組み合わせて、リクエストの受付と実際の推論演算を完全に分離する必要があります。ユーザーがリクエストを送信すると、サーバーはジョブIDのみを即座に返し、接続を切断します。
デフォルト設定のままCeleryを稼働させると、ワーカーがクラッシュした際にジョブが消失したり重複実行されたりします。LLM推論の特性上長引く作業時間を処理するには、visibility_timeoutを3600秒に延長し、作業が正常終了した時点にのみ受信確認を送信するように task_acks_late = True を指定する必要があります。1つのワーカーが複数の重い処理を一度に抱え込んでボトルネックを引き起こさないよう、 worker_prefetch_multiplier = 1 を設定することも必須です。