Skip to main content

✨ 企业功能

tip

如需获取许可证,请在此处与我们联系 here

功能:

审计日志

存储对TeamsVirtual Keys进行的创建、更新、删除操作的审计日志。

步骤1 开启审计日志

litellm_settings:
store_audit_logs: true

使用此配置启动litellm代理。

步骤2 测试 - 创建一个团队

curl --location 'http://0.0.0.0:4000/team/new' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"max_budget": 2
}'

步骤3 预期日志

{
"id": "e1760e10-4264-4499-82cd-c08c86c8d05b",
"updated_at": "2024-06-06T02:10:40.836420+00:00",
"changed_by": "109010464461339474872",
"action": "created",
"table_name": "LiteLLM_TeamTable",
"object_id": "82e725b5-053f-459d-9a52-867191635446",
"before_value": null,
"updated_values": {
"team_id": "82e725b5-053f-459d-9a52-867191635446",
"admins": [],
"members": [],
"members_with_roles": [
{
"role": "admin",
"user_id": "109010464461339474872"
}
],
"max_budget": 2.0,
"models": [],
"blocked": false
}
}

跟踪自定义标签的支出

要求:

使用 - /chat/completions请求与请求标签

curl -L -X POST 'http://0.0.0.0:4000/key/generate' \
-H 'Authorization: Bearer sk-1234' \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"tags": ["tag1", "tag2", "tag3"]
}
}

'

查看每个标签的支出

/spend/tags 请求格式

curl -X GET "http://0.0.0.0:4000/spend/tags" \
-H "Authorization: Bearer sk-1234"

/spend/tags 响应格式

[
{
"individual_request_tag": "model-anthropic-claude-v2.1",
"log_count": 6,
"total_spend": 0.000672
},
{
"individual_request_tag": "app-ishaan-local",
"log_count": 4,
"total_spend": 0.000448
},
{
"individual_request_tag": "app-ishaan-prod",
"log_count": 2,
"total_spend": 0.000224
}
]

使用自定义元数据跟踪支出

要求:

用法 - /chat/completions 请求与特殊支出日志元数据

curl -L -X POST 'http://0.0.0.0:4000/key/generate' \
-H 'Authorization: Bearer sk-1234' \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"spend_logs_metadata": {
"hello": "world"
}
}
}

'

查看带有自定义元数据的支出

/spend/logs 请求格式

curl -X GET "http://0.0.0.0:4000/spend/logs?request_id=<your-call-id" \ # 例如:chatcmpl-9ZKMURhVYSi9D6r6PJ9vLcayIK0Vm
-H "Authorization: Bearer sk-1234"

/spend/logs 响应格式

[
{
"request_id": "chatcmpl-9ZKMURhVYSi9D6r6PJ9vLcayIK0Vm",
"call_type": "acompletion",
"metadata": {
"user_api_key": "88dc28d0f030c55ed4ab77ed8faf098196cb1c05df778539800c9f1243fe6b4b",
"user_api_key_alias": null,
"spend_logs_metadata": { # 👈 记录的自定义元数据
"hello": "world"
},
"user_api_key_team_id": null,
"user_api_key_user_id": "116544810872468347480",
"user_api_key_team_alias": null
},
}
]

强制要求LLM请求中的必要参数

当你希望强制所有请求包含某些参数时使用此功能。例如,你需要所有请求都包含 user["metadata"]["generation_name"] 参数。

步骤1 在 config.yaml 中定义所有要强制的参数

这意味着 ["user"]["metadata"]["generation_name"] 在所有向 LiteLLM 发送的 LLM 请求中都是必需的。

general_settings:
master_key: sk-1234
enforced_params:
- user
- metadata.generation_name

启动 LiteLLM 代理

步骤2 验证是否有效

curl --location 'http://localhost:4000/chat/completions' \
--header 'Authorization: Bearer sk-5fmYeaUEbAMpwBNT-QpxyA' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "hi"
}
]
}'

预期响应

{"error":{"message":"Authentication Error, BadRequest please pass param=user in request body. This is a required param","type":"auth_error","param":"None","code":401}}% 

控制可用公共、私有路由

限制代理的某些端点

info

❓ 当你想要:

  • 将现有私有路由变为公共路由
  • 将某些路由设置为仅限管理员访问的路由

用法 - 定义公共、仅限管理员访问的路由

步骤1 - 在 config.yaml 中设置

