
Model provider inputs not reset when switching to unconfigured provider
快速结论:该 Bug 发生在 LobeChat 模型提供商设置页面,当从一个已配置 API Key 的提供商切换到另一个未配置的提供商时,输入框依然显示之前提供商的值,未正确清空。优先排查 form.setFieldsValue 对 undefined 值的行为。
问题场景
使用 LobeChat 桌面客户端 (Electron) 时,在设置 → 模型提供商页面,先后切换不同的 AI 服务提供商。本 Issue 中用户使用了 Google 和 DeepSeek 两个提供商。
报错原文
When switching from A to B, the input box is normally changed to the value of B, but when switching back from B to A, the input box still retains the value of B instead of being emptied (because the value of A is empty).
原因分析
这是 ProviderConfig 组件中的表单重置问题。当切换提供商时,组件通过 form.setFieldsValue(mergedData) 来更新表单值。但如果目标提供商的关键字段(如 apiKey 和 baseURL)为空或为 undefined,Ant Design 的 setFieldsValue 不会用 undefined 覆盖已有字段值——现有字段值将被保留(即上一个提供商的值)。
可能原因: mergedData 中空的关键字段值为 undefined,而 setFieldsValue({ keyVaults: { apiKey: undefined, baseURL: undefined } }) 并不会真正清空这些字段。此前 PR #14192 修复了搜索关键词不重置的问题,方法是将非受控输入改为受控组件并在提供商切换时显式清理,但该修复针对的是搜索关键词而非 keyVaults 表单字段。
环境排查
- 确认 LobeChat 版本是否为 v2.2.10-canary.45 或更早版本(此版本已确认存在该 Bug)
- 运行平台:桌面客户端 (Electron) / 官方云平台
- 操作系统:Windows(Edge 浏览器)
- 使用启用并配置多个模型提供商,且至少有一个提供商的 API Key 和 Host 为空
解决步骤
- 复现问题:启用两个模型提供商(如 Google 和 DeepSeek),将两者的 API Key 和 Host 都留空。先填写 DeepSeek 的 API Key 和 Host(任意值),然后切换到 Google 页面——正常情况下 Google 的输入框应为空,但实际会显示 DeepSeek 的值。
- 可能的修复策略(可优先尝试):
- 在切换提供商时先调用
form.resetFields(),再执行form.setFieldsValue(mergedData),以确保所有字段被重置为初始值。 - 或将
mergedData中空字段的undefined值改为空字符串"",因为setFieldsValue对空字符串会执行清空操作。
- 在切换提供商时先调用
- 社区修复参考:可查看 PR #14192 中对搜索关键词重置的实现方式,将其类似逻辑应用到
keyVaults字段上。
验证方法
按照“解决步骤”中复现问题的流程操作:
- 切换回未配置的提供商时,API Key 和 Host 输入框应正确显示为空,而非保留上一个提供商的值。
- 检查是否有其他表单字段(如自定义模型名称等)也存在类似的不重置问题。



