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
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, trongdelta.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áchchoicesrỗng mangusage, gồmnokeep_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 đó.
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
breakKhi 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.
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.