Esta biblioteca é uma implementação C# do cálculo de contagem de tokens, referenciando a versão oficial da linguagem Rust da OpenAI. Atualmente, os algoritmos de codificação para o200k_base
, cl100k_base
e p50k_base
foram implementados. Você pode obter diretamente o algoritmo de codificação correspondente usando o nome do modelo.
TiktokenSharp está disponível como pacote 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
Ao usar um novo codificador pela primeira vez, os arquivos tiktoken necessários para o codificador serão baixados da Internet. Isso pode levar algum tempo. Depois que o download for bem-sucedido, os usos subsequentes não exigirão download novamente. Você pode definir TikToken.PBEFileDirectory
antes de usar o codificador para modificar o caminho de armazenamento dos arquivos tiktoken baixados ou pode pré-baixar os arquivos para evitar problemas de rede que causem falhas de download.
Por que os arquivos tiktoken não estão integrados ao pacote? Por um lado, isso aumentaria o tamanho do pacote. Por outro lado, quero permanecer o mais consistente possível com o código Python oficial da OpenAI.
Se você estiver implantando funções de nuvem, como o "Azure App Service", que não pode ler/gravar arquivos locais, empacote arquivos tiktoken (PBE Dir) com os arquivos de publicação.
Abaixo estão os links para download do arquivo: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
Percebi que alguns usuários gostariam de obter uma comparação de eficiência. Aqui, utilizo SharpToken como comparação básica, com o codificador cl100k_base, no .Net 6.0 em modo 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étodo | Trabalho | Tempo de execução | Significar | Erro | Desv padrão | Geração0 | Alocado |
---|---|---|---|---|---|---|---|
TiktokenSharp | .NET 8.0 | .NET 8.0 | 98,34ms | 0,198ms | 0,176ms | 9833.3333 | 82321080B |
Sharp Token | .NET 8.0 | .NET 8.0 | 116,38ms | 1,026ms | 0,909ms | 2.000,0000 | 23201696B |