TiktokenSharp
1.1.5
该库是令牌计数计算的C#实现,参考了OpenAI的官方Rust语言版本。目前, o200k_base
、 cl100k_base
和p50k_base
的编码算法已经实现。通过型号名称可以直接获取对应的编码算法。
TiktokenSharp 可作为 NuGet 包使用。
using TiktokenSharp ;
//use model name
TikToken tikToken = TikToken . EncodingForModel ( " gpt-3.5-turbo " ) ;
var i = tikToken . Encode ( " hello world " ) ; //[15339, 1917]
var d = tikToken . Decode ( i ) ; //hello world
//use encoding name
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)与发布文件打包在一起。
以下是文件下载链接: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
我注意到有些用户希望获得效率比较。在这里,我使用 SharpToken 作为基本比较,在 .Net 6.0 上以调试模式使用编码器 cl100k_base。
private GptEncoding _sharpToken = GptEncoding . GetEncoding ( " cl100k_base " ) ;
private TikToken _tikToken = TikToken . GetEncoding ( " cl100k_base " ) ;
private string _kLongText = " King Lear, one of Shakespeare's darkest and most savage plays, tells the story of the foolish and Job-like Lear, who divides his kingdom, as he does his affections, according to vanity and whim. Lear’s failure as a father engulfs himself and his world in turmoil and tragedy. " ;
[ Benchmark ]
public int SharpToken ( )
{
var sum = 0 ;
for ( var i = 0 ; i < 10000 ; i ++ )
{
var encoded = _sharpToken . Encode ( _kLongText ) ;
var decoded = _sharpToken . Decode ( encoded ) ;
sum += decoded . Length ;
}
return sum ;
}
[ Benchmark ]
public int TiktokenSharp ( )
{
var sum = 0 ;
for ( var i = 0 ; i < 10000 ; i ++ )
{
var encoded = _tikToken . Encode ( _kLongText ) ;
var decoded = _tikToken . Decode ( encoded ) ;
sum += decoded . Length ;
}
return sum ;
}
方法 | 工作 | 运行时 | 意思是 | 错误 | 标准差 | 0代 | 已分配 |
---|---|---|---|---|---|---|---|
抖音夏普 | .NET 8.0 | .NET 8.0 | 98.34 毫秒 | 0.198毫秒 | 0.176 毫秒 | 9833.3333 | 82321080B |
夏普代币 | .NET 8.0 | .NET 8.0 | 116.38 毫秒 | 1.026 毫秒 | 0.909 毫秒 | 2000.0000 | 23201696B |