自定义 LLM 定价
概述
LiteLLM 为所有 LLM 提供商提供灵活的成本跟踪和定价自定义功能
- 自定义定价 - 覆盖默认模型成本或为自定义模型设置定价
- Token 定价 - 基于输入/输出 Token 跟踪成本(最常见)
- 时长定价 - 基于运行时长跟踪成本(例如 Sagemaker)
- 零成本模型 - 通过将成本设置为 0,绕过免费/本地部署模型的预算检查
- 提供商折扣 - 对特定提供商应用百分比折扣
- 提供商利润率 - 在 LLM 成本中增加费用/利润率,用于内部结算
- 基础模型映射 - 确保 Azure 部署的成本跟踪准确
默认情况下,响应成本可通过日志对象中的 kwargs["response_cost"] 在成功时获取(同步 + 异步)。了解更多
LiteLLM 已经在我们的 模型成本表 中内置了 100 多个模型的定价。
时长定价(例如 Sagemaker)
与 LiteLLM 代理服务器一起使用
第一步:将定价添加到 config.yaml
model_list:
- model_name: sagemaker-completion-model
litellm_params:
model: sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4
model_info:
input_cost_per_second: 0.000420
- model_name: sagemaker-embedding-model
litellm_params:
model: sagemaker/berri-benchmarking-gpt-j-6b-fp16
model_info:
input_cost_per_second: 0.000420
步骤 2:启动代理
litellm /path/to/config.yaml
第三步:查看支出日志
Token 定价(例如 Azure)
配合 LiteLLM 代理服务器使用
model_list:
- model_name: azure-model
litellm_params:
model: azure/<your_deployment_name>
api_key: os.environ/AZURE_API_KEY
api_base: os.environ/AZURE_API_BASE
api_version: os.environ/AZURE_API_VERSION
model_info:
input_cost_per_token: 0.000421 # 👈 ONLY to track cost per token
output_cost_per_token: 0.000520 # 👈 ONLY to track cost per token
覆盖模型成本表
您可以覆盖 我们的模型成本表,为您映射的模型使用自定义定价。
只需在配置中的模型下添加 model_info 键,并覆盖所需的键即可。
示例:覆盖 Anthropic prod/claude-3-5-sonnet-20241022 模型的成本映射。
model_list:
- model_name: "prod/claude-3-5-sonnet-20241022"
litellm_params:
model: "anthropic/claude-3-5-sonnet-20241022"
api_key: os.environ/ANTHROPIC_PROD_API_KEY
model_info:
input_cost_per_token: 0.000006
output_cost_per_token: 0.00003
cache_creation_input_token_cost: 0.0000075
cache_read_input_token_cost: 0.0000006
其他成本键
您还可以使用其他键来指定不同场景和模式下的成本:
input_cost_per_token_above_200k_tokens- 上下文超过 200k Token 时的输入 Token 成本output_cost_per_token_above_200k_tokens- 上下文超过 200k Token 时的输出 Token 成本cache_creation_input_token_cost_above_200k_tokens- 大上下文下的缓存创建成本cache_read_input_token_cost_above_200k_token- 大上下文下的缓存读取成本input_cost_per_image- 多模态请求中每张图片的成本output_cost_per_reasoning_token- 推理 Token 成本(例如 OpenAI o1 模型)input_cost_per_audio_token- 音频输入 Token 成本output_cost_per_audio_token- 音频输出 Token 成本input_cost_per_video_per_second- 每秒视频输入的成本input_cost_per_video_per_second_above_128k_tokens- 大上下文下的视频成本input_cost_per_character- 某些提供商基于字符的定价input_cost_per_token_priority/output_cost_per_token_priority- 优先级/按需付费定价(Vertex AI Gemini, Bedrock)input_cost_per_token_flex/output_cost_per_token_flex- 批量/灵活定价
这些键会随着新模型处理多模态方式的演进而变化。最新版本可在 https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json 找到。
服务层级 / 按需付费定价(Vertex AI, Bedrock)
对于支持多个定价层级的提供商(例如 Vertex AI PayGo,Bedrock 服务层级),LiteLLM 会根据响应自动应用正确的成本。
- Vertex AI Gemini: 使用
usageMetadata.trafficType(ON_DEMAND_PRIORITY→ 优先级,FLEX/BATCH→ 灵活)。详见 Vertex AI - 按需付费 / 优先级成本跟踪。 - Bedrock: 使用来自响应的
serviceTier。详见 Bedrock - 用量 - 服务层级。
零成本模型(绕过预算检查)
使用场景:您拥有本地部署或免费模型,即使在用户超出预算限制时也应该能够访问这些模型。
解决方案 ✅:显式地将 input_cost_per_token 和 output_cost_per_token 都设置为 0,以绕过该模型的所有预算检查。
当模型配置为零成本时,LiteLLM 将自动跳过该模型的所有请求的预算检查(用户、团队、团队成员、最终用户、组织和全局代理预算)。
重要提示:两项成本都必须明确设置为 0。如果成本为 null 或未定义,系统会将该模型视为有成本,并应用预算检查。
配置示例
model_list:
# On-premises model - free to use
- model_name: on-prem-llama
litellm_params:
model: ollama/llama3
api_base: http://:11434
model_info:
input_cost_per_token: 0 # 👈 Explicitly set to 0
output_cost_per_token: 0 # 👈 Explicitly set to 0
# Paid cloud model - budget checks apply
- model_name: gpt-4
litellm_params:
model: gpt-4
api_key: os.environ/OPENAI_API_KEY
# No model_info - uses default pricing from cost map
行为
使用上述配置
- 用户预算超支 → 仍可使用
on-prem-llama✅,但会被限制使用gpt-4❌ - 团队预算超支 → 仍可使用
on-prem-llama✅,但会被限制使用gpt-4❌ - 最终用户预算超支 → 仍可使用
on-prem-llama✅,但会被限制使用gpt-4❌
这确保了您的免费/本地模型在预算受限时仍可访问,同时付费模型仍受到严格管控。
为成本跟踪设置 'base_model'(例如 Azure 部署)
问题:Azure 在使用 azure/gpt-4-1106-preview 时在响应中返回 gpt-4。这导致成本跟踪不准确
解决方案 ✅ :在配置中设置 base_model,以便 litellm 使用正确的模型来计算 Azure 成本。
从 此处 获取基础模型名称。
带有 base_model 的配置示例
model_list:
- model_name: azure-gpt-3.5
litellm_params:
model: azure/chatgpt-v-2
api_base: os.environ/AZURE_API_BASE
api_key: os.environ/AZURE_API_KEY
api_version: "2023-07-01-preview"
model_info:
base_model: azure/gpt-4-1106-preview
带日期的 OpenAI 模型版本
当 OpenAI 在响应中返回的日期模型名称与您配置的模型名称不同时,base_model 也非常有用。
示例:您为 gpt-4o-mini-audio-preview 配置了自定义定价,但 OpenAI 在响应中返回了 gpt-4o-mini-audio-preview-2024-12-17。由于 LiteLLM 使用响应中的模型名称进行定价查找,因此您的自定义定价将不会生效。
解决方案 ✅:将 base_model 设置为您希望 LiteLLM 用于定价查找的键。
model_list:
- model_name: my-audio-model
litellm_params:
model: openai/gpt-4o-mini-audio-preview
api_key: os.environ/OPENAI_API_KEY
model_info:
base_model: gpt-4o-mini-audio-preview # 👈 Used for pricing lookup
input_cost_per_token: 0.0000006
output_cost_per_token: 0.0000024
input_cost_per_audio_token: 0.00001
output_cost_per_audio_token: 0.00002
调试
如果您的自定义定价未生效或出现错误,请检查以下内容:
- 使用
LITELLM_LOG="DEBUG"或--detailed_debugCLI 标志运行代理。
litellm --config /path/to/config.yaml --detailed_debug
- 检查日志中是否有此行。
LiteLLM:DEBUG: utils.py:263 - litellm.acompletion
- 检查 'input_cost_per_token' 和 'output_cost_per_token' 是否为 acompletion 函数中的顶层键。
acompletion(
...,
input_cost_per_token: my-custom-price,
output_cost_per_token: my-custom-price,
)
如果这些键不存在,LiteLLM 将不会使用您的自定义定价。
如果问题仍然存在,请在 GitHub 上提交 Issue。