如何正确计算 openai stream 流式的 tokens
背景
- openai 在 stream 流下是无法返回 usage 这个参数的,即在流式下 你无法正常统计 这个请求消耗的tokens
过程
github.com/openai/openai-cookbook/...
- 去官方查看对应语言的 token 计算方式
- 我这边选择了 github.com/pkoukk/tiktoken-go
- 在首页有对应的 demo ,这个 demo 可以用于计算 prompt_tokens
- 但是对于 stream 里面的返回体 并没有 demo
- 经过比对 ,发现 只要计算 message.Content 的字符 相加就可以得到 生成的 completion_tokens
验证
- 使用官方的 messages demo ,非stream 请求可以得出 usage
- 在 finish_reason == length 的情况下 ,我们请求 stream 流
- 可以看出 我们的 completion_tokens 流式跟非流式得出的 usage 参数一致
注意点
- 就是encoding 的成本还是比较高的, 所以记得要做复用
本作品采用《CC 协议》,转载必须注明作者和本文链接