راهنما
استریم
stream: true بگذار تا پاسخ کلمه به کلمه برسد، بهصورت server-sent events اوپنایآی. usage بخواه تا آخرین تکه بگوید تماس چقدر هزینه داشت.
بررسیشده در ۴ آبان ۱۴۰۵
استریم یک پاسخ
import os
from openai import OpenAI
client = OpenAI(
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
stream = client.chat.completions.create(
model="deepseek-v4.1-flash-uncensored",
messages=[{"role": "user", "content": "Tell me a story in three lines."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
if chunk.usage:
print("\ncredits:", chunk.usage.model_extra.get("nokeep_credits"))آنچه میرسد
data: {"choices":[{"index":0,"delta":{"role":"assistant","content":""}}]}
data: {"choices":[{"index":0,"delta":{"content":"The"}}]}
data: {"choices":[{"index":0,"delta":{"content":" lighthouse"}}]}
…
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"choices":[],"usage":{"prompt_tokens":18,"completion_tokens":61,"nokeep_credits":0}}
data: [DONE]- کلمات در
delta.contentمیرسند. با تفکر روشن، ابتدا تفکر درdelta.reasoning_contentمیآید. - فراخوانی ابزارها در
delta.tool_callsمیرسد، آرگومانهایشان تکهتکه، همانطور که اوپنایآی میفرستد. - با
stream_options.include_usage، یک تکهٔ آخر با لیستchoicesخالیusageرا دارد، از جملهnokeep_creditsیعنی هزینهٔ تماس. - استریم با
data: [DONE]تمام میشود.
توقف زودهنگام پاسخ
اتصال را ببند، مدل از نوشتن میایستد. فقط برای آنچه پیش از توقف فرستاده شده پرداخت میکنی و بعدش هیچ. در SDKها از حلقه بیرون بیا و استریم را ببند؛ در یک برنامه، دکمهٔ Stop را بزن.
for chunk in stream:
text = chunk.choices[0].delta.content if chunk.choices else ""
if text and "THE END" in text:
stream.close() # the model stops here, and so does the bill
breakوقتی مدل زودتر میایستد
اگر مدل پیش از پایان، استریم را قطع کند، آخرین رویداد پیش از [DONE] خطایی به شکل اوپنایآی است با کد stream_cut. آنچه نوشته شده صورتحساب میشود، نه بیشتر. دوباره امتحان کن، یا از آنچه رسیده ادامه بده.
data: {"error":{"type":"api_error","code":"stream_cut","message":"The model stopped before it finished. What it wrote is billed, nothing more."}}
data: [DONE]پرسشها
آیا استریم گرانتر است؟
نه. یک پاسخ استریمی همان توکنهای پاسخ کامل را هزینه دارد.
چرا روی استریم هدر x-nokeep-credits نیست؟
هدرها پیش از اولین کلمه فرستاده میشوند، وقتی هزینه هنوز معلوم نیست. usage بخواه و nokeep_credits را در آخرین تکه بخوان.