开启流式输出
在请求中设置stream=True 即可开启流式输出。此时 SDK 返回一个可迭代对象,用循环逐个读取数据块(chunk):每个 chunk 的结构与 completion 相似,但 message 字段被替换为 delta 字段。如果需要在流式响应中获取 Tokens 用量,建议同时传入 stream_options: {"include_usage": true}(Python SDK 中写作 {"include_usage": True})。
本页示例默认使用最新模型
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 不会在每个数据块中重复出现,仅出现在第一个数据块。传入 stream_options: {"include_usage": true} 后,服务端会在 [DONE] 前返回一个最终统计数据块:该数据块的 choices 为空,本次请求的总用量位于顶层 usage 字段。
统计 Tokens 用量
计算 Tokens 有两种方式。推荐在请求中传入stream_options: {"include_usage": true},等所有数据块传输完毕后读取最后一个统计数据块顶层的 usage 字段,查看本次请求产生的 prompt_tokens/completion_tokens/total_tokens:
最终统计数据块不包含模型输出,因此
choices 为空。解析流式响应时,不要假设每个 chunk 都存在 choices[0];请从最终统计 chunk 的 chunk.usage 读取总用量。- 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),流式与非流式请求均如此。各模型的参数约束详见模型参数参考。