Đi tới nội dung
Tất cả tài liệu

Hướng dẫn

Truyền luồng

Đặt stream: true và câu trả lời sẽ đến từng từ một, dưới dạng server-sent events của OpenAI. Yêu cầu usage và khối cuối sẽ cho biết lần gọi tốn bao nhiêu.

Đã kiểm tra 26 tháng 10, 2026

Nhận câu trả lời dạng luồng

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

Những gì đến

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]
  • Các từ đến trong delta.content. Khi bật suy nghĩ, phần suy nghĩ đến trước, trong delta.reasoning_content.
  • Lệnh gọi công cụ đến trong delta.tool_calls, các đối số đến từng mảnh, đúng như OpenAI gửi.
  • Với stream_options.include_usage, khối cuối có danh sách choices rỗng mang usage, gồm nokeep_credits, tức là lần gọi tốn bao nhiêu.
  • Luồng kết thúc bằng data: [DONE].

Dừng câu trả lời sớm

Đóng kết nối và mô hình sẽ ngừng viết. Bạn trả tiền cho phần đã gửi trước khi dừng, và không trả gì cho phần sau đó. Trong các SDK, thoát khỏi vòng lặp và đóng luồng; trong ứng dụng, bấm nút Dừng của ứng dụng đó.

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

Khi mô hình dừng trước

Nếu mô hình kết thúc một luồng trước khi nó hoàn tất, sự kiện cuối cùng trước [DONE] là một lỗi theo định dạng của OpenAI, với mã stream_cut. Phần nó đã viết được tính tiền, không hơn. Hãy thử lại, hoặc tiếp tục từ phần đã nhận được.

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]

Câu hỏi

Truyền luồng có tốn hơn không?

Không. Một câu trả lời dạng luồng tốn cùng số token như một câu trả lời nguyên khối.

Vì sao luồng không có tiêu đề x-nokeep-credits?

Các tiêu đề được gửi trước khi từ đầu tiên xuất hiện, lúc chi phí chưa biết. Hãy yêu cầu usage và đọc nokeep_credits trong khối cuối.