Diese Bibliothek ist eine C#-Implementierung der Token-Anzahlberechnung und verweist auf die offizielle Rust-Sprachversion von OpenAI. Derzeit sind die Kodierungsalgorithmen für o200k_base
, cl100k_base
und p50k_base
implementiert. Über den Modellnamen können Sie den entsprechenden Kodierungsalgorithmus direkt abrufen.
TiktokenSharp ist als NuGet-Paket verfügbar.
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
Wenn Sie einen neuen Encoder zum ersten Mal verwenden, werden die erforderlichen Tiktoken-Dateien für den Encoder aus dem Internet heruntergeladen. Dies kann einige Zeit dauern. Sobald der Download erfolgreich war, ist für spätere Verwendungen kein erneuter Download erforderlich. Sie können TikToken.PBEFileDirectory
festlegen, bevor Sie den Encoder verwenden, um den Speicherpfad der heruntergeladenen Tiktoken-Dateien zu ändern, oder Sie können die Dateien vorab herunterladen, um Netzwerkprobleme zu vermeiden, die zu Downloadfehlern führen.
Warum sind die Tiktoken-Dateien nicht in das Paket integriert? Einerseits würde dadurch die Packungsgröße größer. Andererseits möchte ich so konsistent wie möglich mit dem offiziellen Python-Code von OpenAI bleiben.
Wenn Sie Cloud-Funktionen wie „Azure App Service“ bereitstellen, die keine lokalen Dateien lesen/schreiben können, packen Sie bitte Tiktoken-Dateien (PBE Dir) mit den Veröffentlichungsdateien.
Nachfolgend finden Sie die Links zum Herunterladen der Dateien: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
Mir ist aufgefallen, dass einige Nutzer gerne einen Effizienzvergleich erhalten würden. Hier verwende ich SharpToken als Basisvergleich mit dem Encoder cl100k_base auf .Net 6.0 im Debug-Modus.
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 ;
}
Verfahren | Arbeit | Laufzeit | Bedeuten | Fehler | StdDev | Gen0 | Zugewiesen |
---|---|---|---|---|---|---|---|
TiktokenSharp | .NET 8.0 | .NET 8.0 | 98,34 ms | 0,198 ms | 0,176 ms | 9833.3333 | 82321080 B |
SharpToken | .NET 8.0 | .NET 8.0 | 116,38 ms | 1,026 ms | 0,909 ms | 2000.0000 | 23201696 B |