全部產品
Search
文件中心

AnalyticDB:在LiteLLM中接入AnalyticDB Supabase記錄LLM調用

更新時間:Apr 21, 2026

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的環境。

前提條件

  • 建立Supabase專案

    重要

    免費測試專案僅適用於開發測試,不建議用於生產。生產環境請選用付費規格並做好容量與備份規劃。

  • 已明確發起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_atmodelend_user建立索引,加速按時間範圍、模型、使用者查詢。

  • 資料量較大時,可結合分區、歸檔策略控製表規模與查詢效能。

步驟二:擷取Project URL與API Key

配置項

用途

擷取方式(Supabase Dashboard)

SUPABASE_URL

REST API根地址

  1. 單擊頁面左上方Connect

  2. 選擇App Frameworks頁簽,複製NEXT_PUBLIC_SUPABASE_URL。

SUPABASE_KEY(服務端)

服務端繞過RLS寫入日誌表

  1. 單擊左側導覽列API Docs > Introduction

  2. 單擊頁面右上方BashProject API Key選擇service_role(secret)。

  3. 單擊Authentication,擷取SERVICE KEY

若是VPC內使用,請登入雲原生資料倉儲AnalyticDB PostgreSQL版控制台,在左側導覽列單擊Supabase,然後單擊目標Supabase Project進入詳情頁,在网络信息地區擷取内网连接地址

重要
  • service_role密鑰僅允許部署在服務端,禁止下發至瀏覽器、移動端、小程式或提交到公開代碼倉庫。

  • 面向終端的用戶端應使用anon key,與Row Level Security(RLS)策略配合,且不得與service_role混用。

步驟三:配置IP白名單

AnalyticDB Supabase對API訪問通常配合IP白名單使用。若LiteLLM無法寫入或HTTPS請求逾時,應優先核對白名單。

  1. 登入雲原生資料倉儲AnalyticDB PostgreSQL版控制台,在左側導覽列單擊Supabase

  2. 在目標專案所在行操作列,單擊修改白名单,將LiteLLM運行環境的IP加入白名單。

    多副本、多可用性區域或動態出口情境,需為每個實際出站地址配置白名單,或使用固定NAT或統一出口,避免遺漏。

步驟四:啟用LiteLLM回調

  1. 設定環境變數。

    export SUPABASE_URL="https://您的 Project URL"
    export SUPABASE_KEY="您的 service_role 密鑰"
    export OPENAI_API_KEY="sk-..."   # 或實際使用的模型廠商 Key
  2. 配置回調。

    建議同時啟用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.yamllitellm_settings中,與官方樣本proxy_server_config.yamlsuccess_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

completion(..., user="業務使用者ID")

經Proxy的HTTP調用

使用與OpenAI Chat Completions相容請求體中的user欄位(具體欄位名以LiteLLM Proxy目前的版本文檔為準),使日誌中能按使用者彙總。

注意事項

  • 合規與隱私:messagesresponse等欄位可能包含使用者輸入與模型輸出,涉及個人資訊或敏感內容時,應在業務層做脫敏、截斷或存取控制,並遵守適用法律法規與內部資料分級要求。

  • 密鑰輪換: 輪換service_role後需同步更新所有使用該密鑰的服務端環境,避免寫入中斷。

  • 網路與穩定性: 跨地區、跨境調用可能帶來延遲與合規要求,建議LiteLLM與AnalyticDB Supabase同地區或就近部署(在滿足業務與合規前提下)。

  • 文檔一致性: 請以LiteLLM官方文檔中的SUPABASE_URL、SUPABASE_KEY及表結構為準。