pipeline-llm/mysql.ddl.sql
yumoqing 660ad21365 feat(pipeline-llm): 模型治理模块v1.0.0 — 供应商/端点目录/账号钱包/模型注册/组织容错策略/限额限流/双维度记账
- 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表(向后兼容零改动)
2026-09-01 17:27:17 +08:00

134 lines
7.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- pipeline-llm 模块数据表8 张,全部 llm_ 前缀pipeline 库)
-- 手写幂等 DDLIF 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='用量流水(双维度记账)';