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
标志将令牌使用数据流式传输到服务器。请参阅 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
中的定价数据可能会过期。