Esta biblioteca es una implementación de C# del cálculo del recuento de tokens, que hace referencia a la versión oficial del lenguaje Rust de OpenAI. Actualmente, se han implementado los algoritmos de codificación para o200k_base
, cl100k_base
y p50k_base
. Puede obtener directamente el algoritmo de codificación correspondiente utilizando el nombre del modelo.
TiktokenSharp está disponible como paquete 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
Cuando utilice un codificador nuevo por primera vez, los archivos tiktoken necesarios para el codificador se descargarán de Internet. Esto puede llevar algún tiempo. Una vez que la descarga se realice correctamente, los usos posteriores no requerirán una nueva descarga. Puede configurar TikToken.PBEFileDirectory
antes de usar el codificador para modificar la ruta de almacenamiento de los archivos tiktoken descargados, o puede descargar previamente los archivos para evitar problemas de red que provoquen fallas en la descarga.
¿Por qué los archivos tiktoken no están integrados en el paquete? Por un lado, esto aumentaría el tamaño del paquete. Por otro lado, quiero ser lo más coherente posible con el código Python oficial de OpenAI.
Si está implementando funciones en la nube, como "Azure App Service", que no puede leer ni escribir archivos locales, empaquete los archivos tiktoken (PBE Dir) con los archivos de publicación.
A continuación se muestran los enlaces de descarga de archivos: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
Noté que a algunos usuarios les gustaría obtener una comparación de eficiencia. Aquí, uso SharpToken como comparación básica, con el codificador cl100k_base, en .Net 6.0 en modo de depuración.
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étodo | Trabajo | Tiempo de ejecución | Significar | Error | DesvStd | Generación 0 | Asignado |
---|---|---|---|---|---|---|---|
TiktokenSharp | .NET 8.0 | .NET 8.0 | 98,34 ms | 0,198 ms | 0,176 ms | 9833.3333 | 82321080B |
SharpToken | .NET 8.0 | .NET 8.0 | 116,38 ms | 1,026 ms | 0,909 ms | 2000.0000 | 23201696B |