AI 模型池¶
源码:
src/backend/db/models/ai_model.py、ai_model_group.py、attribute.py路由行为:architecture/model_pool.md 返回 总览 字段表格式:字段 | 中文名 | 类型 | 可空 | 作用
同一「逻辑池」下可挂多个物理模型,经中间表配置本池权重/优先级;共享 API 账号经绑定表多对多复用。遗留的模型私有 Key 表仍保留。详细调度与熔断见 model_pool.md。
ER¶
erDiagram
ai_model_groups ||--o{ ai_model_group_members : members
ai_models ||--o{ ai_model_group_members : in_pools
ai_models ||--o{ ai_model_api_keys : legacy_keys
ai_models ||--o{ ai_model_account_bindings : binds
ai_model_api_accounts ||--o{ ai_model_account_bindings : accounts
ai_model_groups ||--o{ ai_models : legacy_group_id
ai_model_groups — 逻辑模型池¶
按业务场景聚合可互换的物理模型(如主图/详情图)。池级熔断阈值与恢复时间作用于池内每个物理模型。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 池 ID | UUID | NO | 主键 |
| group_key | 池业务键 | String(100) | NO | 唯一;worker/路由用业务键,如 main_image、detail_image |
| name | 池名称 | String(100) | NO | 中文展示名,如「主图生成池」 |
| description | 描述 | Text | YES | 池用途说明 |
| task_type | 关联任务类型 | String(50) | YES | 可选场景路由;对齐 tasks.task_type 等业务类型 |
| is_active | 是否启用 | Boolean | NO | false 时不参与调度;默认 true |
| circuit_failure_threshold | 熔断失败阈值 | SmallInteger | NO | 池内单物理模型连续失败达到该次数触发熔断;默认 5 |
| circuit_recovery_seconds | 熔断恢复秒数 | Integer | NO | 熔断后进入半开探测的等待秒数;默认 60 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
| deleted_at | 删除时间 | timestamptz | YES | 软删标记;非空表示已删除 |
ai_models — 物理模型¶
上游供应商侧的具体模型配置。group_id 为过渡期单池归属;正式多池成员关系以 ai_model_group_members 为准。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 模型 ID | UUID | NO | 主键 |
| name | 模型名称 | String(100) | NO | 管理端/前端展示名 |
| model_key | 模型业务键 | String(100) | NO | 唯一;代码与配置引用键 |
| provider | 供应商 | String(50) | NO | 上游厂商标识(如火山、OpenAI 等) |
| api_base_url | API 基址 | String(500) | YES | 模型默认上游 Base URL;可被账号级覆盖 |
| actual_model_name | 上游模型名 | String(100) | YES | 调用上游时使用的真实模型名 |
| description | 描述 | Text | YES | 模型说明 |
| model_mode | 能力模式 | String(32) | NO | 默认 text-to-image;常见值见 backend.core.ai_model.model_mode(如 image-to-image、text-to-video 等) |
| model_group | 旧字符串分组 | String(100) | YES | 遗留分组字段;新逻辑优先用池与中间表 |
| support_tasks | 支持任务类型 | JSONB | YES | 可承接的任务类型列表 |
| default_ratios | 默认比例 | JSONB | YES | 默认宽高比选项列表 |
| default_resolutions | 默认分辨率 | JSONB | YES | 默认分辨率选项列表 |
| allowed_plan_keys | 允许会员方案 | JSONB | YES | 适配的 plan_key 列表;空/null=不限制 |
| upstream_options | 上游扩展选项 | JSONB | YES | 传给上游的额外参数/开关 |
| max_concurrency | 最大并发 | SmallInteger | NO | 该物理模型并发上限;默认 1 |
| timeout_seconds | 超时秒数 | Integer | NO | 单次调用超时;默认 120 |
| cost_per_task | 单次扣点 | SmallInteger | NO | 完成一任务消耗积分数;默认 1 |
| sort_order | 排序 | SmallInteger | NO | 列表展示顺序;默认 0 |
| is_default | 是否默认模型 | Boolean | NO | 未指定模型时的候选默认;默认 false |
| is_active | 是否启用 | Boolean | NO | false 时不参与调度;默认 true |
| group_id | 所属池 ID | UUID | YES | FK→ai_model_groups.id SET NULL;过渡兼容单池归属;池删除后模型可孤立保留 |
| weight | 池内权重 | SmallInteger | NO | 加权随机权重(≥1);高权重更易被选中;默认 1(与中间表并存时以中间表本池值为准) |
| priority | 池内优先级 | SmallInteger | NO | 同池分层:高优先用满再用低优先,层内再按 weight;默认 0 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
| deleted_at | 删除时间 | timestamptz | YES | 软删标记;非空表示已删除 |
ai_model_group_members — 模型↔池¶
物理模型与逻辑池的多对多关联。同一模型可属多池,且在不同池可有不同 weight/priority。
复合主键 (model_id, group_id);另有 UniqueConstraint → uq_model_group_member。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| model_id | 模型 ID | UUID | NO | 复合主键之一;FK→ai_models.id CASCADE |
| group_id | 池 ID | UUID | NO | 复合主键之一;FK→ai_model_groups.id CASCADE |
| weight | 本池权重 | SmallInteger | NO | 该模型在本池内的加权随机权重;默认 1 |
| priority | 本池优先级 | SmallInteger | NO | 该模型在本池内的优先级分层;默认 0 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
ai_model_api_keys — 模型私有 Key(遗留)¶
一个 Key 仅属于一个物理模型(1:N)。新读写优先走共享账号 + 绑定表;本表保留向下兼容。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | Key ID | UUID | NO | 主键 |
| model_id | 所属模型 | UUID | NO | FK→ai_models.id CASCADE |
| api_key | API 密钥 | String(500) | NO | 模型私有上游密钥 |
| label | 标签 | String(100) | YES | 人类可读备注,如「主 Key」「备用」 |
| status | 状态 | SmallInteger | NO | 0=禁用 1=正常;默认 1 |
| priority | 优先级 | SmallInteger | NO | 同模型多 Key 时优先顺序;默认 0 |
| daily_limit | 日调用上限 | SmallInteger | YES | 每日最大调用次数;空表示未配置上限 |
| daily_used | 日已用次数 | SmallInteger | NO | 当日已调用次数;默认 0 |
| last_used_at | 最近使用时间 | timestamptz | YES | 最近一次使用该 Key 的时刻 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
ai_model_api_accounts — 共享 API 账号¶
独立上游账号,可被多个物理模型通过绑定表引用,用于突破单账号 RPS。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 账号 ID | UUID | NO | 主键 |
| account_key | 账号密钥 | String(500) | NO | 应用层 Fernet 加密存储;UI 展示脱敏 |
| label | 标签 | String(100) | YES | 人类可读标签,如「火山账号 A」 |
| provider | 供应商 | String(50) | NO | 账号归属厂商;约束可绑定的物理模型类型 |
| api_base_url | API 基址 | String(500) | YES | 账号专属 Base URL(如不同 region) |
| max_rps | 最大 RPS | SmallInteger | NO | 单账号并发/速率上限;默认 50 |
| daily_limit | 日调用上限 | SmallInteger | YES | 单账号每日调用上限;0/NULL 表示不限 |
| key_version | 密钥版本 | SmallInteger | NO | account_key 加密版本号,便于轮换;默认 1 |
| is_active | 是否启用 | Boolean | NO | false 时不可被调度使用;默认 true |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
ai_model_account_bindings — 模型↔账号¶
物理模型与共享账号的多对多关联。同模型多账号按 priority 优先使用,失败再降级。
复合主键 (model_id, account_id);另有 UniqueConstraint → uq_model_account。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| model_id | 模型 ID | UUID | NO | 复合主键之一;FK→ai_models.id CASCADE |
| account_id | 账号 ID | UUID | NO | 复合主键之一;FK→ai_model_api_accounts.id CASCADE |
| priority | 绑定优先级 | SmallInteger | NO | 同模型内多账号优先级;高优先失败再降级;默认 0 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间(无 updated_at) |
model_generation_attributes — 模特生成属性选项¶
无外键。按 mode + category + attr_key 配置可选属性值,供模特生成表单使用。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 属性选项 ID | UUID | NO | 主键 |
| mode | 模式 | String(20) | NO | simple / professional |
| category | 分类 | String(50) | NO | 属性大类(如外貌、姿态等业务分类) |
| attr_key | 属性键 | String(50) | NO | 属性机器键,用于组装参数 |
| attr_name | 属性名称 | String(100) | NO | 属性中文展示名 |
| option_value | 选项值 | String(200) | NO | 该行对应的可选取值 |
| sort_order | 排序 | SmallInteger | NO | 同组内展示顺序;默认 0 |
| is_active | 是否启用 | Boolean | NO | false 时不在表单展示;默认 true |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |