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 和成本统计会失准。
参考
关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- MaaS笔记 · SSE
Provider · https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models · 错误码 · https://support.huaweicloud.com/usermanual-maas-modelarts/maas-modelar...
- MaaS API Spec笔记 · sse
Session / Thread · Turn · Message · Message Part / Content Part · Chunk Part · | topic | for | · | google | Gemini API、Vertex AI、Google tools / thinking / cache |
- MaaS Metrics笔记 · sse
MaaS Metrics 用于观测模型 API 的请求量、延迟、错误、用量、成本、缓存、流式和工具调用行为。指标设计应避免高基数 label,同时保留足够维度支持排障、SLO 和账单核对。 · | 类别 | 关注点 | · | Traffic | 请求量、RPM、并发、流式连接数 |
- MaaS Spec Messages笔记 · sse.md
梳理 MaaS 需要适配的 message / item / content block / part 类型。 · 明确各协议的 role、type、基础结构和跨协议映射边界。 · 避免把 provider 的中间状态错误地压平成纯文本,尤其是 tool call、tool result、reasoning/thought、citation、multi...
- OpenAI MaaS API笔记 · sse
OpenAI API · https://platform.openai.com/docs/api-reference/chat/create · Responses / OpenResponses · https://www.openresponses.org/
参考资料
GitHub3 条
- BerriAI/litellm/tests/local_testing/test_streaming.pygithub.com/BerriAI/litellm/blob/4a8629ce/tests/local_testing/test_streaming.py
- BerriAI/litellm#12417github.com/BerriAI/litellm/issues/12417
- vercel/ai#7628github.com/vercel/ai/issues/7628