依團隊/金鑰的記錄
概覽
允許每個金鑰/團隊使用各自的 Langfuse 專案/自訂回呼。這可讓記錄與合規需求具備更細緻的控制。
範例使用情境:
Team 1 -> Logs to Langfuse Project 1
Team 2 -> Logs to Langfuse Project 2
Team 3 -> Disabled Logging (for GDPR compliance)
支援的記錄整合
langfusegcs_bucketlangsmitharize
[BETA] 團隊記錄
UI 使用方式
- 建立具有記錄設定的團隊
建立一個名為「AI Agents」的團隊
- 為團隊建立一個金鑰
我們將為團隊「AI Agents」建立一個金鑰。團隊記錄設定將套用於為該團隊建立的所有金鑰。
- 發出測試 LLM API 請求
使用新金鑰發出測試 LLM API 請求,我們預期會在步驟 1 中設定的記錄提供者上看到記錄。
- 在您的記錄提供者上檢查記錄
前往您已設定的記錄提供者,並確認是否已收到步驟 2 的記錄。
API 使用方式
誰可以呼叫這些
代理程式管理員、該團隊所屬組織的組織管理員,以及團隊本身的管理員,都可以列出、設定和移除該團隊的回呼。其他所有人都會收到 403,而某個團隊的管理員不能讀取其他團隊的回呼。
POST /team/{team_id}/disable_logging 是例外:它仍然只限代理程式管理員。想要關閉某個整合的團隊管理員會使用 DELETE /team/{team_id}/callback/{callback_name}。
為每個團隊設定回呼
1. 為團隊設定回呼
我們向 POST /team/{team_id}/callback 發出請求,以新增回呼到
curl -X POST 'http:/localhost:4000/team/dbe2f686-a686-4896-864a-4c3924458709/callback' \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-d '{
"callback_name": "langfuse",
"callback_type": "success",
"callback_vars": {
"langfuse_public_key": "pk",
"langfuse_secret_key": "sk_",
"langfuse_host": "https://cloud.langfuse.com"
}
}'
支援的值
| 欄位 | 支援的值 | 備註 |
|---|---|---|
callback_name | "langfuse", "gcs_bucket" | 目前僅支援 "langfuse"、"gcs_bucket" |
callback_type | "success", "failure", "success_and_failure" | |
callback_vars | 回呼設定的 dict | |
langfuse_public_key | string | Langfuse 必填 |
langfuse_secret_key | string | Langfuse 必填 |
langfuse_host | string | Langfuse 選填(預設為 https://cloud.langfuse.com |
gcs_bucket_name | string | GCS Bucket 必填。您的 GCS bucket 名稱 |
gcs_path_service_account | string | GCS Bucket 必填。您的服務帳戶 json 路徑 |
2. 為團隊建立金鑰
為團隊 dbe2f686-a686-4896-864a-4c3924458709 建立的所有金鑰,都會記錄到 步驟 1. 為團隊設定回呼 中指定的 langfuse 專案
curl --location 'http://0.0.0.0:4000/key/generate' \
--header "Authorization: Bearer $LITELLM_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"team_id": "dbe2f686-a686-4896-864a-4c3924458709"
}'
3. 為團隊發出 /chat/completion 請求
curl -i http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-KbUuE0WNptC0jXapyMmLBA" \
-d '{
"model": "gpt-5.6-terra",
"messages": [
{"role": "user", "content": "Hello, Claude gm!"}
]
}'
預期會記錄到 步驟 1. 為團隊設定回呼 中指定的 langfuse 專案
停用團隊的記錄
若要停用特定團隊的記錄,您可以使用以下端點:
POST /team/{team_id}/disable_logging
此端點會移除指定團隊的所有成功與失敗回呼,實際上等同停用記錄。若要移除單一整合並保留團隊的其他回呼繼續執行,請改用下方文件所述的 DELETE /team/{team_id}/callback/{callback_name}。
步驟 1. 停用團隊的記錄
curl -X POST 'http://localhost:4000/team/YOUR_TEAM_ID/disable_logging' \
-H 'Authorization: Bearer YOUR_API_KEY'
將 YOUR_TEAM_ID 替換為實際的團隊 ID
回應 成功的請求會回傳類似以下的回應:
{
"status": "success",
"message": "Logging disabled for team YOUR_TEAM_ID",
"data": {
"team_id": "YOUR_TEAM_ID",
"success_callbacks": [],
"failure_callbacks": []
}
}
步驟 2. 測試它 - /chat/completions
使用為團隊 = team_id 所建立的金鑰 - 您應該不會在已設定的成功回呼(例如 Langfuse)上看到任何記錄
curl -i http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-KbUuE0WNptC0jXapyMmLBA" \
-d '{
"model": "gpt-5.6-terra",
"messages": [
{"role": "user", "content": "Hello, Claude gm!"}
]
}'
除錯 / 疑難排解
- 使用
GET /team/{team_id}/callback檢查團隊的有效回呼
用這個來檢查團隊=team_id 目前啟用了哪些成功/失敗回呼
curl -X GET 'http://localhost:4000/team/dbe2f686-a686-4896-864a-4c3924458709/callback' \
-H "Authorization: Bearer $LITELLM_API_KEY"
從團隊移除單一回呼
若要在保留團隊其他回呼持續執行的同時,取消註冊一個整合,請使用:
DELETE /team/{team_id}/callback/{callback_name}
在該 callback_name 底下註冊的每個項目都會被移除,涵蓋所有回呼類型,因此同時註冊於 success 和 failure 的整合,只需一次呼叫即可取消註冊。回應會列出仍然保留的回呼,而團隊尚未註冊的 callback_name 會回傳 404,且不會改變任何內容
團隊記錄端點
POST /team/{team_id}/callback將成功/失敗回呼新增至團隊GET /team/{team_id}/callback- 取得團隊的成功/失敗回呼與變數DELETE /team/{team_id}/callback/{callback_name}- 從團隊移除單一回呼POST /team/{team_id}/disable_logging- 移除團隊中的每個回呼
團隊記錄 - config.yaml
開啟/關閉特定團隊 ID 的記錄與快取。
這一節僅限團隊範圍:litellm_settings.default_team_settings 會為屬於某個團隊 ID 的每個金鑰設定回呼。沒有 config.yaml 可用來宣告個別虛擬金鑰;每個金鑰的回呼是透過 /key/generate 或 /key/update API 提供,詳見 以金鑰為基礎的記錄。
由於 config.yaml 是受信任、由操作者控制的設定,因此這裡支援 os.environ/... 參照,並會在啟動時從 proxy 的環境中解析。相同的參照若透過管理 API 傳入則會被拒絕(請參見 API 提供之回呼的機密處理)。
範例:
這個設定會依團隊 ID 將 langfuse 記錄傳送到 2 個不同的 langfuse 專案
litellm_settings:
default_team_settings:
- team_id: "dbe2f686-a686-4896-864a-4c3924458709"
success_callback: ["langfuse"]
langfuse_public_key: os.environ/LANGFUSE_PUB_KEY_1 # Project 1
langfuse_secret: os.environ/LANGFUSE_PRIVATE_KEY_1 # Project 1
- team_id: "06ed1e01-3fa7-4b9e-95bc-f2e59b74f3a8"
success_callback: ["langfuse"]
langfuse_public_key: os.environ/LANGFUSE_PUB_KEY_2 # Project 2
langfuse_secret: os.environ/LANGFUSE_SECRET_2 # Project 2
現在,當您為這個 team-id 產生金鑰 時
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"team_id": "06ed1e01-3fa7-4b9e-95bc-f2e59b74f3a8"}'
所有使用這些金鑰發出的請求,都會將資料記錄到其團隊專屬的記錄。
[BETA] 依金鑰的記錄
使用 /key/generate 或 /key/update 端點,為特定金鑰新增記錄回呼。
依金鑰記錄的運作方式:
- 如果 Key 沒有設定回呼,將使用 config.yaml 檔案中指定的預設回呼
- 如果 Key 已設定回呼,將使用金鑰中指定的回呼
UI 使用方式
- 建立具有記錄設定的金鑰
在建立金鑰時,您可以為該金鑰設定特定的記錄設定。這些記錄設定將用於使用此金鑰發出的所有請求。
- 發出測試 LLM API 請求
使用新金鑰發出測試 LLM API 請求,我們預期會在步驟 1 中設定的記錄提供者上看到記錄。
- 在您的記錄提供者上檢查記錄
前往您已設定的記錄提供者,並確認是否已收到步驟 2 的記錄。
API 使用方式
- Langfuse
- GCS Bucket
- Langsmith
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"logging": [{
"callback_name": "langfuse", # "otel", "gcs_bucket"
"callback_type": "success", # "success", "failure", "success_and_failure"
"callback_vars": {
"langfuse_public_key": "pk-lf-...", # pass the resolved value, not an os.environ/ reference
"langfuse_secret_key": "sk-lf-...", # pass the resolved value, not an os.environ/ reference
"langfuse_host": "https://cloud.langfuse.com"
}
}]
}
}'
每個金鑰都可以指向不同的 Langfuse 專案:為每個專案產生一個金鑰,並在 callback_vars 中傳入該專案的憑證。
API 提供之回呼的機密處理
API 提供的 callback_vars 中的 os.environ/... 參照會被拒絕(自 v1.84 起)。若從請求主體解析環境參照,任何具備金鑰管理存取權的呼叫者都能從 proxy 的環境中讀取任意機密,因此請求會改以驗證錯誤失敗。請在請求中傳入已解析的機密值;LiteLLM 會使用 proxy 的 salt key 將 callback_vars 憑證靜態加密保存。若您希望 proxy 從自己的環境中解析憑證,請在受信任的 config.yaml 中設定該回呼(全域設定於 litellm_settings,或透過 default_team_settings 逐團隊設定)。
- 建立虛擬金鑰,以記錄到特定的 GCS Bucket
在您的環境中設定 GCS_SERVICE_ACCOUNT 為服務帳戶 json 的路徑
export GCS_SERVICE_ACCOUNT=/path/to/service-account.json # GCS_SERVICE_ACCOUNT=/Users/ishaanjaffer/Downloads/adroit-crow-413218-a956eef1a2a8.json
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"logging": [{
"callback_name": "gcs_bucket", # "otel", "gcs_bucket"
"callback_type": "success", # "success", "failure", "success_and_failure"
"callback_vars": {
"gcs_bucket_name": "my-gcs-bucket", # Name of your GCS Bucket to log to
"gcs_path_service_account": "/path/to/service-account.json" # path to the service account json, not an os.environ/ reference
}
}]
}
}'
- 測試它 -
/chat/completions請求
使用步驟 3 的虛擬金鑰發出 /chat/completions 請求
在成功請求時,您應該會在 GCS Bucket 上看到您的記錄
curl -i http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-Fxq5XSyWKeXDKfPdqXZhPg" \
-d '{
"model": "fake-openai-endpoint",
"messages": [
{"role": "user", "content": "Hello, Claude"}
],
"user": "hello",
}'
- 建立虛擬金鑰,以記錄到特定的 Langsmith 專案
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"logging": [{
"callback_name": "langsmith", # "otel", "gcs_bucket"
"callback_type": "success", # "success", "failure", "success_and_failure"
"callback_vars": {
"langsmith_api_key": "lsv2_pt_...", # resolved Langsmith API key, not an os.environ/ reference
"langsmith_project": "pr-brief-resemblance-72", # project name on langsmith
"langsmith_base_url": "https://api.smith.langchain.com"
}
}]
}
}'
- 測試它 -
/chat/completions請求
使用步驟 3 的虛擬金鑰發出 /chat/completions 請求
在成功請求時,您應該會在您的 Langsmith 專案上看到您的記錄
curl -i http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-Fxq5XSyWKeXDKfPdqXZhPg" \
-d '{
"model": "fake-openai-endpoint",
"messages": [
{"role": "user", "content": "Hello, Claude"}
],
"user": "hello",
}'
透過在此處提交問題單,協助我們改善此功能
檢查金鑰回呼是否已正確設定 /key/health
使用該金鑰呼叫 /key/health,以檢查回呼設定是否已正確設定
將金鑰放在請求標頭中
curl -X POST "http://localhost:4000/key/health" \
-H "Authorization: Bearer <your-key>" \
-H "Content-Type: application/json"
- 金鑰設定正確時的回應
- 金鑰設定不正確時的回應
回呼記錄設定正確時的回應:
當記錄回呼已正確設定時,金鑰即為 healthy。
{
"key": "healthy",
"logging_callbacks": {
"callbacks": [
"gcs_bucket"
],
"status": "healthy",
"details": "No logger exceptions triggered, system is healthy. Manually check if logs were sent to ['gcs_bucket']"
}
}
當記錄回呼未正確設定時的回應
當記錄回呼未正確設定時,金鑰即為 unhealthy。
{
"key": "unhealthy",
"logging_callbacks": {
"callbacks": [
"gcs_bucket"
],
"status": "unhealthy",
"details": "Logger exceptions triggered, system is unhealthy: Failed to load vertex credentials. Check to see if credentials containing partial/invalid information."
}
}
停用/啟用訊息遮罩
當您已全域停用時,可使用此功能為特定金鑰啟用 prompt 記錄
全域停用 prompt 記錄(訊息遮罩)的 example config.yaml
model_list:
- model_name: gpt-5.6-terra
litellm_params:
model: gpt-5.6-terra
litellm_settings:
callbacks: ["datadog"]
turn_off_message_logging: True # 👈 Globally logging prompt / response is disabled
為金鑰啟用 prompt 記錄
將您要啟用 prompt 記錄的金鑰之 turn_off_message_logging 設為 false。這會覆寫全域的 turn_off_message_logging 設定。
curl -X POST 'http://0.0.0.0:4000/key/generate' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"metadata": {
"logging": [{
"callback_name": "datadog",
"callback_vars": {
"turn_off_message_logging": false # 👈 Enable prompt logging
}
}]
}
}'
來自 /key/generate 的回應
{
"key_alias": null,
"key": "sk-9v6I-jf9-eYtg_PwM8OKgQ",
"metadata": {
"logging": [
{
"callback_name": "datadog",
"callback_vars": {
"turn_off_message_logging": false
}
}
]
},
"token_id": "a53a33db8c3cf832ceb28565dbb034f19f0acd69ee7f03b7bf6752f9f804081e"
}
將金鑰用於 /chat/completions 請求
此金鑰會將 prompt 記錄到請求中指定的回呼
curl -i http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-9v6I-jf9-eYtg_PwM8OKgQ" \
-d '{
"model": "gpt-5.6-terra",
"messages": [
{"role": "user", "content": "hi my name is ishaan what key alias is this"}
]
}'