- 8张llm_前缀表(手写幂等DDL): vendor/account/model/api_profile/org_policy/org_quota/user_quota/usage - gateway.py 门禁链: 限流→限额→策略选模型(主备容错)→账号×端点轮转(偏好过滤+余额加权+冷却避让)→预授权-结算 - api_key AES单层加密(非RC4,盐不对称不可解); 限流Redis分钟窗口(db4) fail-open - 双维度记账: 一次调用同行记cost(账号侧)+charge(组织池侧); 充值=recharge行 - CRUD+index.ui 8卡片导航+总览; appcodes字典5组; 设计规范+30测试用例 - 策略即开关: 机构无策略→__LEGACY__走旧llm表(向后兼容零改动)
134 lines
7.8 KiB
SQL
134 lines
7.8 KiB
SQL
-- pipeline-llm 模块数据表(8 张,全部 llm_ 前缀,pipeline 库)
|
||
-- 手写幂等 DDL(IF NOT EXISTS + 内联索引),由宿主 scripts/create_tables.py 执行
|
||
-- 金额用 DECIMAL(对账精度),时间用 datetime
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_vendor (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`name` varchar(100) NOT NULL comment '供应商名称',
|
||
`protocol` varchar(20) NOT NULL DEFAULT 'openai_compat' comment '协议类型',
|
||
`endpoints` text comment '端点目录(JSON): [{region,base_url,proxy,timeout,note}]',
|
||
`description` text comment '描述',
|
||
`status` varchar(20) NOT NULL DEFAULT 'active' comment '状态',
|
||
`org_id` varchar(32) NOT NULL DEFAULT '0' comment '所属机构',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() comment '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_llm_vendor_status` (`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='模型供应商';
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_account (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`vendor_id` varchar(32) NOT NULL comment '供应商ID',
|
||
`name` varchar(100) NOT NULL comment '账号名称',
|
||
`api_key` varchar(500) comment 'API密钥(AES加密)',
|
||
`endpoint_ids` text comment '选用端点索引列表(JSON)',
|
||
`balance` decimal(14,4) NOT NULL DEFAULT 0 comment '余额',
|
||
`total_recharge` decimal(14,4) NOT NULL DEFAULT 0 comment '累计充值',
|
||
`status` varchar(20) NOT NULL DEFAULT 'active' comment '状态',
|
||
`org_id` varchar(32) NOT NULL DEFAULT '0' comment '所属机构',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() comment '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_llm_account_vendor` (`vendor_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='供应商账号(钱包)';
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_model (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`vendor_id` varchar(32) NOT NULL comment '供应商ID',
|
||
`account_id` varchar(32) comment '默认账号ID',
|
||
`name` varchar(100) NOT NULL comment '模型注册名(平台唯一)',
|
||
`vendor_model_id` varchar(100) comment '供应商侧模型名',
|
||
`capability` varchar(20) NOT NULL DEFAULT 't2t' comment '能力类型',
|
||
`sync_mode` varchar(10) NOT NULL DEFAULT 'sync' comment '同步性',
|
||
`profile_id` varchar(32) comment '适配模板ID',
|
||
`ppid` varchar(32) comment '定价项目ID(pricing_program)',
|
||
`price_input` decimal(12,6) NOT NULL DEFAULT 0 comment '输入单价(元/千token)',
|
||
`price_output` decimal(12,6) NOT NULL DEFAULT 0 comment '输出单价(元/千token)',
|
||
`cost_input` decimal(12,6) NOT NULL DEFAULT 0 comment '输入成本(元/千token)',
|
||
`cost_output` decimal(12,6) NOT NULL DEFAULT 0 comment '输出成本(元/千token)',
|
||
`default_params` text comment '默认参数(JSON)',
|
||
`status` varchar(20) NOT NULL DEFAULT 'active' comment '状态',
|
||
`description` text comment '描述',
|
||
`org_id` varchar(32) NOT NULL DEFAULT '0' comment '所属机构',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() comment '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_llm_model_name` (`name`),
|
||
KEY `idx_llm_model_vendor` (`vendor_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='模型注册';
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_api_profile (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`name` varchar(100) NOT NULL comment '模板名称',
|
||
`protocol` varchar(20) NOT NULL comment '协议类型',
|
||
`capability` varchar(20) NOT NULL DEFAULT 't2t' comment '能力类型',
|
||
`request_template` text comment '请求模板(Jinja2)',
|
||
`response_template` text comment '响应模板(Jinja2)',
|
||
`param_schema` text comment '参数Schema(bricks input_fields)',
|
||
`status` varchar(20) NOT NULL DEFAULT 'active' comment '状态',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() comment '更新时间',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='适配模板(协议x能力形态去重)';
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_org_policy (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`org_id` varchar(32) NOT NULL comment '机构ID',
|
||
`primary_model_id` varchar(32) comment '主模型ID',
|
||
`backup_model_ids` text comment '备模型ID列表(JSON)',
|
||
`endpoint_pref` varchar(20) NOT NULL DEFAULT 'any' comment '端点偏好',
|
||
`status` varchar(20) NOT NULL DEFAULT 'active' comment '状态',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() comment '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_llm_org_policy_org` (`org_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='组织模型容错策略';
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_org_quota (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`org_id` varchar(32) NOT NULL comment '机构ID',
|
||
`balance` decimal(14,4) NOT NULL DEFAULT 0 comment '组织池余额',
|
||
`total_recharge` decimal(14,4) NOT NULL DEFAULT 0 comment '累计充值',
|
||
`rate_limit` int NOT NULL DEFAULT 0 comment '组织QPM上限(0=不限)',
|
||
`status` varchar(20) NOT NULL DEFAULT 'active' comment '状态',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() comment '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_llm_org_quota_org` (`org_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='组织限额限流';
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_user_quota (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`user_id` varchar(32) NOT NULL comment '用户ID',
|
||
`org_id` varchar(32) NOT NULL comment '所属机构',
|
||
`quota_limit` decimal(14,4) NOT NULL DEFAULT 0 comment '个人额度上限(0=不限)',
|
||
`quota_used` decimal(14,4) NOT NULL DEFAULT 0 comment '个人已用',
|
||
`rate_limit` int NOT NULL DEFAULT 0 comment '个人QPM上限(0=不限)',
|
||
`status` varchar(20) NOT NULL DEFAULT 'active' comment '状态',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp() comment '更新时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_llm_user_quota_user` (`user_id`,`org_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='个人限额限流';
|
||
|
||
CREATE TABLE IF NOT EXISTS llm_usage (
|
||
`id` varchar(32) NOT NULL comment '主键ID',
|
||
`org_id` varchar(32) comment '机构ID',
|
||
`user_id` varchar(32) comment '用户ID',
|
||
`model_id` varchar(32) comment '模型ID',
|
||
`account_id` varchar(32) comment '账号ID',
|
||
`endpoint_region` varchar(20) comment '端点区域',
|
||
`req_tokens` int NOT NULL DEFAULT 0 comment '请求token',
|
||
`resp_tokens` int NOT NULL DEFAULT 0 comment '响应token',
|
||
`cost` decimal(12,6) NOT NULL DEFAULT 0 comment '成本金额(账号侧)',
|
||
`charge` decimal(12,6) NOT NULL DEFAULT 0 comment '消费金额(组织池侧)',
|
||
`ppid` varchar(32) comment '定价项目ID',
|
||
`task_ref` varchar(100) comment '调用来源',
|
||
`status` varchar(20) NOT NULL DEFAULT 'ok' comment '状态(ok/failed/recharge)',
|
||
`note` varchar(200) comment '备注/原因',
|
||
`created_at` datetime NOT NULL DEFAULT current_timestamp() comment '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_llm_usage_org` (`org_id`,`created_at`),
|
||
KEY `idx_llm_usage_model` (`model_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci comment='用量流水(双维度记账)';
|