Pustaka ini adalah implementasi C# dari penghitungan jumlah token, yang merujuk pada versi bahasa Rust resmi OpenAI. Saat ini, algoritma pengkodean untuk o200k_base
, cl100k_base
, dan p50k_base
telah diterapkan. Anda bisa langsung mendapatkan algoritma pengkodean yang sesuai menggunakan nama model.
TiktokenSharp tersedia sebagai paket 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
Saat menggunakan encoder baru untuk pertama kalinya, file tiktoken yang diperlukan untuk encoder akan diunduh dari internet. Ini mungkin memerlukan waktu. Setelah pengunduhan berhasil, penggunaan selanjutnya tidak memerlukan pengunduhan lagi. Anda dapat mengatur TikToken.PBEFileDirectory
sebelum menggunakan encoder untuk mengubah jalur penyimpanan file tiktoken yang diunduh, atau Anda dapat mengunduh file terlebih dahulu untuk menghindari masalah jaringan yang menyebabkan kegagalan pengunduhan.
Mengapa file tiktoken tidak terintegrasi ke dalam paket? Di satu sisi, ini akan membuat ukuran paket menjadi lebih besar. Di sisi lain, saya ingin tetap konsisten dengan kode Python resmi OpenAI.
Jika Anda menerapkan fungsi cloud, seperti "Azure App Service," yang tidak dapat membaca/menulis file lokal, harap paketkan file tiktoken (PBE Dir) dengan file publikasikan.
Dibawah ini link download filenya : p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
Saya perhatikan bahwa beberapa pengguna ingin mendapatkan perbandingan efisiensi. Di sini, saya menggunakan SharpToken sebagai perbandingan dasar, dengan encoder cl100k_base, pada .Net 6.0 dalam mode Debug.
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 ;
}
Metode | Pekerjaan | Waktu proses | Berarti | Kesalahan | StdDev | Gen0 | Dialokasikan |
---|---|---|---|---|---|---|---|
Tiktoken Tajam | .NET 8.0 | .NET 8.0 | 98,34 ms | 0,198 ms | 0,176 ms | 9833.3333 | 82321080B |
Token Tajam | .NET 8.0 | .NET 8.0 | 116,38 mdtk | 1,026 mdtk | 0,909 ms | 2000.0000 | 23201696B |