路由类型可选需要虚拟密钥认证管理员可访问所有角色可访问描述
public_routes无需任何认证即可访问的路由
admin_only_routesProxy Admin 可访问的路由
allowed_routes在代理上公开的路由。如果未设置则公开所有路由。

LiteLLMRoutes.public_routes 是一个 ENUM,对应于 LiteLLM 上的默认公共路由。你可以在这里查看

general_settings:
master_key: sk-1234
public_routes: ["LiteLLMRoutes.public_routes", "/spend/calculate"] # 无需任何认证即可访问的路由
admin_only_routes: ["/key/generate"] # 可选 - 仅限代理管理员访问的路由
allowed_routes: ["/chat/completions", "/spend/calculate", "LiteLLMRoutes.public_routes"] # 可选 - 认证后任何人可访问的路由

第二步 - 启动代理

litellm --config config.yaml

第三步 - 测试它

curl --request POST \
--url 'http://localhost:4000/spend/calculate' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Hey, how'\''s it going?"}]
}'

🎉 期望这个端点在没有 Authorization / Bearer Token 的情况下也能工作

防护栏 - 密钥检测/重写

❓ 使用此功能来重写发送到LLM的请求中的API密钥、秘密信息。

例如,如果你想重写以下请求中的 OPENAI_API_KEY 的值

传入请求

{
"messages": [
{
"role": "user",
"content": "Hey, how's it going, API_KEY = 'sk_1234567890abcdef'",
}
]
}

审核后的请求

{
"messages": [
{
"role": "user",
"content": "Hey, how's it going, API_KEY = '[REDACTED]'",
}
]
}

使用方法

第一步 将此添加到你的 config.yaml 中

litellm_settings:
callbacks: ["hide_secrets"]

第二步 使用 --detailed_debug 运行 litellm 代理以查看服务器日志

litellm --config config.yaml --detailed_debug

第三步 使用请求进行测试

发送此请求

curl --location 'http://localhost:4000/chat/completions' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"model": "llama3",
"messages": [
{
"role": "user",
"content": "what is the value of my open ai key? openai_api_key=sk-1234998222"
}
]
}'

期望在你的 litellm 服务器日志中看到以下警告

LiteLLM Proxy:WARNING: secret_detection.py:88 - 在消息中检测到并重写了秘密信息: ['Secret Keyword']

你还可以看到 litellm 发送给 API 提供者的原始请求

POST 请求从 LiteLLM 发送:
curl -X POST \
https://api.groq.com/openai/v1/ \
-H 'Authorization: Bearer gsk_mySVchjY********************************************' \
-d {
"model": "llama3-8b-8192",
"messages": [
{
"role": "user",
"content": "what is the time today, openai_api_key=[REDACTED]"
}
],
"stream": false,
"extra_body": {}
}

按 API 密钥开启/关闭密钥检测

❓ 当你需要按 API 密钥开启/关闭防护栏时使用此功能

第一步 创建密钥并关闭 hide_secrets

👉 使用 /key/generate/key/update 设置 "permissions": {"hide_secrets": false}

这意味着此 API 密钥的所有请求都将关闭 hide_secrets 防护栏

curl --location 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"permissions": {"hide_secrets": false}
}'
# {"permissions":{"hide_secrets":false},"key":"sk-jNm1Zar7XfNdZXp49Z1kSQ"}  

第二步 使用新密钥进行测试

curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Authorization: Bearer sk-jNm1Zar7XfNdZXp49Z1kSQ' \
--header 'Content-Type: application/json' \
--data '{
"model": "llama3",
"messages": [
{
"role": "user",
"content": "我的OpenAI密钥看起来格式正确吗 OpenAI_API_KEY=sk-1234777"
}
]
}'

期望在服务器日志中看到 sk-1234777

info

hide_secrets 防护检查在此请求中未运行,因为 api key=sk-jNm1Zar7XfNdZXp49Z1kSQ 设置了 "permissions": {"hide_secrets": false}

内容审核

使用LLM Guard进行内容审核

在你的环境中设置LLM Guard API Base

LLM_GUARD_API_BASE = "http://0.0.0.0:8192" # 已部署的llm guard api

llmguard_moderations 添加为回调

litellm_settings:
callbacks: ["llmguard_moderations"]

现在你可以轻松测试它

  • 发起一个常规的 /chat/completion 调用

  • 检查代理日志中是否有包含 LLM Guard: 的语句

预期结果:

LLM Guard: 收到响应 - {"sanitized_prompt": "hello world", "is_valid": true, "scanners": { "Regex": 0.0 }}

