TiktokenSharp 项目介绍
TiktokenSharp 是一个基于 C# 的库,用于计算令牌数量,其开发参考了 OpenAI 的官方 Rust 语言版本。这个库实现了多个编码算法,包括 o200k_base
、cl100k_base
和 p50k_base
。用户可以通过模型名字直接获得相应的编码算法。
入门指南
TiktokenSharp 可通过 NuGet 包获取。安装后,用户可以通过以下几行 C# 代码来使用模型名称或者编码名称进行编码和解码:
using TiktokenSharp;
// 使用模型名称
TikToken tikToken = TikToken.EncodingForModel("gpt-3.5-turbo");
var i = tikToken.Encode("hello world"); // 返回结果:[15339, 1917]
var d = tikToken.Decode(i); // 返回结果:hello world
// 使用编码名称
TikToken tikToken = TikToken.GetEncoding("cl100k_base");
var i = tikToken.Encode("hello world"); // 返回结果:[15339, 1917]
var d = tikToken.Decode(i); // 返回结果:hello world
首次使用新的编码器时,所需的 tiktoken 文件将从网络下载,这可能需要一些时间。 一旦下载成功,后续的使用就不再需要重新下载。用户可以在使用编码器之前,设置 TikToken.PBEFileDirectory
以修改下载文件的存储路径,或者预先下载文件以避免网络问题导致的下载失败。
为什么 tiktoken 文件没有集成在包中? 一方面,这会增加包的大小;另一方面,这样可以尽可能保持与 OpenAI 官方 Python 代码的一致性。
如果您在部署例如 “Azure App Service” 这样的云端服务时,无法读写本地文件,请确保将 tiktoken 文件 (PBE Dir) 与发布的文件进行打包。
性能测试
对于一些用户关心的效率比较,TiktokenSharp 提供了一个基准测试。以 SharpToken 作为基本比较对象,使用的编码器为 cl100k_base
,平台是 .Net 6.0 的 Debug 模式。
方法 | 运行环境 | 平均时间 | 错误 | 标准差 | Gen0 | 分配 |
---|---|---|---|---|---|---|
TiktokenSharp | .NET 8.0 | 98.34 ms | 0.198 ms | 0.176 ms | 9833.3333 | 82321080 B |
SharpToken | .NET 8.0 | 116.38 ms | 1.026 ms | 0.909 ms | 2000.0000 | 23201696 B |
更新记录
-
1.1.5 (2024年9月13日)
- 增加对 o1 模型(o200k_base)的支持。
-
1.1.4 (2024年5月14日)
- 增加对 gpt-4o(o200k_base)的支持。
-
1.1.0 (2024年4月8日)
- 优化算法效率。
-
1.0.9 (2024年2月8日)
- 添加新 OpenAI 嵌入支持,由 @winzig 提供。
-
1.0.7 (2023年10月10日)
- 修正新的模型无法正确获取编码器的问题。
-
1.0.6 (2023年6月25日)
- 用 HttpClient 替换 WebClient,添加异步方法。
-
1.0.5 (2023年5月8日)
- 增加对 .Net Standard 2.0 的支持,使 TiktokenSharp 可在 .Net Framework 中使用。
-
1.0.4 (2023年4月24日)
- 增加 TikToken.GetEncoding(encodingName) 方法。
-
1.0.3 (2023年3月21日)
- GetEncodingSetting 现在支持 gpt-4 的模型,并且可以直接传入编码名称。
-
1.0.2 (2023年3月17日)
- 增加方法 TikToken.PBEFileDirectory 允许自定义 bpe 文件的存储目录,路径需要在使用 TikToken.EncodingForModel() 之前设置。
-
1.0.1 (2023年3月13日)
- p50k_base 编码算法支持 text-davinci-003 模型。
TiktokenSharp 项目根据用户需求和技术发展,不断进行优化和功能扩展,提供了一个便于使用、效率高的 C# 令牌管理工具。