LiteLLM可統一調用多家大語言模型API,並通過回調將每次調用的中繼資料寫入外部儲存。雲原生資料倉儲AnalyticDB PostgreSQL版Supabase(以下簡稱AnalyticDB Supabase)可作為LLM調用日誌與費用台賬的落庫目標:成功與失敗請求均可記錄,便於在SQL Editor或Table Editor中查詢、統計與故障排查。本文介紹如何在AnalyticDB Supabase上建表、擷取Project URL與service_role密鑰、配置IP白名單,以及在應用中啟用LiteLLM的Supabase回調。
AnalyticDB Supabase產品能力請參見Supabase,LiteLLM整合細節以LiteLLM官方文檔為準。
適用情境
使用LiteLLM(Python SDK或LiteLLM Proxy)調用OpenAI、Azure、Anthropic等模型,需要將模型名、訊息、響應、耗時、費用、錯誤資訊等統一寫入Postgres。
希望在Supabase Dashboard內用SQL做成本分析、按使用者彙總用量、失敗率分析。
LiteLLM應用或代理部署在公網或AnalyticDB Supabase相同VPC的環境。
前提條件
- 重要
免費測試專案僅適用於開發測試,不建議用於生產。生產環境請選用付費規格並做好容量與備份規劃。
已明確發起LiteLLM請求的Runtime環境的IP,用於配置白名單。
運行環境可訪問Supabase專案提供的Project URL(HTTPS)。若部署在阿里雲VPC內,則使用VPC內的串連串地址。
操作步驟
步驟一:建立日誌表
登入Supabase Dashboard,在側邊欄單擊 SQL Editor ,執行以下DDL。您也可以選擇使用MCP Server或CLI完成DDL操作。
列名需與下表一致(LiteLLM依賴固定欄位寫入)。
若使用非預設表名,需在應用側配置自訂表格名。
CREATE TABLE
public.request_logs (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
created_at TIMESTAMP WITH TIME ZONE NULL DEFAULT now(),
model TEXT NULL DEFAULT ''::TEXT,
messages JSON NULL DEFAULT '{}'::JSON,
response JSON NULL DEFAULT '{}'::JSON,
end_user TEXT NULL DEFAULT ''::TEXT,
status TEXT NULL DEFAULT ''::TEXT,
error JSON NULL DEFAULT '{}'::JSON,
response_time REAL NULL DEFAULT '0'::REAL,
total_cost REAL NULL,
additional_details JSON NULL DEFAULT '{}'::JSON,
litellm_call_id TEXT UNIQUE,
PRIMARY KEY (id)
) TABLESPACE pg_default;可選最佳化(按業務量)
對
created_at、model、end_user建立索引,加速按時間範圍、模型、使用者查詢。資料量較大時,可結合分區、歸檔策略控製表規模與查詢效能。
步驟二:擷取Project URL與API Key
配置項 | 用途 | 擷取方式(Supabase Dashboard) |
SUPABASE_URL | REST API根地址 |
|
SUPABASE_KEY(服務端) | 服務端繞過RLS寫入日誌表 |
|
若是VPC內使用,請登入雲原生資料倉儲AnalyticDB PostgreSQL版控制台,在左側導覽列單擊Supabase,然後單擊目標Supabase Project進入詳情頁,在网络信息地區擷取内网连接地址。
service_role密鑰僅允許部署在服務端,禁止下發至瀏覽器、移動端、小程式或提交到公開代碼倉庫。
面向終端的用戶端應使用anon key,與Row Level Security(RLS)策略配合,且不得與service_role混用。
步驟三:配置IP白名單
AnalyticDB Supabase對API訪問通常配合IP白名單使用。若LiteLLM無法寫入或HTTPS請求逾時,應優先核對白名單。
登入雲原生資料倉儲AnalyticDB PostgreSQL版控制台,在左側導覽列單擊Supabase。
在目標專案所在行操作列,單擊修改白名单,將LiteLLM運行環境的IP加入白名單。
多副本、多可用性區域或動態出口情境,需為每個實際出站地址配置白名單,或使用固定NAT或統一出口,避免遺漏。
步驟四:啟用LiteLLM回調
設定環境變數。
export SUPABASE_URL="https://您的 Project URL" export SUPABASE_KEY="您的 service_role 密鑰" export OPENAI_API_KEY="sk-..." # 或實際使用的模型廠商 Key配置回調。
建議同時啟用success與failure回調,以便失敗請求也落庫,支撐錯誤分析與SLA統計。
方式一:Python SDK(服務端應用內直連模型)
在調用
litellm.completion(或acompletion等)的同一進程、第一次請求之前設定:import litellm from litellm import completion litellm.success_callback = ["supabase"] litellm.failure_callback = ["supabase"] response = completion( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hi"}], user="業務側使用者標識", # 寫入表欄位 end_user )方式二:LiteLLM Proxy(
litellm --config config.yaml)回調寫在
config.yaml的litellm_settings中,與官方樣本proxy_server_config.yaml中success_callback/failure_callback的位置一致。litellm_settings: success_callback: ["supabase"] failure_callback: ["supabase"]樣本(在現有
model_list基礎上增加litellm_settings)litellm_settings: success_callback: ["supabase"] failure_callback: ["supabase"] model_list: - model_name: gpt-3.5-turbo litellm_params: model: gpt-3.5-turbo api_key: os.environ/OPENAI_API_KEY啟動
litellm --config config.yaml --port 8000
步驟五:驗證資料寫入
在Supabase Dashboard側邊欄,單擊 SQL Editor ,執行以下語句:
SELECT id, created_at, model, end_user, status, total_cost, response_time
FROM public.request_logs
ORDER BY id DESC
LIMIT 20;若能查詢到新產生的記錄,說明LiteLLM → AnalyticDB Supabase REST API → Postgres鏈路正常。
自訂配置(可選)
自訂表格名
預設寫入表request_logs。若使用其它表名,在Python SDK中於調用前執行:
litellm.modify_integration("supabase", {"table_name": "您的表名"})使用Proxy時,若YAML未提供等價項,需查閱您所用LiteLLM版本是否支援Supabase表名配置,或通過自訂回調或啟動指令碼注入。無把握時建議先用預設表名request_logs。
終端使用者標識(寫入end_user)
接入方式 | 建議做法 |
Python SDK |
|
經Proxy的HTTP調用 | 使用與OpenAI Chat Completions相容請求體中的 |
注意事項
合規與隱私:
messages、response等欄位可能包含使用者輸入與模型輸出,涉及個人資訊或敏感內容時,應在業務層做脫敏、截斷或存取控制,並遵守適用法律法規與內部資料分級要求。密鑰輪換: 輪換service_role後需同步更新所有使用該密鑰的服務端環境,避免寫入中斷。
網路與穩定性: 跨地區、跨境調用可能帶來延遲與合規要求,建議LiteLLM與AnalyticDB Supabase同地區或就近部署(在滿足業務與合規前提下)。
文檔一致性: 請以LiteLLM官方文檔中的SUPABASE_URL、SUPABASE_KEY及表結構為準。