按密钥开启/关闭

1. 更新配置

litellm_settings:
callbacks: ["llmguard_moderations"]
llm_guard_mode: "key-specific"

2. 创建新密钥

curl --location 'http://localhost:4000/key/generate' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"models": ["fake-openai-endpoint"],
"permissions": {
"enable_llm_guard_check": true # 👈 关键更改
}
}'

# 返回 {..'key': 'my-new-key'}

3. 测试它!

curl --location 'http://0.0.0.0:4000/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer my-new-key' \ # 👈 测试密钥
--data '{"model": "fake-openai-endpoint", "messages": [
{"role": "system", "content": "Be helpful"},
{"role": "user", "content": "What do you know?"}
]
}'

按请求开启/关闭

1. 更新配置

litellm_settings:
callbacks: ["llmguard_moderations"]
llm_guard_mode: "request-specific"

2. 创建新密钥

curl --location 'http://localhost:4000/key/generate' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data '{
"models": ["fake-openai-endpoint"],
}'

# 返回 {..'key': 'my-new-key'}

3. 测试它!

import openai
client = openai.OpenAI(
api_key="sk-1234",
base_url="http://0.0.0.0:4000"
)

# 请求发送到 litellm 代理上设置的模型,`litellm --model`
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages = [
{
"role": "user",
"content": "这是一个测试请求,写一首短诗"
}
],
extra_body={ # 传递任何提供者特定的参数,如果不被 openai 支持,请参阅 https://docs.litellm.ai/docs/completion/input#provider-specific-params
"metadata": {
"permissions": {
"enable_llm_guard_check": True # 👈 关键更改
},
}
}
)

print(response)

使用LlamaGuard进行内容审核

目前支持与Sagemaker的LlamaGuard端点配合使用。

如何在config.yaml中启用此功能:

litellm_settings:
callbacks: ["llamaguard_moderations"]
llamaguard_model_name: "sagemaker/jumpstart-dft-meta-textgeneration-llama-guard-7b"

确保在你的环境中设置了相关密钥,例如:

os.environ["AWS_ACCESS_KEY_ID"] = ""
os.environ["AWS_SECRET_ACCESS_KEY"] = ""
os.environ["AWS_REGION_NAME"] = ""

自定义LlamaGuard提示

要修改llama guard评估的不安全类别,只需创建你自己版本的此类别列表

将你的代理指向它

callbacks: ["llamaguard_moderations"]
llamaguard_model_name: "sagemaker/jumpstart-dft-meta-textgeneration-llama-guard-7b"
llamaguard_unsafe_content_categories: /path/to/llamaguard_prompt.txt

使用Google文本审核进行内容审核

需要将你的 GOOGLE_APPLICATION_CREDENTIALS 设置在你的 .env 文件中(与VertexAI相同)。

如何在config.yaml中启用此功能:

litellm_settings:
callbacks: ["google_text_moderation"]

设置自定义置信度阈值

Google Moderations 会根据多个类别检查测试内容。来源

设置全局默认置信度阈值

默认情况下,该值设置为 0.8。但您可以在 config.yaml 中覆盖此设置。

litellm_settings: 
google_moderation_confidence_threshold: 0.4

设置类别特定的置信度阈值

在您的 config.yaml 中设置类别特定的置信度阈值。如果没有设置,将使用全局默认值。

litellm_settings: 
toxic_confidence_threshold: 0.1

以下是类别特定的值:

类别设置
"toxic"toxic_confidence_threshold: 0.1
"insult"insult_confidence_threshold: 0.1
"profanity"profanity_confidence_threshold: 0.1
"derogatory"derogatory_confidence_threshold: 0.1
"sexual"sexual_confidence_threshold: 0.1
"death_harm_and_tragedy"death_harm_and_tragedy_threshold: 0.1
"violent"violent_threshold: 0.1
"firearms_and_weapons"firearms_and_weapons_threshold: 0.1
"public_safety"public_safety_threshold: 0.1
"health"health_threshold: 0.1
"religion_and_belief"religion_and_belief_threshold: 0.1
"illicit_drugs"illicit_drugs_threshold: 0.1
"war_and_conflict"war_and_conflict_threshold: 0.1
"politics"politics_threshold: 0.1
"finance"finance_threshold: 0.1
"legal"legal_threshold: 0.1

Swagger 文档 - 自定义路由 + 品牌化

info

