feat: 添加三层级模型配置管理系统原型

新增三个层级的模型配置管理功能:
- 平台级模型配置(管理台):配置列表、新增/编辑、删除(默认模型不允许删除)、设为默认(仅页面状态)
- 项目级模型配置(工作台):配置列表、新增/编辑、删除(允许删除默认)、设为默认(仅页面状态)
- 个人模型配置(工作台):配置列表、新增/编辑、删除(允许删除默认)、设为默认(仅页面状态)
- 融合式模型选择器:在聊天输入框顶部集成,按层级分组展示模型列表(平台/项目/个人)

技术实现:
- 新增项目级和个人级配置数据文件
- 扩展 api.js 数据访问层,添加 consoleModels.project 和 consoleModels.user 对象
- 新增 4 个页面组件(ProjectModelConfigsPage、AddProjectModelConfigPage、UserModelConfigsPage、AddUserModelConfigPage)
- 修改 2 个现有页面(ModelConfigsPage、ChatPage、ConsoleLayout)
- 修改 Modal 组件支持 cancelText 为空时隐藏取消按钮
- 在 App.jsx 中添加 6 条新路由
- 新增模型选择器样式文件(融合式设计、分组展示、响应式)
- 更新 README.md 项目结构

样式特点:
- 融合式模型选择器与输入框风格一致
- 下拉列表按层级分组(平台/项目/个人)
- 默认标记使用渐变背景色
- 选中状态高亮(浅蓝色背景 + 左侧边框 + 右侧勾选)
- 响应式设计(移动端适配)

数据示例:
- 项目级:3 个示例配置(不同类型和状态)
- 个人级:2 个示例配置(不同类型和状态)
This commit is contained in:
2026-04-10 13:43:19 +08:00
parent eeef824b24
commit 3f815db0b2
21 changed files with 1836 additions and 18 deletions

240
docs/模型管理.md Normal file
View File

