跳至主要內容

Rubrik 防護欄

使用 Rubrik 的工具封鎖與記錄整合,將 LLM 工具呼叫與外部政策服務驗證,並將所有 LLM 請求/回應以批次記錄。

主要功能:

  • 工具封鎖:在 LLM 完成後,針對外部 Rubrik 服務驗證工具呼叫。遭封鎖的工具呼叫會觸發政策違規回應。
  • 批次記錄:以可設定的取樣與批次處理,將所有 LLM 請求與回應記錄到 Rubrik。
  • 寬鬆失敗:如果工具封鎖服務無法使用,請求會在不變更的情況下直接通過。

快速開始

1. 設定 config.yaml

認證資訊可直接在 YAML 設定中指定,或透過環境變數設定。建議使用設定檔方式。

model_list:
- model_name: gpt-4
litellm_params:
model: openai/gpt-4
api_key: os.environ/OPENAI_API_KEY

guardrails:
- guardrail_name: "rubrik"
litellm_params:
guardrail: rubrik
mode: "post_call"
api_key: "your-rubrik-api-key"
api_base: "https://your-rubrik-service.example.com"
default_on: true

您也可以在設定中參照環境變數:

guardrails:
- guardrail_name: "rubrik"
litellm_params:
guardrail: rubrik
mode: "post_call"
api_key: os.environ/RUBRIK_API_KEY
api_base: os.environ/RUBRIK_WEBHOOK_URL
default_on: true

2. 啟動 Proxy

litellm --config config.yaml --port 4000

3. 測試

curl -X POST http://localhost:4000/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "What is the weather in SF?"}],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
}
}
}
]
}'

設定參考

YAML 設定參數

這些會在您的 config.yaml 中的 guardrails.[].litellm_params 下設定:

參數必填說明
guardrail: rubrik選取 Rubrik 防護欄整合
mode: "post_call"在收到 LLM 回應後執行
api_baseRubrik webhook 基礎 URL。可使用 os.environ/RUBRIK_WEBHOOK_URL。若省略,則回退至 RUBRIK_WEBHOOK_URL 環境變數。
api_keyRubrik API 金鑰。可使用 os.environ/RUBRIK_API_KEY。若省略,則回退至 RUBRIK_API_KEY 環境變數。
default_ontrue 時,防護欄會在所有請求上執行,無需每次請求個別啟用

環境變數

當 YAML 設定中未設定 api_base / api_key 時,這些可作為選用的備援。RUBRIK_SAMPLING_RATERUBRIK_BATCH_SIZE 只能透過環境變數設定。

變數必填預設值說明
RUBRIK_WEBHOOK_URL只有在設定中未包含 api_base 時需要Rubrik webhook 服務的基礎 URL
RUBRIK_API_KEY用於向 Rubrik 服務驗證的 Bearer 權杖
RUBRIK_SAMPLING_RATE1.0記錄的請求比例(0.0 到 1.0)。不影響工具封鎖,工具封鎖一律執行。設為 0.5 可記錄約 50% 的請求。
RUBRIK_BATCH_SIZE512在清空前暫存的記錄項目數。記錄也會依週期性間隔清空。

工具封鎖如何運作

  1. 當 LLM 傳回包含工具呼叫的回應後,Rubrik 防護欄會將其送至位於 {api_base}/v1/after_completion/openai/v1 的封鎖服務。
  2. 該服務會根據已設定的政策評估每個工具呼叫,並回傳 允許 的工具呼叫集合。
  3. 如果有任何工具呼叫遭封鎖,Proxy 會傳回政策違規說明作為回應,而不是原始 LLM 回應。
  4. 如果封鎖服務無法連線或回傳錯誤,防護欄會寬鬆失敗——原始回應會在不變更的情況下傳回。

請求/回應格式

防護欄會將 JSON 信封傳送至封鎖服務:

{
"request": {
"messages": [...],
"model": "gpt-4",
"proxy_server_request": {...}
},
"response": {
"id": "chatcmpl-...",
"object": "chat.completion",
"choices": [{
"message": {
"role": "assistant",
"tool_calls": [...]
}
}]
}
}

服務應回傳 OpenAI chat completion 格式的回應,其中只包含 允許 的工具呼叫,以及可選的 content 欄位,用於提供封鎖說明。


批次記錄如何運作

所有 LLM 請求(成功與失敗)都會排入佇列,並以批次傳送至 {api_base}/v1/litellm/batch

  • 當佇列達到 RUBRIK_BATCH_SIZE(預設 512)或依週期性間隔(預設 5 秒)時,會清空記錄。這些預設值承襲自 LiteLLM 的全域設定。
  • 在高流量部署中,使用 RUBRIK_SAMPLING_RATE 來降低記錄量。取樣只會影響記錄——不論取樣率為何,工具封鎖一律執行。
  • 對於 Anthropic /v1/messages 請求,為了在工具封鎖與記錄之間保持一致,記錄 ID 會標準化為 litellm_call_id