Cette bibliothèque est une implémentation C# du calcul du nombre de jetons, faisant référence à la version officielle du langage Rust d'OpenAI. Actuellement, les algorithmes de codage pour o200k_base
, cl100k_base
et p50k_base
ont été implémentés. Vous pouvez obtenir directement l'algorithme d'encodage correspondant en utilisant le nom du modèle.
TiktokenSharp est disponible sous forme de package 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
Lors de la première utilisation d'un nouvel encodeur, les fichiers tiktoken requis pour l'encodeur seront téléchargés depuis Internet. Cela peut prendre un certain temps. Une fois le téléchargement réussi, les utilisations ultérieures ne nécessiteront plus de téléchargement. Vous pouvez définir TikToken.PBEFileDirectory
avant d'utiliser l'encodeur pour modifier le chemin de stockage des fichiers tiktoken téléchargés, ou vous pouvez pré-télécharger les fichiers pour éviter les problèmes de réseau provoquant des échecs de téléchargement.
Pourquoi les fichiers tiktoken ne sont-ils pas intégrés au package ? D’une part, cela augmenterait la taille du paquet. D'un autre côté, je souhaite rester le plus cohérent possible avec le code Python officiel d'OpenAI.
Si vous déployez des fonctions cloud, telles que « Azure App Service », qui ne peuvent pas lire/écrire des fichiers locaux, veuillez regrouper les fichiers tiktoken (PBE Dir) avec les fichiers de publication.
Vous trouverez ci-dessous les liens de téléchargement des fichiers : p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
J'ai remarqué que certains utilisateurs aimeraient avoir une comparaison d'efficacité. Ici, j'utilise SharpToken comme comparaison de base, avec l'encodeur cl100k_base, sur le .Net 6.0 en 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 ;
}
Méthode | Emploi | Durée d'exécution | Signifier | Erreur | Développement standard | Gén0 | Alloué |
---|---|---|---|---|---|---|---|
TiktokenSharp | .NET 8.0 | .NET 8.0 | 98,34 ms | 0,198 ms | 0,176 ms | 9833.3333 | 82321080B |
Jeton Sharp | .NET 8.0 | .NET 8.0 | 116,38 ms | 1,026 ms | 0,909 ms | 2000.0000 | 23201696B |