流式调用 (Streaming)
什么是 stream
设置 "stream": true 后,服务端会以 Server-Sent Events (SSE) 的形式逐块返回内容,而不是等全部生成完再一次性返回。每个数据块是一行 data: {...},最后以 data: [DONE] 结束。
什么时候用
- 聊天/对话界面:边生成边显示,体验更流畅
- 长回复:更快看到首字,降低等待感
curl 示例
curl https://api.moyuncourse.site/v1/chat/completions \
-H "Authorization: Bearer sk-nodaryx-xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-flash",
"messages": [{ "role": "user", "content": "写一首短诗" }],
"stream": true
}'
Node.js 示例
const res = await fetch("https://api.moyuncourse.site/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NODARYX_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gemini-flash",
messages: [{ role: "user", content: "写一首短诗" }],
stream: true,
}),
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { value, done } = await reader.read();
if (done) break;
process.stdout.write(decoder.decode(value));
}
Python 示例
from openai import OpenAI
client = OpenAI(
base_url="https://api.moyuncourse.site/v1",
api_key="sk-nodaryx-xxxxxxxxxxxxxxxx",
)
stream = client.chat.completions.create(
model="gemini-flash",
messages=[{"role": "user", "content": "写一首短诗"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
安全提醒
不要在浏览器前端直接携带 API Key 发起调用(无论是否流式)——Key 会暴露给用户。应由你自己的后端代理请求,见 安全最佳实践。