localhost
運行。______ __ __ __ __ __ __ __ __ /__ _ / __ / / / / "-./ / __ / "-. /_/ / / _"-. -./ / -. _ _____ _ _ _ _ _____ _\"_ /_/ /_____/ /_//_/ /_/ /_/ /_____/ /_/ /_/ 用於監控 OpenAI API 令牌使用情況的 CLI 實用程序
tokmon
? - 用於監控 OpenAI API 使用情況的 CLI tokmon
( Tok en Mon itor) 可讓您追蹤程式的 OpenAI API 令牌使用情況。
您可以像使用time
實用程式一樣使用tokmon
,但您獲得的不是執行時間,而是 OpenAI 使用情況和成本統計資料。
pip install tokmon
注意:tokmon 適用於
gpt-*
型號(gpt-3.5-turbo
、gpt-4
等)。如果您需要其他模型(例如davinci
)的支持,請參閱 tokmon#6。
$ tokmon /path/to/your/ < your program > [arg1] [arg2] ...
tokmon cost report :
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Monitored invocation : python3 . / tests / python_example . py --prompt say 'hello, tokmon!'
Models : [ 'gpt-3.5-turbo-0301' ]
Total Usage : { 'total_prompt_tokens' : 26 , 'total_completion_tokens' : 12 , 'total_tokens' : 38}
Pricing : { 'gpt-3.5-turbo-0301' : { 'prompt_cost' : 0.002 , 'completion_cost' : 0.002 , 'per_tokens' : 1000}}
Total Cost : $0.000076
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Writing cost summary to JSON file : . / tokmon_usage_summary_1682039505 . json
程式完成運行後(或您ctrl^C
退出它), tokmon
將列印類似於上面的摘要。 tokmon
還產生詳細報告並將其儲存為 JSON 檔案。
您可以使用--beam <url>
標誌將令牌使用資料串流傳輸到伺服器。請參閱 tokmon --beam 以了解更多資訊。
# Install tokmon
pip install tokmon
# Clone this repo and `cd` into it
git clone https://github.com/yagil/tokmon.git && cd tokmon/
# export your OpenAI API key. This will be used in the test program (source in ./tests/python_example.py)
export OPENAI_API_KEY= " YOUR_OPENAI_API_KEY "
# Run tokmon (save the JSON summary to the current folder)
# The test uses the openai python package. Install it if you don't have it: `pip install openai`
tokmon --json_out=. python3 ./tests/python_example.py --prompt " say 'hello, tokmon!' "
tokmon
也支持這一點:tokmon
的多個實例。每次呼叫都會產生單獨的使用情況報告。--json_out /your/path/report.json
以取得 JSON 格式的詳細細分+對話歷史記錄。 tokmon
與您的應用程式或腳本結合使用警告這是一個調試工具。它不適合在任何重要的環境中使用。用你最好的判斷!
將tokmon
加入正常的程式呼叫之前,如下所示:
$ tokmon /path/to/your/ < your program > [arg1] [arg2] ...
像平常一樣運行和使用您的程式(參數和所有)。也支援互動式使用。
只需將tokmon
添加到常規呼叫的開頭即可
$ tokmon python /path/to/your/script.py
這適用於腳本和長時間運行的程序,例如 Django / Flask / FastAPI 伺服器。
對於腳本:
$ tokmon node /path/to/your/script.js
npm run
編輯package.json
的“scripts”條目以包含tokmon
。
{
"scripts" : {
"dev" : "tokmon next dev" ,
...
}
}
{
"total_cost" : 0.0019199999999999998 ,
"total_usage" : {
"total_prompt_tokens" : 18 ,
"total_completion_tokens" : 23 ,
"total_tokens" : 41
},
"pricing_data" : " {'gpt-4-0314': {'prompt_cost': 0.03, 'completion_cost': 0.06, 'per_tokens': 1000}} " ,
"models" : [
" gpt-4-0314 "
],
"raw_data" : [
{
"model" : " gpt-4-0314 " ,
"usage" : {
"prompt_tokens" : 18 ,
"completion_tokens" : 23 ,
"total_tokens" : 41
},
"cost" : 0.0019199999999999998 ,
"messages" : [
{
"role" : " system " ,
"content" : " You're a helpful assistant. "
},
{
"role" : " user " ,
"content" : " hello "
},
{
"role" : " assistant " ,
"content" : " Hello! How can I help you today? If you have any questions or need assistance, feel free to ask. "
}
]
}
]
}
tokmon
使用 mitmproxy 庫攔截程式與 OpenAI API 之間的 HTTP 請求和回應。然後,它處理請求和回應數據,以根據 tokmon/openai-pricing.json 計算令牌使用情況和成本。
tokmon
適用於python
/node
(使用 OpenAI 用戶端)或curl
(直接執行,而不是在 bash 腳本中運行)中的程式。有關如何在 Golang 程式中使用tokmon
的說明,請參閱 Golang 說明。
如果您手動安裝
mitmproxy
的 CA 證書,它應該適用於所有可執行檔(注意:尚未對此進行測試。)
在大多數情況下, tokmon
依賴 OpenAI 的 API 回應中的'usage'
欄位來計算令牌計數。然而,對於串流請求, tokmon
直接使用 OpenAI 的 tiktoken 函式庫來計算令牌。截至編寫 OpenAI 的 API 時,不會傳回串流請求的使用資料(參考。)
定價資料是在 ChatGPT 的幫助下從 OpenAI 網站提取的。
tokmon
使用其套件中的 tokmon/openai-pricing.json。
{
"last_updated" : " 2023-04-12 " ,
"data_sources" : [
" https://openai.com/pricing " ,
" https://platform.openai.com/docs/models/model-endpoint-compatibility "
],
"gpt-4" : { "prompt_cost" : 0.03 , "completion_cost" : 0.06 , "per_tokens" : 1000 },
"gpt-4-0314" : { "prompt_cost" : 0.03 , "completion_cost" : 0.06 , "per_tokens" : 1000 },
"gpt-4-32k" : { "prompt_cost" : 0.06 , "completion_cost" : 0.12 , "per_tokens" : 1000 },
"gpt-4-32k-0314" : { "prompt_cost" : 0.06 , "completion_cost" : 0.12 , "per_tokens" : 1000 },
"gpt-3.5-turbo" : { "prompt_cost" : 0.002 , "completion_cost" : 0.002 , "per_tokens" : 1000 },
"gpt-3.5-turbo-0301" : { "prompt_cost" : 0.002 , "completion_cost" : 0.002 , "per_tokens" : 1000 },
"text-davinci-003" : { "cost" : 0.02 , "per_tokens" : 1000 },
"text-curie-001" : { "cost" : 0.002 , "per_tokens" : 1000 },
"text-babbage-001" : { "cost" : 0.0005 , "per_tokens" : 1000 },
"text-ada-001" : { "cost" : 0.0004 , "per_tokens" : 1000 },
"text-embedding-ada-002" : { "cost" : 0.0004 , "per_tokens" : 1000 }
}
您可以使用以下指令覆寫預設定價: tokmon --pricing /path/to/your/custom-openai-pricing.json ...
此定價 JSON 不完整(缺少 DALL-E 等),可能不正確,並且可能會過時。
為了獲得最佳結果,請務必檢查您是否擁有最新的定價。
Golang 程式的 Hacky 解決方法。將其添加到您的程式中:
// Import these packages
import (
"os"
"crypto/tls"
"crypto/x509"
"io/ioutil"
"net/http"
)
// Place this code somewhere in your go program *before* you make any calls to OpenAI's API.
certFile := os . Getenv ( "TOKMON_SSL_CERT_FILE" ) // This env variable will be set by tokmon
caCert , err := ioutil . ReadFile ( certFile )
if err == nil {
caCertPool , _ := x509 . SystemCertPool ()
caCertPool . AppendCertsFromPEM ( caCert )
http . DefaultTransport .( * http. Transport ). TLSClientConfig = & tls. Config {
RootCAs : caCertPool ,
}
}
tokmon
緩衝伺服器發送的事件 (SSE),直到接收到data: [DONE]
區塊。如果受監控的程式利用事件流,其行為將會被修改。gpt-3.5-turbo
、 gpt-4
及其變體)如果您想為該專案做出貢獻,請按照以下步驟操作:
tokmon
不提供任何保證或保證。tokmon
僅在 macOS 上進行了測試。它可能無法在其他平台上運行。openai-pricing.json
中的定價資料可能會過期。