MaaS SSE
OpenAI streaming
- 第一个 chunk 通常只有
role,没有内容。 - 后续 chunk 通常有
content,没有role。 - 最后的 chunk 里
usage和finish_reason可能分开出现。 - 第一个 chunk 和最后一个 chunk 通常不应该包含正常 content。
- 有些供应商为了紧凑,会在第一个 chunk 包含内容。
- 有些供应商会在第二个 chunk 返回
role。
stream_options
continuous_usage_stat- 连续发送 usage。
include_usage- 最后一个 chunk 包含 usage。
first chunk
- 正常情况第一个 chunk 不应该包含内容。
- 兼容层需要容忍供应商在第一个 chunk 直接返回内容。
last chunk
- vLLM、OpenAI 最后一个 chunk 的
content可能为空字符串。
{
"index": 0,
"delta": {
"content": ""
},
"logprobs": null,
"finish_reason": "stop",
"stop_reason": null
}
abort
- stream 中断 / 499 仍可能产生费用。
- stream abort 时通常拿不到最终 usage。
- Agent / gateway 实现中断时需要预估 usage,否则 context window 和成本统计会失准。