在LiteLLM中接入AnalyticDB Supabase记录LLM调用

更新时间:
复制为 MD 格式

LiteLLM可统一调用多家大语言模型API,并通过回调将每次调用的元数据写入外部存储。云原生数据仓库AnalyticDB PostgreSQLSupabase(以下简称AnalyticDB Supabase)可作为LLM调用日志与费用台账的落库目标:成功与失败请求均可记录,便于在SQL EditorTable Editor中查询、统计与故障排查。本文介绍如何在AnalyticDB Supabase上建表、获取Project URLservice_role密钥、配置IP白名单,以及在应用中启用LiteLLMSupabase回调。

说明

AnalyticDB Supabase产品能力请参见Supabase,LiteLLM集成细节以LiteLLM官方文档为准。

适用场景

  • 使用LiteLLM(Python SDKLiteLLM 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 ServerCLI完成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 URLAPI 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 SupabaseAPI访问通常配合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. 配置回调。

    建议同时启用successfailure回调,以便失败请求也落库,支撑错误分析与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")

ProxyHTTP调用

使用与OpenAI Chat Completions兼容请求体中的user字段(具体字段名以LiteLLM Proxy当前版本文档为准),使日志中能按用户聚合。

注意事项

  • 合规与隐私:messagesresponse等字段可能包含用户输入与模型输出,涉及个人信息或敏感内容时,应在业务层做脱敏、截断或访问控制,并遵守适用法律法规与内部数据分级要求。

  • 密钥轮换: 轮换service_role后需同步更新所有使用该密钥的服务端环境,避免写入中断。

  • 网络与稳定性: 跨地域、跨境调用可能带来延迟与合规要求,建议LiteLLMAnalyticDB Supabase同地域或就近部署(在满足业务与合规前提下)。

  • 文档一致性: 请以LiteLLM官方文档中的SUPABASE_URL、SUPABASE_KEY及表结构为准。