@@ -0,0 +1,240 @@
# 模型配置管理业务设计
## 概述
模型配置管理是一个多层级模型配置系统,支持平台级、项目级、用户级三个层级的模型配置。各级配置独立管理,模型列表累加可见,默认模型按优先级链确定。
## 核心业务规则
### 模型配置层级结构
```mermaid
graph TB
subgraph Platform["平台级模型配置 (Platform Level)"]
P1[配置者: 平台管理员]
P2[可见性: 所有用户可见]
P3[用途: 作为所有用户的基础模型池]
P4[默认模型: 平台默认模型]
end
subgraph Project["项目级模型配置 (Project Level)"]
Pr1[配置者: 项目管理员]
Pr2[可见性: 仅项目成员可见]
Pr3[用途: 项目专用模型, 覆盖平台默认]
Pr4[默认模型: 项目默认模型]
end
subgraph User["用户级模型配置 (User Level)"]
U1[配置者: 用户自己]
U2[可见性: 仅自己可见]
U3[用途: 用户自定义模型, 覆盖项目/平台默认]
U4[默认模型: 个人默认模型]
end
Platform -->|继承| Project
Project -->|继承| User
```
### 权限边界
- **完全隔离**:各级别只能管理本级别的模型配置
- 平台管理员:只能管理平台级模型配置
- 项目管理员:只能管理本项目模型配置
- 普通用户:只能管理个人模型配置
- **不可干预**:平台管理员不可干预项目级或用户级模型配置
- **菜单可见性**:项目成员看不到"模型管理"菜单(仅项目管理员可见)
- **安全性**模型调用由服务端统一处理API密钥不暴露给前端
### 模型可见性规则
- **平台模型**:所有用户可见
- **项目模型**:仅项目成员可见
- **个人模型**:仅自己可见
- **跨项目隔离**项目X的模型在项目Y内不可见
- **累加模式**:用户可选模型 = 平台模型 当前项目模型 个人模型
### 模型选择规则
#### 可选模型范围
用户在项目X内
```
可选模型 = 平台模型 项目X模型 个人模型
```
#### 默认模型优先级链
新建对话时:
```
默认模型 = 个人默认 项目默认 平台默认
```
已有对话时:
```
使用模型 = 上次使用的模型
```
模型失效时:
```
回退到默认模型优先级链 → 个人默认 项目默认 平台默认
```
### 默认模型规则
- **自动设置**:新增第一个模型时,自动设为默认模型
- **删除规则**
- **平台级**:默认模型不允许直接删除,必须先将另一个模型设为默认,然后才能删除
- **项目级**:允许删除默认模型,删除后该级别没有默认模型
- **用户级**:允许删除默认模型,删除后该级别没有默认模型
- **配置数量**:各级别不限制模型配置数量
- **空列表处理**:没有任何模型时,用户可以新建对话,但对话输入框的模型下拉列表为空
### 跨项目对话隔离
对话列表按项目维度隔离:
- 在项目A的对话列表中只能看到项目A的对话
- 切换到项目B后在项目B的对话列表中只能看到项目B的对话
- 不同项目的对话互不可见
## 配置内容
### 配置字段
所有级别的模型配置包含相同的字段:
#### 基本信息
- 配置名称(必填)
- 配置类型(必填,新建时可选,编辑时只读)
- OpenAI 兼容接口
- 智算管理平台
#### API配置根据类型不同
**OpenAI 兼容接口**
- API地址必填
- API密钥必填掩码显示
- 模型名称(必填)
**智算管理平台**
- API地址必填
- App ID必填
- App Secret必填掩码显示
#### 参数配置仅OpenAI兼容接口
- Temperature0-2默认0.7
- Max Tokens1-128000默认4096
- Top P0-1默认0.9
## 附录:常见问题
### 📋 模型可见性问题
#### 1. 用户在项目内能看到哪些模型?模型可见性有哪些规则?
用户在项目X内可见的模型采用累加模式
```
可选模型 = 平台模型 项目X模型 个人模型
```
**可见性规则**
- **跨项目隔离**项目X的模型在项目Y内不可见
- **多项目差异**:用户在不同项目内看到的模型列表不同(平台模型和个人模型在所有项目可见,项目模型仅在本项目可见)
- **移出项目**:用户被移出项目后,项目模型从列表消失,但数据保留;重新加入后恢复可见
- **项目成员权限**:项目模型对所有成员可见,但只有管理员能管理,普通成员只能使用
- **模型下拉列表展示**:同名配置在模型下拉列表中会分组展示
### 🎯 默认模型问题
#### 2. 新增第一个模型时需要手动设为默认吗?
不需要。系统会自动将新增的第一个模型设为默认模型。各级别模型配置都遵循此规则:
- 平台新增第一个模型 → 自动设为平台默认
- 项目新增第一个模型 → 自动设为项目默认
- 用户新增第一个模型 → 自动设为个人默认
#### 3. 默认模型可以删除吗?
根据配置级别不同,删除规则不同:
- **平台级**:默认模型不允许直接删除,必须先将另一个模型设为默认,然后才能删除原来的默认模型
- **项目级**:允许删除默认模型,删除后该级别没有默认模型
- **用户级**:允许删除默认模型,删除后该级别没有默认模型
#### 4. 如果某个级别没有配置任何模型,会怎样?
如果某个级别没有配置任何模型,该级别的默认模型为空,系统会按优先级链继续向上查找:
- 用户没有个人模型 → 使用项目默认模型
- 项目没有项目模型 → 使用平台默认模型
- 如果平台也没有模型 → 用户可以新建对话,但对话输入框的模型下拉列表为空
#### 5. 项目管理员想更换项目默认模型,原来的默认模型会怎样?对已有对话有影响吗?
项目管理员将模型B设为新的默认模型后
- 原默认模型A变为普通模型is_default = false
- 模型B变为新的默认模型is_default = true
原默认模型A不会被删除仍然在项目模型列表中项目成员可以继续使用。
已有对话不受影响,继续使用对话创建时选择的模型。
### ⚙️ 配置管理问题
#### 6. 平台管理员能编辑或删除项目级、用户级的模型配置吗?
不能。各级模型配置权限完全隔离:
- 平台管理员:只能管理平台级模型配置
- 项目管理员:只能管理本项目模型配置
- 用户:只能管理个人模型配置
平台管理员无法查看、编辑、删除项目级或用户级的模型配置,确保各级模型配置的独立性和安全性。
#### 7. 项目管理员能看到项目成员的个人模型配置吗?
不能。个人模型配置仅用户自己可见,项目管理员无法查看或管理项目成员的个人模型。
用户在项目内使用个人模型时项目管理员只知道用户选择了某个模型但无法查看模型的配置详情如API密钥
#### 8. 编辑模型配置时,配置类型可以修改吗?
不可以。配置类型OpenAI 兼容接口 / 智算管理平台)在新建时选择,保存后不可修改。
编辑模型配置时配置类型字段为只读状态只能修改其他字段如API地址、密钥、参数等
如果需要更换配置类型,必须删除原模型配置,重新创建新模型配置。删除已被对话使用的模型配置后,该对话会失效并触发模型回退逻辑。
#### 9. 配置名称可以重复吗?
可以。配置名称仅用于展示和区分,不要求唯一性。同一个级别下可以有多个同名配置,但建议使用有区分度的名称便于管理。
系统通过配置ID唯一标识模型不依赖名称唯一性。同名配置在模型下拉列表中会分组展示。
### 🔐 安全性问题
#### 10. 项目成员能看到项目模型的API密钥吗
不能。项目成员看不到"模型管理"菜单无法访问模型配置页面因此无法查看API密钥。
只有项目管理员能查看和管理项目模型的配置详情包括API密钥且密钥在表单中默认掩码显示需要点击显示按钮才能查看明文。
#### 11. 不同级别的模型配置API密钥存储方式有区别吗
没有区别。所有级别的模型配置API密钥都存储在服务端数据库中存储方式一致安全级别一致。前端只知道模型ID从未接触API密钥。
### ❓ 其他问题
#### 12. 用户在项目X内使用项目模型D创建对话后来项目模型D被删除用户继续这个对话时会使用哪个模型
系统会自动切换到默认模型(按优先级链):
```
个人默认 → 项目X默认 → 平台默认
```
用户打开对话时系统检测到模型D已失效自动切换并提示"原模型已失效已切换为XXX"。后续新消息使用切换后的模型,历史消息保持不变。
#### 13. 用户在项目X内使用个人模型D创建对话后来用户被移出项目X个人模型D会被删除吗
不会被删除。个人模型是用户级别的模型配置跟着用户走不会因为被移出项目就被删除。用户在其他项目仍然可以使用个人模型D。
*最后更新2026-04-10*