TiktokenSharp
1.1.5
該函式庫是令牌計數計算的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檔案沒有整合到套件中?一方面,這將使封裝尺寸更大。另一方面,我希望盡可能與 OpenAI 的官方 Python 程式碼保持一致。
如果您部署的是「Azure App Service」等雲端功能,無法讀寫本機文件,請將tiktoken文件(PBE Dir)與發布文件打包在一起。
以下是檔案下載連結: p50k_base.tiktoken cl100k_base.tiktoken o200k_base.tiktoken
我注意到有些用戶希望獲得效率比較。在這裡,我使用 SharpToken 作為基本比較,在 .Net 6.0 上以調試模式使用編碼器 cl100k_base。
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代 | 已分配 |
---|---|---|---|---|---|---|---|
抖音夏普 | .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乙 |