メインコンテンツまでスキップ

OpenAI の長時間リクエストとストリーミング応答

:::tip Responses API を優先してください 長文生成、コード生成、複雑な推論タスクでは、ストリーミングを有効にした `/v1/responses` エンドポイントの利用を推奨します。

Responses API は、テキスト、推論状態、ツール実行結果を構造化イベントとして継続的に返すため、長時間タスクに適しています。クライアント側でも、ストリーミングの差分、ツール呼び出し、複雑な応答を処理しやすくなります。古い OpenAI SDK や既存アプリケーションとの互換性が必要な場合は、`/v1/chat/completions` を使用してください。 :::

コンテキストが大きい場合、出力が長い場合、または上流のフェイルオーバーや再試行が必要な場合、非ストリーミングリクエストは応答全体が完成するまで結果を返せません。クライアントのタイムアウトが 30~60 秒の場合、先に接続が切れても、サーバー側では後から上流応答を受信して使用量を記録することがあります。

推奨設定​

可能な限り /v1/chat/completions でストリーミングを有効にしてください。

{
"model": "gpt-5.5",
"stream": true,
"messages": [
{ "role": "user", "content": "この長いドキュメントを分析してください" }
]
}

長時間リクエストでは、クライアントのタイムアウトを少なくとも 120 秒に設定してください。コード生成、長文書の分析、バッチ要約では 180 秒以上を推奨します。

Python SDK の例​

from openai import OpenAI

client = OpenAI(
base_url="https://api.muskapi.cc/v1",
api_key="YOUR_API_KEY",
timeout=180,
)

stream = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "この長いドキュメントを分析してください"}],
stream=True,
)

for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)

Node.js SDK の例​

import OpenAI from "openai";

const client = new OpenAI({
baseURL: "https://api.muskapi.cc/v1",
apiKey: "YOUR_API_KEY",
timeout: 180_000,
});

const stream = await client.chat.completions.create({
model: "gpt-5.5",
messages: [{ role: "user", content: "この長いドキュメントを分析してください" }],
stream: true,
});

for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}

非ストリーミングを避けるべきケース​

  • 大量のログ、リポジトリの抜粋、長いドキュメントを入力する場合。
  • レポート、大量のコード、全文翻訳など長い出力を期待する場合。
  • 上流アカウントでフェイルオーバーや再試行が発生する可能性がある場合。
  • クライアント、ブラウザ、プロキシ、ゲートウェイに 30~60 秒のアイドルタイムアウトがある場合。

使用記録の「ストリーミングガイド」について​

使用記録の /v1/chat/completions に「ストリーミングガイド」が表示される場合、そのリクエストは非ストリーミングで、処理時間が 30 秒を超えています。一般的なクライアントのタイムアウトに近いため、stream: true を有効にし、必要に応じてクライアントの timeout を延長してください。