-- 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 '供应商名称', `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', `query_profile_ids` text comment '后续步骤模板链(JSON数组,异步模型提交后顺序执行:查询/下载)', `ppid` varchar(32) comment '定价项目ID(pricing_program)', `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 '能力类型', `path` varchar(200) comment '请求路径(相对端点base_url,如/chat/completions)', `method` varchar(10) NOT NULL DEFAULT 'POST' comment 'HTTP方法(GET/POST,独立列不再塞request_template)', `headers` text comment '请求头(JSON,含认证头模板)', `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', `utility_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 '客户应付(异步三方账计算,本机构模型恒0)', `accounting_status` varchar(20) comment '记账状态(三态:created待记账/accounted记账成功/failed记账失败;仅status=SUCCEEDED的行有意义,其余NULL)', `ppid` varchar(32) comment '定价项目ID', `task_ref` varchar(100) comment '调用来源', `status` varchar(20) NOT NULL DEFAULT 'SUCCEEDED' comment '调用状态(统一枚举:SUCCEEDED成功/FAILED失败/PENDING等待/RUNNING运行;其他如recharge)', `usages` text comment '非token用量因子JSON(时长/分辨率等,异步出账读入定价引擎)', `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='用量流水(双维度记账)';