پرش به محتوا
همه مستندات

راهنما

استریم

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"))

آنچه می‌رسد

The stream
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 را بزن.

Python
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. آنچه نوشته شده صورتحساب می‌شود، نه بیشتر. دوباره امتحان کن، یا از آنچه رسیده ادامه بده.

A cut stream
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 را در آخرین تکه بخوان.