快速结论:在 Dify 的预定义模型(fetch_from: predefined-model)负载均衡配置中新增凭据时,点击 Save 无任何反应,通常不是网络或权限问题,而是前端 ModelModal 保存处理器缺少 model context 提前 return 所致,优先排查前端组件间的字段传递。
适用环境:Dify 自托管源码部署(Self Hosted / Source);前端包版本 1.17.1;main 分支源码检出;回归可复现于 commit 4c2f022bb2;原始 UI 复现涉及 Tongyi / 阿里云凭据对话框。Issue 未提供操作系统、Python、CUDA、显卡等信息。
最快修复方案:暂无确认的一步修复方案。Issue 作者定位到修复方向是让 ModelLoadBalancingConfigs 与 AddCredentialInLoadBalancing 转发已有的固定模型字段,并已计划提交含回归测试的 PR;在补丁合入前没有可直接执行的单步修复。
注意事项:该问题只影响预定义模型的凭据新增流程,可自定义模型(customizable model)的凭据流程正常。Issue 中验证是在源码前端配合 mock 网络响应下完成的,未做完整端到端线上验证;转发字段后凭据仍走 provider credential endpoint,API 选择由 isModelCredential 控制。
问题场景
在 Dify 中为预定义模型(fetch_from: predefined-model)配置负载均衡时,用户进入 Settings → Model Providers,打开该模型的负载均衡配置,点击 Add credential(若已有凭据则从菜单选 Add API Key),填写必填的 API Key 后点击 Save。此时对话框停留在原地,既没有提交,也没有任何校验提示或错误反馈。该问题在“新增第一个凭据”和“通过菜单再加一个凭据”两种情况下都会发生,使用时账号需具备创建凭据的权限,且该 provider 允许自定义凭据。
报错原文
Save does nothing when adding credentials from predefined model load balancing
Issue 未提供传统意义上的异常堆栈,实际表现是点击 Save 后无提交、无报错、无表单校验反馈。
原因分析
根据 Issue 作者的定位,根因是前端组件间字段传递断裂,导致保存处理器在到达表单校验和 API 调用前就提前 return。链路如下:
- 负载均衡入口以
configModelCredential模式打开ModelModal,其保存处理器需要 model context。 ModelLoadBalancingModal本已在currentCustomConfigurationModelFixedFields中提供了所选模型的 name 和 type。ModelLoadBalancingConfigs丢弃了这些字段,没有继续向下传递。AddCredentialInLoadBalancing只为 customizable model 重建这些字段,预定义模型拿到的因此是undefined。- 预定义模型的新增操作也没有显式提供
model。 - 最终
ModelModal.handleSave执行到if (!modelContext) return,在校验表单或发起请求之前就返回。
因此这是纯粹的前端字段转发问题,与后端 provider 凭据接口本身无关。
环境排查
- 确认 Dify 部署方式:应为 Self Hosted(Source),Cloud 版未在 Issue 中验证。
- 确认前端包版本:Issue 中为
1.17.1。 - 确认代码来源:
main分支源码检出,回归可复现于 commit4c2f022bb2。 - 确认触发模型类型:
fetch_from: predefined-model的预定义模型;可自定义模型不受影响。 - 确认账号权限:需具备创建凭据的权限,且 provider 允许自定义凭据。
- 确认浏览器控制台与网络面板:点击 Save 后不应出现对 provider credential endpoint 的 POST 请求,这是区分本问题的关键现象。
- Issue 未提供 Python、CUDA、PyTorch、显卡等信息,无需也无法核对。
解决步骤
- 先复现并确认现象:在预定义模型负载均衡凭据对话框填入必填 API Key,点击 Save,观察对话框是否保持打开且无校验提示。
- 打开浏览器开发者工具的 Network 面板,在 Save 后确认没有向 provider 凭据接口发出 POST 请求。Issue 的回归测试也确认预定义模型两种场景下 POST 调用数为 0。
- 定位保存提前返回的位置:检查
ModelModal.handleSave,确认是否命中if (!modelContext) return。 - 沿调用链检查字段传递:
ModelLoadBalancingModal→ModelLoadBalancingConfigs→AddCredentialInLoadBalancing,确认currentCustomConfigurationModelFixedFields中的模型 name 与 type 是否被逐层转发。 - 按 Issue 作者的修复方向:让
ModelLoadBalancingConfigs转发已有固定模型字段,并让AddCredentialInLoadBalancing对预定义模型也保留这些字段(该改动由作者以 PR 形式提交,Issue 中未给出合入 commit)。 - 若尚未合入补丁,可优先尝试在本地临时转发这两个字段后重新构建前端,验证 Save 是否能正常提交;此为可优先尝试的验证手段,不等同于官方已发布修复。
验证方法
修复后重新打开预定义模型的负载均衡凭据对话框,填写必填 API Key 并点击 Save:表单应正常校验,向 provider credential endpoint 发出 POST 请求,成功后对话框关闭,负载均衡凭据列表刷新出新增项;缺少必填字段时应出现校验反馈。同时回归可自定义模型的凭据新增流程,确认其仍能正常通过。Issue 中的回归测试以“预定义模型两种场景下 POST 调用数不再为 0、可自定义模型场景继续通过”作为通过标准。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Refactor/Chore] Add preflight workflow validation and actionable diagnostics for missing variable references / unreachable paths](https://www.chat-gpts.plus/wp-content/uploads/2026/09/34358-5d0ee5cc-768x403.jpg)

