开启流式输出
在请求中设置stream=True 即可开启流式输出。此时 SDK 返回一个可迭代对象,用循环逐个读取数据块(chunk):每个 chunk 的结构与 completion 相似,但 message 字段被替换为 delta 字段。
本页示例默认使用最新模型
kimi-k3。K3 使用请求顶层 reasoning_effort 配置推理强度(支持 "low" / "high" / "max",默认 "max")。换用 kimi-k2.6、kimi-k2.5 等其他模型时,只需替换 model 字段,但各模型的参数配置存在差异,详见模型参数参考。- python
- node.js
解析 SSE 响应体
开启流式输出后,接口不再返回 JSON 格式的响应(Content-Type: application/json),而是返回 Content-Type: text/event-stream(SSE),服务端得以源源不断地向客户端传输 Tokens。SSE 的响应体如下所示:
data: 为前缀,紧跟一个合法的 JSON 对象,并以两个换行符 \n\n 结束。所有数据块传输完成后,服务端发送 data: [DONE] 标识传输结束,此时可断开网络连接。
注意:请始终使用 data: [DONE] 判断数据是否传输完成,而不是使用 finish_reason 或其他方式。如果未收到 data: [DONE],即使已经获取了 finish_reason=stop,也不应视作传输完成;换句话说,在收到 data: [DONE] 之前,都应视作 消息是不完整的。
流式输出过程中会有 content 字段会逐块下发;role 和 usage 不会在每个数据块中重复出现——role 仅出现在第一个数据块,usage 仅出现在最后一个数据块。
统计 Tokens 用量
计算 Tokens 有两种方式。最直接、最准确的一种,是等所有数据块传输完毕后,读取最后一个数据块中的usage 字段,查看本次请求产生的 prompt_tokens/completion_tokens/total_tokens:
注意
usage 嵌套在最后一个数据块的 choices[0] 内(即 choices[0].usage),而非数据块顶层。使用 OpenAI SDK 时 chunk.usage 为 None,请读取 chunk.choices[0].usage,或自行解析原始 SSE 数据块。- python
- node.js
终止流式输出
需要提前终止输出时,直接关闭 HTTP 网络连接或丢弃后续数据块即可,例如在循环中break:
不用 SDK 直接处理 SSE
在没有 SDK 的语言环境,或 SDK 无法满足你的业务逻辑时,可以直接对接 HTTP 接口来处理流式输出。以下示例演示如何逐行读取并解析 SSE 响应体,详细说明见代码注释:- python
- node.js
- 发起 HTTP 请求,并在请求体中将
stream参数设置为true; - 检查响应
Headers中的Content-Type,为text/event-stream即表示当前响应是流式输出; - 逐行读取响应内容并解析数据块(JSON 格式),通过
data:前缀和换行符\n判断数据块的起止位置; - 数据块内容为
[DONE]时表示传输完成。
多个回复(n 参数)
当前模型(
kimi-k3、kimi-k2.7-code、kimi-k2.6)的 n 固定为 1,暂不支持一次请求返回多个回复;传入大于 1 的 n 会返回 400 错误(invalid n: only 1 is allowed for this model),流式与非流式请求均如此。各模型的参数约束详见模型参数参考。