发布日期:2025-11-04(相对 1.7.2 以来 27 次提交)
1.8.0 是一次重大架构升级版本,核心是将模型配置从静态参考表(ModelReference)迁移到模型实例级别,实现了模型配置的完全用户化。此版本还包含大量前端体验优化、图像处理重构、新增模型验证框架等重要改进。
之前的设计(≤ 1.7.x):
- 模型能力配置存储在
ModelReference表(静态参考数据) - 所有使用相同模型引用的实例共享配置(无法个性化)
- 添加新模型需要数据库迁移(依赖开发者更新)
- 配置分散在两个表中(
ModelReference+Model),查询复杂
现在的设计(1.8.0+):
- 每个模型实例拥有完整的独立配置(18 个新字段)
- 用户可自由定制模型能力(支持异构部署)
- 添加新模型无需数据库迁移(即开即用)
- 配置集中在
Model表,查询高效
删除的表(5 个静态参考表):
- ❌
ModelReference- 模型能力参考表 - ❌
ModelProvider- 提供商信息表 - ❌
CurrencyRate- 货币汇率表 - ❌
Tokenizer- 分词器表 - ❌
ReasoningResponseKind- 推理响应类型表 - ❌
FileServiceType- 文件服务类型表(额外清理) - ❌
KnownImageSize- 已知图片尺寸表(图片尺寸改为字符串)
新增的表(1 个配置表):
- ✅
ModelProviderOrder- 提供商显示顺序表
重构的代码:
- 提供商配置改为静态类:
ModelProviderInfo(19 个提供商) - 文件服务类型改为静态类:
FileServiceTypeInfo(5 个服务类型) - 删除 45+ 处 EF Core 导航属性和关联查询
新增 18 个模型配置字段(全部必填):
功能开关(7 个布尔字段):
AllowSearch- 是否支持联网搜索AllowVision- 是否支持视觉理解AllowSystemPrompt- 是否支持系统提示词AllowStreaming- 是否支持流式输出AllowCodeExecution- 是否支持代码执行(Gemini)AllowToolCall- 是否支持工具调用ThinkTagParserEnabled- 是否启用思考标签解析(DeepSeek)
温度范围(2 个数值字段):
MinTemperature- 最小温度值(0.0 - 2.0)MaxTemperature- 最大温度值(0.0 - 2.0)
Token 配置(2 个数值字段):
ContextWindow- 上下文窗口大小MaxResponseTokens- 最大响应 Token 数
推理与图像(2 个数组字段):
ReasoningEffortOptions- 推理级别选项(如[2,3,4])SupportedImageSizes- 支持的图像尺寸(如["1024x1024","1792x1024"])
API 类型(3 个配置字段):
ApiType- API 类型(0=ChatCompletion, 1=Response, 2=ImageGeneration)UseAsyncApi- 是否使用异步 API(如 o3-pro)UseMaxCompletionTokens- 是否使用max_completion_tokens字段(OpenAI/Azure)
遗留标记(1 个布尔字段):
IsLegacy- 是否为遗留模型(2024-07-01 之前发布)
详细说明:
- 所有字段在创建/更新模型时都必须提供(后端保证返回)
- 前端表单根据
ApiType动态显示相关字段 - 管理员可为每个模型实例单独配置(支持异构部署)
- 参见 1.8.0 API 变更说明 了解前端适配细节
新增 ApiType.ImageGeneration (值=2):
- 与
ChatCompletion(0) 和Response(1) 并列 - 专门用于图像生成模型(如 DALL-E、gpt-image-1)
- 字段复用:
MaxResponseTokens→ 最大批量生成图片数ReasoningEffortOptions→ 图片生成质量选项(2=Low, 3=Medium, 4=High)AllowStreaming→ 是否返回中间状态预览图片
- 图像生成模型自动禁用工具调用(
AllowToolCall=false)
重构 ChatFactory 创建逻辑:
// 根据 ApiType 创建不同的服务
return model.ApiType switch
{
DBApiType.ChatCompletion => new ChatCompletionService(/*...*/),
DBApiType.Response => model.UseAsyncApi
? new ResponseApiService(/*...*/, async: true)
: new ResponseApiService(/*...*/, async: false),
DBApiType.ImageGeneration => new ImageGenerationService(/*...*/),
_ => throw new NotSupportedException($"Unsupported ApiType: {model.ApiType}")
};新增 UpdateModelRequest 数据验证:
- 18 个配置字段的验证规则(温度范围、Token 限制等)
- 自定义验证特性:
[TemperatureRange]- 验证温度范围(0-2,且 min ≤ max)[TokenRange]- 验证 Token 范围(≥ 0)[ReasoningEffortValues]- 验证推理级别选项(0-4)[ImageSizesFormat]- 验证图像尺寸格式(如 "1024x1024")
- xUnit 单元测试:
UpdateModelRequestValidationTests(436 行) - 详细文档:模型验证规则说明
模型验证接口重构:
- ❌ 删除
ValidateModelRequest(只包含modelReferenceId) - ✅ 改用
UpdateModelRequest(完整配置对象) - 验证逻辑:创建临时模型 → 发送测试请求 → 返回结果
- 前端需传递完整配置(参见 API 变更说明 2.1)
新增 QuickAddModelModal 组件(376 行):
- 从可用模型列表快速批量添加模型
- 对话框保持打开状态,支持连续添加
- 自动重新加载模型列表
- 搜索/过滤功能(按模型名称)
- 已添加模型自动排序到底部
- 表格行高优化(紧凑显示)
使用流程:
- 点击"添加模型"按钮 → 选择 ModelKey → 查看可用模型列表
- 点击"快速添加"按钮 → 自动使用默认配置创建模型
- 对话框不关闭,继续添加其他模型
- 添加完成后,可在模型列表中编辑详细配置
默认配置(通用保守值):
apiType: 0(ChatCompletion)allowStreaming: trueallowSystemPrompt: trueallowToolCall: trueminTemperature: 0.0,maxTemperature: 2.0contextWindow: 32768,maxResponseTokens: 4096- 其他功能默认禁用(
false或空数组)
懒加载 + 骨架屏:
- 分层加载:提供商 → 密钥 → 模型(3 层级联)
- 按需渐进式加载:初始只加载提供商列表,展开时才加载子层级数据
- 避免一次性加载所有 Model Key 和 Model 数据(减少初始页面加载负担)
- 加载中显示骨架屏(基于后端返回的数量)
提供商查询优化:
- 单个 EF Core 查询替代多次数据库调用
- 使用
GroupBy+LEFT JOIN+ 关联子查询 - 只返回有密钥的提供商(按
ModelProviderOrder.Order排序) - 返回每个提供商的密钥数量和模型数量(用于骨架屏显示)
删除按钮优化:
- 使用后端返回的
totalModelCount判断是否可删除 - 避免前端遍历计数
密钥表单优化:
- 字段顺序调整:模型提供商 → 名称 → 其他
- 选择提供商后自动填充名称(仅新建时)
- 编辑时保留原名称
从手写解析器迁移到 ImageSharp:
- ❌ 删除手写图像解析器(1,217 行代码):
JpegImageInfoService(124 行)PngImageInfoService(81 行)GifImageInfoService(49 行)BmpImageInfoService(91 行)WebpImageInfoService(174 行)AvifImageInfoService(215 行)HeicImageInfoService(184 行)PartialBufferedStream(91 行)IImageInfoService接口ImageInfoFactory工厂类
- ✅ 新增
SixLabors.ImageSharp3.1.12(纯 .NET 实现) - 优化上传流程:上传前解析图像信息(而非上传后下载再解析)
- 删除冗余的下载操作(节省网络流量)
- 无需原生依赖(Docker 部署更简单)
- 包体积从 90MB+ 降回 30MB+
新增两个重载方法:
public ImageInfo GetImageInfo(Stream stream, string fileName);
public ImageInfo GetImageInfo(byte[] imageData, string fileName);新增 ImagePreview 组件(234 行):
- 全屏模态框,半透明背景(
bg-black/70+ 背景模糊) - 平滑缩放动画(从缩略图位置到居中,300ms)
- 键盘支持:
Esc关闭,←/→切换图片 - UI 控件:关闭(X)、上一张/下一张箭头、计数器、缩略图条
- 集成到聊天消息(
ResponseMessage、UserMessage) - 自动收集消息中的所有图片(支持预览内导航)
- 连续图片横向排列(
flex+flex-wrap)
视觉优化:
- 统一缩略图最大尺寸为 300x300(响应消息和用户消息)
- 保留
tempFileId的蓝色扫描效果 - 添加
cursor-pointer和微妙的悬停过渡 - 消除初始居中闪烁(使用
hasEnterStarted+ 可见性门控) - 控件仅在进入动画开始后渲染(无闪烁)
从外键关联改为字符串存储:
- ❌ 删除
ChatConfig.ImageSizeId外键字段 - ❌ 删除
KnownImageSize表 - ✅ 新增
ChatConfig.ImageSize字符串字段(如 "1024x1024") - 数据迁移:自动转换
ImageSizeId→ImageSize字符串 - 更灵活的图片尺寸支持(不受预定义尺寸限制)
-
模型管理接口:
GET /api/admin/models/{id}- 删除 3 个字段,新增 18 个字段POST /api/admin/models- 新增 18 个必填字段PUT /api/admin/models/{id}- 新增 18 个必填字段POST /api/admin/models/validate- 参数从ModelReferenceId改为完整配置对象
-
可用模型列表接口:
GET /api/admin/model-keys/{modelKeyId}/possible-models- 移除 3 个字段
-
用户模型接口:
GET /api/users/{userId}/models- 新增 18 个字段
-
快速创建接口:
- ❌ 删除
POST /api/admin/models/fast-create - ✅ 使用普通创建接口
POST /api/admin/models(提供默认值)
- ❌ 删除
-
删除的接口:
- ❌
GET /api/model-provider/{modelProviderId}/models- 模型提供商模型列表 - ❌
GET /api/model-reference/{modelId}- 模型引用详情
- ❌
模型提供商管理:
GET /api/admin/model-providers- 获取所有提供商(含密钥和模型数量)POST /api/admin/model-providers/reorder- 重新排序提供商
详细的前端适配指南:
- 📖 1.8.0 后端 API 接口变更说明(888 行详细文档)
- 包含所有接口的请求/响应格式、字段说明、迁移示例、常见问题
组件重命名(提升可读性):
Conversations→ChatList(聊天列表)Conversation→ChatListItem(聊天列表项)Chat→ChatView(聊天视图)- 删除
MemoizedChatMessage(冗余包装组件)
导航改进:
- 聊天列表项从
<button>改为<a>标签 - 支持右键菜单(在新标签页打开)
- 支持
Ctrl/Cmd+Click在新标签页打开 - 改善无障碍体验(符合语义化 HTML)
- 相同改进应用于设置页面和管理后台导航
新增 ChatMessagesSkeleton 组件(199 行):
- 在聊天消息加载时显示骨架屏(而非空白)
- 多模型展示(显示 3 个不同尺寸的模型卡片)
- 模拟消息气泡的动画加载效果
- 提升首次进入聊天的感知性能
集成到聊天视图:
- 新增
isLoadingChat状态(在HomeContext中) - 加载消息时显示骨架屏
- 消息加载完成后淡入显示
按 API 类型分离配置 UI:
- 聊天/推理模型(
apiType=0/1):ChatResponsePresetConfig组件- 显示:温度、Top P、Frequency Penalty、Presence Penalty
- 显示:最大输出 Token 数、推理强度
- 图像生成模型(
apiType=2):ImageGenerationPresetConfig组件- 显示:图片尺寸、图片数量、图片质量
- 字段名称调整:"推理强度" → "图片质量","最大输出 Token 数" → "批量图片数"
新增 ImageQualityRadio 组件(67 行):
- 图片质量选择器(低/中/高)
- 与推理强度共享底层枚举(2/3/4)
- 视觉上更符合图像生成场景
应用范围:
ChatPresetModal- 聊天预设模态框ChatModelSettingsModal- 模型设置模态框
类型系统简化:
- 删除冗余类型别名(在 reducers 中)
- 直接使用原始类型(提升可读性)
- 影响文件:
chat.reducer.ts、model.reducer.ts、prompt.reducer.ts
模块化改进:
- 将
chatApi.ts从ChatView.tsx中独立出来 ChatView.tsx从 1431 行降至 1384 行- 提升代码可维护性和模块化
- 修复 MCP 升级导致的 BE 编译错误
- 修复前端构建错误
- 修复 45+ 处 EF Core 导航属性相关的编译错误
- 修复 TypeScript 类型错误(
ResponseMessage中的图像 URL 收集)
- 降低重试次数:从 60 次降至 3 次
- 避免长时间挂起(提升用户体验)
- 修复推理级别在图像生成 API 中不支持的问题
- 修复推理级别设置不生效的问题
- 修复非流式 API 工具调用问题
- 修复模型 loader 查询问题
- 修复管理员消息内容查询问题
- 修复 ChatConfig 哈希计算问题(单元测试更新)
next:15.5.3 → 15.5.6@next/env:15.5.3 → 15.5.6@next/swc-*(所有平台):15.5.3 → 15.5.6- 更新 browserslist 数据库
SixLabors.ImageSharp:新增 3.1.12(纯 .NET 图像处理库)- 替代手写图像解析器,无需平台原生依赖
- 跨平台支持更好,包体积适中(约 30MB+)
- 曾考虑使用 SkiaSharp,但其包含所有平台原生库会导致包体积膨胀至 90MB+
重要提示:本版本包含重大数据库架构变更,升级前请务必备份数据库。
src/scripts/db-migration/1.8/1.8.0.sql
- 添加 18 个新字段到
Model表 - 从
ModelReference迁移基础字段 - 设置
UseMaxCompletionTokens(OpenAI/Azure OpenAI) - 迁移
AllowCodeExecution(基于模型名称判断) - 迁移
ReasoningEffortOptions(基于模型名称判断) - 迁移
SupportedImageSizes和ApiType(图像生成模型) - 设置
UseAsyncApi和推理模型ApiType - 设置
DeploymentName为必填字段 - 删除
Model.ModelReferenceId外键和字段 - 删除
ModelReference表及其外键 - 删除
ModelProvider表及其外键 - 删除
CurrencyRate表 - 删除
Tokenizer表 - 删除
ReasoningResponseKind表 - 创建
ModelProviderOrder表 - 初始化
ModelProviderOrder数据(基于现有ModelKey.Order) - 删除
FileServiceType表及其外键 - 迁移
ChatConfig.ImageSizeId→ImageSize字符串 - 删除
KnownImageSize表
- 安全性:所有步骤都有
IF EXISTS检查,可重复执行 - 数据保留:自动迁移现有模型配置(无数据丢失)
- 智能判断:根据模型名称自动设置特殊能力
- Gemini 模型:
AllowCodeExecution - DeepSeek 模型:
ThinkTagParserEnabled - o1/o3 系列:推理级别选项
- gpt-image 系列:图像尺寸和 API 类型
- Gemini 模型:
- 版本标记:自动设置
IsLegacy(2024-07-01 之前发布的模型)
- ✅ 数据库已备份
- ✅ 确认当前版本为 1.7.2 或更早
- ✅ 已阅读 API 变更说明
- ✅ 前端代码已更新(TypeScript 类型定义)
- 新增:9,915 行
- 删除:4,279 行
- 净增:5,636 行
- 文件变更:156 个文件
后端:
- 删除 1,217 行手写图像解析器
- 新增 888 行 API 变更文档
- 新增 436 行模型验证单元测试
- 新增 172 行
ModelProviderInfo静态类 - 新增 130 行自定义验证特性
- 新增 64 行
FileServiceTypeInfo静态类
前端:
- 新增 376 行
QuickAddModelModal组件 - 新增 234 行
ImagePreview组件 - 新增 227 行
ChatResponseConfig组件 - 新增 209 行
ChatResponsePresetConfig组件 - 新增 199 行
ChatMessagesSkeleton组件 - 新增 106 行模型默认配置
- 新增 102 行
ImageGenerationPresetConfig组件 - 新增 91 行
ImageGenerationConfig组件 - 重构
ModelModal.tsx:+528 行(714 行总计)
数据库:
- 新增 647 行迁移脚本(1.8.0.sql)
文档:
- 新增 2,816 行历史发布说明(1.0 - 1.6)
- 新增 888 行 API 变更说明
- 新增 157 行模型验证规则说明
-
📖 1.8.0 后端 API 接口变更说明(888 行)
- 所有接口的请求/响应格式
- 字段说明和验证规则
- 迁移示例和常见问题
- 完整类型定义
-
📖 模型验证规则说明(157 行)
- 18 个配置字段的验证规则
- 自定义验证特性使用方法
- 单元测试示例
-
📖 历史发布说明索引
- 1.0 - 1.7.2 的完整发布历史
- 中英双语版本
- 📚 构建文档
- ☁️ Azure 部署文档
- 🐛 报告问题
- 💬 参与讨论
-
备份数据库(必须!):
-- SQL Server 示例 BACKUP DATABASE [Chats] TO DISK = N'D:\Backup\Chats_1.7.2_BeforeUpgrade.bak'
-
记录当前模型配置:
SELECT m.Id, m.Name, mr.Name AS ReferenceName, mr.AllowVision, mr.AllowSearch, mr.ContextWindow, mr.MaxResponseTokens FROM Model m INNER JOIN ModelReference mr ON m.ModelReferenceId = mr.Id;
-
检查自定义修改:
- 如果你手动修改过
ModelReference表,请记录修改内容 - 迁移后需在
Model表中重新配置
- 如果你手动修改过
- 停止应用服务
- 备份数据库(再次确认!)
- 执行迁移脚本:
sqlcmd -S localhost -d Chats -i 1.8.0.sql
- 验证迁移结果:
-- 检查新字段是否存在 SELECT TOP 1 * FROM Model; -- 检查表是否删除 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN ('ModelReference', 'ModelProvider', 'CurrencyRate'); -- 应返回 0 条记录
- 部署新版本后端代码
- 部署新版本前端代码
- 验证功能:
- 登录管理后台 → 模型管理
- 检查现有模型配置是否正确
- 尝试添加新模型
- 测试模型验证功能
- 验证聊天功能正常
如果升级失败,可按以下步骤回滚:
- 停止应用服务
- 恢复数据库备份:
RESTORE DATABASE [Chats] FROM DISK = N'D:\Backup\Chats_1.7.2_BeforeUpgrade.bak' WITH REPLACE;
- 部署 1.7.2 版本代码
- 重启应用服务
- 模型配置模板(快速克隆相似模型)
- 模型分组管理(按用途分类)
- 批量导入/导出模型配置
- 模型使用情况统计
- 模型能力自动检测(减少手动配置)
- 模型配置版本历史(跟踪变更)
- 模型推荐系统(基于使用场景)
- 更多模型提供商集成
感谢所有为本版本做出贡献的开发者!
特别感谢:
- @sdcb - 核心架构重构、数据库迁移、API 设计、文档编写
如有问题或建议,欢迎在 GitHub Issues 反馈。
- ✅ 模型配置从静态参考表迁移到模型实例级别
- ✅ 删除 5 个静态参考表(ModelReference、ModelProvider 等)
- ✅ 新增 ModelProviderOrder 表(提供商排序)
- ✅ 提供商配置改为静态类(ModelProviderInfo、FileServiceTypeInfo)
- ✅ 新增第三种 API 类型(ImageGeneration)
- ✅ 18 个模型配置字段(功能开关、温度范围、Token 配置等)
- ✅ 模型验证框架(自定义验证特性 + 单元测试)
- ✅ 快速添加模型对话框(批量添加 + 默认配置)
- ✅ 全屏图片预览组件(缩放动画 + 键盘导航)
- ✅ 管理后台按需懒加载 + 骨架屏(渐进式加载数据)
- ✅ 聊天消息加载骨架屏(提升感知性能)
- ✅ 按 API 类型分离预设配置 UI
- ✅ 图像处理库重构(ImageSharp 替代手写解析器,-1,217 行)
- ✅ 聊天组件重命名(提升可读性)
- ✅ 导航改进(button → anchor,支持右键菜单)
- ✅ 类型系统简化(删除冗余别名)
- ✅ 模块化改进(独立 chatApi.ts)
- ✅ 修复 45+ 处 EF Core 相关编译错误
- ✅ 修复 Google AI 服务重试次数问题
- ✅ 修复图像生成推理级别问题
- ✅ 修复非流式 API 工具调用问题
- ✅ Next.js:15.5.3 → 15.5.6
- ✅ ImageSharp:新增 3.1.12(替代手写图像解析器)
- ✅ 新增 888 行 API 变更说明
- ✅ 新增 157 行模型验证规则说明
- ✅ 新增 2,816 行历史发布说明(1.0 - 1.6)
最后更新:2025-11-04