Skip to main content

💰 预算与速率限制

要求:

设置预算

你可以在三个层级设置预算:

  • 代理层级
  • 内部用户层级
  • 客户(终端用户)层级
  • 密钥层级
  • 密钥层级(特定模型的预算)

在代理上为所有调用应用预算

步骤 1. 修改 config.yaml

general_settings:
master_key: sk-1234

litellm_settings:
# 其他 litellm 设置
max_budget: 0 # (浮点数) 设置最大预算为 $0 美元
budget_duration: 30d # (字符串) 重置频率 - 你可以设置持续时间为秒 ("30s")、分钟 ("30m")、小时 ("30h")、天 ("30d")。

步骤 2. 启动代理

litellm /path/to/config.yaml

步骤 3. 发送测试调用

curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Autherization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "你是哪个大语言模型"
}
],
}'

重置预算

重置密钥/内部用户/团队/客户的预算

budget_duration: 预算在指定的持续时间结束时重置。如果未设置,预算永不重置。你可以将持续时间设置为秒("30s")、分钟("30m")、小时("30h")、天("30d")。

curl 'http://0.0.0.0:4000/user/new' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"max_budget": 10,
"budget_duration": 10s, # 👈 关键更改
}'

注意: 默认情况下,服务器每 10 分钟检查一次重置,以最小化数据库调用。

要更改这一点,请设置 proxy_budget_rescheduler_min_timeproxy_budget_rescheduler_max_time

例如:每 1 秒检查一次

general_settings: 
proxy_budget_rescheduler_min_time: 1
proxy_budget_rescheduler_max_time: 1

设置速率限制

你可以设置:

  • tpm 限制(每分钟令牌数)
  • rpm 限制(每分钟请求数)
  • 最大并行请求数
  • 给定密钥的模型特定 rpm/tpm 限制

使用 /team/new/team/update,为团队的多密钥持久化速率限制。

curl --location 'http://0.0.0.0:4000/team/new' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{"team_id": "my-prod-team", "max_parallel_requests": 10, "tpm_limit": 20, "rpm_limit": 4}'

查看 Swagger

预期响应

{
"key": "sk-sA7VDkyhlQ7m8Gt77Mbt3Q",
"expires": "2024-01-19T01:21:12.816168",
"team_id": "my-prod-team",
}

为所有内部用户设置默认预算

使用此方法为向您提供密钥的用户设置默认预算。

当用户具有 user_role="internal_user" 时(通过 /user/new/user/update 设置),这将适用。

如果密钥具有 team_id,则此方法将不适用(届时将应用团队预算)。告诉我们如何改进这一点!

  1. 在您的 config.yaml 中定义最大预算
model_list: 
- model_name: "gpt-3.5-turbo"
litellm_params:
model: gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY

litellm_settings:
max_internal_user_budget: 0 # 金额以美元为单位
internal_user_budget_duration: "1mo" # 每月重置
  1. 为用户创建密钥
curl -L -X POST 'http://0.0.0.0:4000/key/generate' \
-H 'Authorization: Bearer sk-1234' \
-H 'Content-Type: application/json' \
-d '{}'

预期响应:

{
...
"key": "sk-X53RdxnDhzamRwjKXR4IHg"
}
  1. 测试一下!
curl -L -X POST 'http://0.0.0.0:4000/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer sk-X53RdxnDhzamRwjKXR4IHg' \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hey, how's it going?"}]
}'

预期响应:

{
"error": {
"message": "ExceededBudget: User=<user_id> over budget. Spend=3.7e-05, Budget=0.0",
"type": "budget_exceeded",
"param": null,
"code": "400"
}
}

授予对新模型的访问权限

使用模型访问组为用户提供对选定模型的访问权限,并随着时间的推移向其中添加新模型(例如 mistral、llama-2 等)。

/key/generate/user/new 之间这样做有什么区别?如果在 /user/new 上这样做,它将跨为该用户生成的多个密钥持续存在。

步骤1. 在 config.yaml 中分配模型、访问组

model_list:
- model_name: text-embedding-ada-002
litellm_params:
model: azure/azure-embedding-model
api_base: "os.environ/AZURE_API_BASE"
api_key: "os.environ/AZURE_API_KEY"
api_version: "2023-07-01-preview"
model_info:
access_groups: ["beta-models"] # 👈 模型访问组

步骤 2. 创建带有访问组密钥

curl --location 'http://localhost:4000/user/new' \
-H 'Authorization: Bearer <your-master-key>' \
-H 'Content-Type: application/json' \
-d '{"models": ["beta-models"], # 👈 模型访问组
"max_budget": 0}'

为现有内部用户创建新密钥

只需在 /key/generate 请求中包含 user_id。

curl --location 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer <your-master-key>' \
--header 'Content-Type: application/json' \
--data '{"models": ["azure-models"], "user_id": "krrish@berri.ai"}'
优云智算