이 라이브러리는 OpenAI의 공식 Rust 언어 버전을 참조하는 토큰 수 계산의 C# 구현입니다. 현재 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 파일이 패키지에 통합되지 않은 이유는 무엇입니까? 한편으로는 이로 인해 패키지 크기가 더 커집니다. 반면에 저는 OpenAI의 공식 Python 코드와 최대한 일관성을 유지하고 싶습니다.
로컬 파일을 읽고 쓸 수 없는 "Azure App Service"와 같은 클라우드 기능을 배포하는 경우 tiktoken 파일(PBE Dir)을 게시 파일과 함께 패키징하세요.
다음은 파일 다운로드 링크입니다: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
일부 사용자는 효율성을 비교하고 싶어한다는 것을 알았습니다. 여기서는 디버그 모드의 .Net 6.0에서 인코더 cl100k_base를 사용하여 SharpToken을 기본 비교로 사용합니다.
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 ;
}
방법 | 직업 | 실행 시간 | 평균 | 오류 | 표준편차 | Gen0 | 할당됨 |
---|---|---|---|---|---|---|---|
TiktokenSharp | .NET 8.0 | .NET 8.0 | 98.34ms | 0.198ms | 0.176ms | 9833.3333 | 82321080B |
샤프토큰 | .NET 8.0 | .NET 8.0 | 116.38ms | 1.026ms | 0.909ms | 2000.0000 | 23201696B |