このライブラリは、OpenAI の公式 Rust 言語バージョンを参照する、トークン数計算の C# 実装です。現在、 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 ファイルのストレージ パスを変更することも、ファイルを事前にダウンロードして、ダウンロードの失敗を引き起こすネットワークの問題を回避することもできます。
tiktoken ファイルがパッケージに統合されていないのはなぜですか?一方で、これによりパッケージのサイズが大きくなります。一方で、私は OpenAI の公式 Python コードと可能な限り一貫性を保ちたいと考えています。
「Azure App Service」など、ローカルファイルの読み書きができないクラウド機能を導入する場合は、tiktokenファイル(PBE Dir)を公開ファイルにパッケージ化してください。
以下はファイルのダウンロード リンクです: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
一部のユーザーは効率の比較を望んでいることに気づきました。ここでは、デバッグ モードの .Net 6.0 上でエンコーダ cl100k_base との基本的な比較として SharpToken を使用します。
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 ;
}
方法 | 仕事 | ランタイム | 平均 | エラー | 標準偏差 | Gen0 | 割り当て済み |
---|---|---|---|---|---|---|---|
ティクトケンシャープ | .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 | 23201696 B |