代码库当前的情况:
已有的基础设施:
- streaming.rs 已经定义了 Usage 结构体来解析 OpenAI chunk 中的 usage 字段
- 解析到的 usage 会被转换为 Anthropic 格式并传递给下游日志系统
- 日志系统能正确记录 token 用量
缺失的关键点:
出站的 OpenAI 流式请求没有注入 stream_options: { include_usage: true },导致大多数 OpenAI 兼容提供商不会在 SSE chunk 中返回 usage 数据,token 用量全部为零。
修改逻辑很简单: 在构建 OpenAI chat completion 请求体时,检测到 stream: true,就追加:
{
"stream": true,
//新增
"stream_options": { "include_usage": true }
}
响应端(streaming.rs)已经能解析 usage 字段,但是由于 openai 使用两个 event 输出最后的 token usage,需要适配一下,合并成一个并延迟输出
部分 provider 可能不支持这个选项, 需要支持 provider 差异化配置//目前没看到不支持, bailian 和 azure 上测试成功
个人倾向于针对流式默认加上, 不支持的再通过选项关闭
代码库当前的情况:
已有的基础设施:
缺失的关键点:
出站的 OpenAI 流式请求没有注入 stream_options: { include_usage: true },导致大多数 OpenAI 兼容提供商不会在 SSE chunk 中返回 usage 数据,token 用量全部为零。
修改逻辑很简单: 在构建 OpenAI chat completion 请求体时,检测到 stream: true,就追加:
响应端(streaming.rs)已经能解析 usage 字段,但是由于 openai 使用两个 event 输出最后的 token usage,需要适配一下,合并成一个并延迟输出
部分 provider 可能不支持这个选项, 需要支持 provider 差异化配置//目前没看到不支持, bailian 和 azure 上测试成功
个人倾向于针对流式默认加上, 不支持的再通过选项关闭