forked from xiaohei/taiji-AI-PAD
74 lines
3.0 KiB
PL/PgSQL
74 lines
3.0 KiB
PL/PgSQL
-- 迁移脚本:添加 LiteLLM 集成相关表和字段
|
||
-- 版本:011
|
||
-- 日期:2026-01-07
|
||
-- 描述:实现模型供应商与租户模型使用设计方案
|
||
|
||
-- 1. 给 channels 表添加 litellm_team_id 字段
|
||
ALTER TABLE channels ADD COLUMN IF NOT EXISTS litellm_team_id VARCHAR(100);
|
||
|
||
-- 添加索引
|
||
CREATE INDEX IF NOT EXISTS idx_channel_litellm_team ON channels(litellm_team_id);
|
||
|
||
-- 2. 创建 tenant_model_keys 表
|
||
CREATE TABLE IF NOT EXISTS tenant_model_keys (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
tenant_id UUID NOT NULL REFERENCES users(id),
|
||
channel_id UUID REFERENCES channels(id),
|
||
|
||
-- 模型信息
|
||
model_name VARCHAR(100) NOT NULL,
|
||
|
||
-- LiteLLM Key 信息
|
||
litellm_key_id VARCHAR(255) NOT NULL, -- LiteLLM 返回的完整 key
|
||
litellm_key_hash TEXT NOT NULL, -- 加密存储
|
||
|
||
-- 配额配置(与 LiteLLM 同步)
|
||
rpm_limit INTEGER DEFAULT 0,
|
||
tpm_limit INTEGER DEFAULT 0,
|
||
max_budget NUMERIC(12, 2),
|
||
budget_duration VARCHAR(20) DEFAULT 'monthly',
|
||
|
||
-- 状态
|
||
status VARCHAR(20) DEFAULT 'active',
|
||
|
||
created_at TIMESTAMP DEFAULT NOW(),
|
||
updated_at TIMESTAMP DEFAULT NOW(),
|
||
|
||
-- 唯一约束:每个租户每个模型只能有一个 Key
|
||
CONSTRAINT uq_tenant_model UNIQUE(tenant_id, model_name)
|
||
);
|
||
|
||
-- 添加索引
|
||
CREATE INDEX IF NOT EXISTS idx_tenant_model_key_tenant ON tenant_model_keys(tenant_id);
|
||
CREATE INDEX IF NOT EXISTS idx_tenant_model_key_model ON tenant_model_keys(model_name);
|
||
CREATE INDEX IF NOT EXISTS idx_tenant_model_key_status ON tenant_model_keys(status);
|
||
|
||
-- 3. 添加注释
|
||
COMMENT ON TABLE tenant_model_keys IS '租户模型 Key 表,存储租户在 LiteLLM 中的 API Key 信息';
|
||
COMMENT ON COLUMN tenant_model_keys.model_name IS '模型名称,如 azure/gpt-4, gemini/gemini-pro';
|
||
COMMENT ON COLUMN tenant_model_keys.litellm_key_id IS 'LiteLLM 返回的完整 API Key';
|
||
COMMENT ON COLUMN tenant_model_keys.litellm_key_hash IS '加密存储的 Key(用于解密后注入到 Agent)';
|
||
COMMENT ON COLUMN tenant_model_keys.rpm_limit IS '每分钟请求数限制';
|
||
COMMENT ON COLUMN tenant_model_keys.tpm_limit IS '每分钟 Token 数限制';
|
||
COMMENT ON COLUMN tenant_model_keys.max_budget IS '最大预算';
|
||
COMMENT ON COLUMN tenant_model_keys.budget_duration IS '预算周期:monthly(每月)或 total(总计)';
|
||
COMMENT ON COLUMN tenant_model_keys.status IS '状态:active(活跃)、suspended(暂停)、expired(过期)';
|
||
|
||
COMMENT ON COLUMN channels.litellm_team_id IS 'LiteLLM team ID,创建渠道时同步创建';
|
||
|
||
-- 4. 创建更新时间触发器
|
||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||
RETURNS TRIGGER AS $$
|
||
BEGIN
|
||
NEW.updated_at = NOW();
|
||
RETURN NEW;
|
||
END;
|
||
$$ language 'plpgsql';
|
||
|
||
-- 为 tenant_model_keys 表添加更新时间触发器
|
||
DROP TRIGGER IF EXISTS update_tenant_model_keys_updated_at ON tenant_model_keys;
|
||
CREATE TRIGGER update_tenant_model_keys_updated_at
|
||
BEFORE UPDATE ON tenant_model_keys
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|