開發文件
串流輸出
開啟串流後,模型邊生成邊回傳,使用者幾秒內就能看到第一個字。長回覆、對話介面和 Agent 情境都建議開啟。
開啟方式
在請求主體裡加 "stream": true,回應改為 text/event-stream(SSE)。官方 SDK 都封裝好了串流介面:
stream.py
from openai import OpenAI
client = OpenAI(api_key="sk-...", base_url="https://api.flyrouter.ai/v1")
stream = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "寫一首關於秋天的短詩"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)各協定的事件格式
OpenAI Chat Completions:每個區塊是一行 data: {...},增量文字在 choices[0].delta.content,最後以 data: [DONE] 結束。需要統計用量時,加上 "stream_options": {"include_usage": true},最後一個區塊會帶 usage。
Anthropic Messages:事件依次為 message_start → content_block_start → 若干 content_block_delta → content_block_stop → message_delta → message_stop。文字增量在 content_block_delta 的 delta.text,用量在 message_delta.usage。
claude_stream.py
from anthropic import Anthropic
client = Anthropic(api_key="sk-...", base_url="https://api.flyrouter.ai")
with client.messages.stream(
model="claude-sonnet-5-5",
max_tokens=4096,
messages=[{"role": "user", "content": "寫一首關於秋天的短詩"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print("\n", final.usage)Gemini:呼叫 streamGenerateContent 並帶上 ?alt=sse,見 Gemini 原生介面。
注意事項
- 大模型在思考階段可能幾秒到幾十秒沒有文字輸出,這是正常的,不要過早斷開。用戶端的讀取逾時建議設為 10 分鐘以上。
max_tokens較大(幾萬以上)時請務必使用串流,非串流請求容易在等待中逾時。- 中途斷開連線時,已生成的部分照常計費。