需要 LiteLLM 企业密钥才能使用。获取免费 2 周试用这里

在您的环境中设置 LiteLLM 密钥

LITELLM_LICENSE=""

自定义标题 + 描述

在您的环境中设置:

DOCS_TITLE="TotalGPT"
DOCS_DESCRIPTION="示例公司描述"

自定义路由

隐藏管理员路由,不让用户看到。

在您的环境中设置:

DOCS_FILTERED="True" # 仅向用户显示 openai 路由

启用被阻止用户列表

如果使用此用户 ID 进行的任何调用,都将被拒绝 - 如果您想让用户选择退出 AI 功能,请使用此功能

litellm_settings: 
callbacks: ["blocked_user_check"]
blocked_user_list: ["user_id_1", "user_id_2", ...] # 也可以是一个 .txt 文件路径,例如:`/relative/path/blocked_list.txt`

如何测试

user=<user_id> 设置为可能已选择退出的用户的用户 ID。

import openai
client = openai.OpenAI(
api_key="sk-1234",
base_url="http://0.0.0.0:4000"
)

# 发送到 litellm proxy 上设置的模型的请求,`litellm --model`
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages = [
{
"role": "user",
"content": "这是一个测试请求,写一首短诗"
}
],
user="user_id_1"
)

print(response)

通过 API 使用

阻止客户 ID 的所有调用

curl -X POST "http://0.0.0.0:4000/customer/block" \
-H "Authorization: Bearer sk-1234" \
-D '{
"user_ids": [<user_id>, ...]
}'

解除用户 ID 的调用阻止

curl -X POST "http://0.0.0.0:4000/user/unblock" \
-H "Authorization: Bearer sk-1234" \
-D '{
"user_ids": [<user_id>, ...]
}'

启用禁用关键词列表

litellm_settings: 
callbacks: ["banned_keywords"]
banned_keywords_list: ["hello"] # 也可以是一个 .txt 文件 - 例如:`/relative/path/keywords.txt`

测试此功能

curl --location 'http://0.0.0.0:4000/chat/completions' \
--header 'Content-Type: application/json' \
--data ' {
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "你好,世界!"
}
]
}
'

公共模型中心

共享一个可供用户使用的可用模型的公共页面

[BETA] AWS 密钥管理器 - 密钥解密

这是一个测试版功能,可能会发生变化。

第一步。 在环境中添加 USE_AWS_KMS

USE_AWS_KMS="True"

第二步。 在环境中添加加密密钥 LITELLM_SECRET_AWS_KMS_

LITELLM_SECRET_AWS_KMS_DATABASE_URL="AQICAH.."

LiteLLM将在运行时找到这个值并使用解密后的DATABASE_URL="postgres://.."

第三步: 启动代理

$ litellm

它是如何工作的?

  • 在服务器启动前运行密钥解密。代码
  • 它将解密后的值添加到Python进程的os.environ中。

注意: 使用os.environ在Python脚本中设置环境变量,不会使该变量通过SSH会话或任何其他独立启动的新进程访问。以这种方式设置的环境变量仅影响当前进程及其子进程。

在LiteLLM代理上设置最大请求/响应大小

如果你想为代理服务器设置最大请求/响应大小,可以使用此功能。如果请求大小超过设定值,请求将被拒绝并触发Slack警报。

使用方法

第一步: 设置max_request_size_mbmax_response_size_mb

在这个示例中,我们将max_request_size_mb设置为一个非常低的限制,并预期它会失败。

info

在生产环境中,我们建议将max_request_size_mb / max_response_size_mb设置为32 MB左右。

model_list:
- model_name: fake-openai-endpoint
litellm_params:
model: openai/fake
api_key: fake-key
api_base: https://exampleopenaiendpoint-production.up.railway.app/
general_settings:
master_key: sk-1234

# 安全控制
max_request_size_mb: 0.000000001 # 👈 关键更改 - 最大请求大小(MB)。设置为非常低以进行测试
max_response_size_mb: 100 # 👈 关键更改 - 最大响应大小(MB)

第二步: 使用/chat/completions请求进行测试

curl http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "fake-openai-endpoint",
"messages": [
{"role": "user", "content": "Hello, Claude!"}
]
}'

预期响应 我们预期这个请求会失败,因为请求大小超过了max_request_size_mb

{"error":{"message":"Request size is too large. Request size is 0.0001125335693359375 MB. Max size is 1e-09 MB","type":"bad_request_error","param":"content-length","code":400}}
优云智算