流式传输
OpenAI (/v1/chat/completions) 和 Anthropic (/v1/messages) 的接口都支持通过 Server-Sent Events 进行 streaming。Responses API (/v1/responses) 会 streaming 自己的 response.* events;参见 Responses API。Streaming 是推荐的默认设置,适用于任何具有长 prompt、长 output 或高 token 上限的场景——它避免了请求超时,并允许您在 token 到达时进行渲染。
OpenAI 风格的流式输出
curl -N https://api.uberllm.dev/v1/chat/completions \
-H "Authorization: Bearer $UBERLLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4-flash",
"stream": true,
"messages": [{"role": "user", "content": "Count to five, one per line."}]
}'
响应是一个由 data: 行组成的序列,每行是一个聊天补全块,以 data: [DONE] 结束。
from openai import OpenAI
client = OpenAI(base_url="https://api.uberllm.dev/v1", api_key="ull_...")
with client.chat.completions.create(
model="deepseek/deepseek-v4-flash",
stream=True,
messages=[{"role": "user", "content": "Write a short poem."}],
) as stream:
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
用量计费
UberLLM 会为支持它的上游服务注入 stream_options: {"include_usage": true},因此最终的 chunk 会包含一个 usage object,其中带有 prompt 和 completion token 计数,以及 cost_usd:此请求的计费金额,以美元计(即提供商收取的费用)。当上游服务未发送 usage chunk 时,UberLLM 会在 data: [DONE] 之前添加一个。在 /v1/messages 上,费用位于 message_delta event 的 usage 中。
您的请求将按照 marketplace 报告的该次调用的费用进行结算;当用量信息缺失时,gateway 会回退到 tokenizer 估算,并在您的 活动日志 中将该请求标记为估算。stream 的 headers 在费用已知之前发送,因此 stream 没有 X-UberLLM-Cost-USD header:请阅读 usage.cost_usd。
中断
如果您在流式传输中途断开连接,网关会取消上游请求,并只结算实际已传输的 token。您绝不会为未收到的完整响应付费,并且不会有预留余额被卡住。
保活机制
网关在连接时会立即发送一个 : ping 注释,并定期发送保活信号,以确保长时间运行的流能抵御代理空闲超时。