Эта библиотека представляет собой реализацию C# для расчета количества токенов, ссылающуюся на официальную версию языка OpenAI Rust. На данный момент реализованы алгоритмы кодирования 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 не интегрированы в пакет? С одной стороны, это увеличит размер упаковки. С другой стороны, я хочу максимально соответствовать официальному коду Python OpenAI.
Если вы развертываете облачные функции, такие как «Служба приложений Azure», которые не могут читать и записывать локальные файлы, упакуйте файлы tiktoken (PBE Dir) с файлами публикации.
Ниже приведены ссылки для скачивания файлов: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
Я заметил, что некоторые пользователи хотели бы получить сравнение эффективности. Здесь я использую SharpToken в качестве базового сравнения с кодировщиком cl100k_base в .Net 6.0 в режиме отладки.
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 ;
}
Метод | Работа | Время выполнения | Иметь в виду | Ошибка | стандартное отклонение | Ген0 | Выделено |
---|---|---|---|---|---|---|---|
ТиктокенSharp | .NET 8.0 | .NET 8.0 | 98,34 мс | 0,198 мс | 0,176 мс | 9833.3333 | 82321080 Б |
ШарпТокен | .NET 8.0 | .NET 8.0 | 116,38 мс | 1,026 мс | 0,909 мс | 2000.0000 | 23201696 Б |