如何正确计算 openai stream 流式的 tokens

背景

  1. openai 在 stream 流下是无法返回 usage 这个参数的,即在流式下 你无法正常统计 这个请求消耗的tokens

过程

github.com/openai/openai-cookbook/...

  1. 去官方查看对应语言的 token 计算方式

  1. 我这边选择了 github.com/pkoukk/tiktoken-go
  2. 在首页有对应的 demo ,这个 demo 可以用于计算 prompt_tokens
  3. 但是对于 stream 里面的返回体 并没有 demo
  4. 经过比对 ,发现 只要计算 message.Content 的字符 相加就可以得到 生成的 completion_tokens

验证

  1. 使用官方的 messages demo ,非stream 请求可以得出 usage

  1. 在 finish_reason == length 的情况下 ,我们请求 stream 流
  2. 可以看出 我们的 completion_tokens 流式跟非流式得出的 usage 参数一致

注意点

  1. 就是encoding 的成本还是比较高的, 所以记得要做复用
本作品采用《CC 协议》,转载必须注明作者和本文链接
快乐就是解决一个又一个的问题!
CrazyZard
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!