Prompt Generator: Apply no longer adds the generated variables (1.18.0 regression)

该问题出现在 Dify 1.18.0 自托管环境中,于 Studio 基础编排 Chatbot 的 Instructions 使用 Prompt Generator 生成提示词并点击 Apply 后,生成变量未写入 Variables,发布后 user_input_form 为空;优先排查前端 Ap

快速结论:该问题出现在 Dify 1.18.0 自托管环境中,于 Studio 基础编排 Chatbot 的 Instructions 使用 Prompt Generator 生成提示词并点击 Apply 后,生成变量未写入 Variables,发布后 user_input_form 为空;优先排查前端 Apply 流程中变量状态是否被覆盖。

适用环境:Dify 1.18.0;Self Hosted(Docker);控制台语言为日语;Issue 未提供操作系统、Python、CUDA、显卡等环境信息。

最快修复方案:暂无确认的一步修复方案。Issue 讨论中给出一个仅在 UI 操作的临时手段(尚未经运行时验证):点击 Apply 后,先在生成的提示词内部点击,再点击其外部,若出现添加变量确认提示则接受,以触发 onBlur 中的 getVars() 变量扫描。

注意事项:该临时手段只是讨论中的推测性 workaround,作者明确表示未在运行时测试;使用前需检查 Variables 区及发布后 user_input_form 是否已生成变量。根本原因(Apply 后 onChange 用旧 modelConfig 覆盖新变量)同样属于推测,Issue 中未给出运行时确认。

问题场景

在 Dify 1.18.0(Self Hosted,Docker)中,于 Studio 以 Create from Blank → Chatbot(基础编排、简单提示词模式)新建应用,在 Instructions 区域点击 Generate,选择 Python debugger 模板后生成,再点击 Apply 并在 “Override existing configuration?” 对话框中确认。接口 POST /console/api/rule-generate 的响应已包含非空 variables 数组,但界面 Variables 区仍为空,提示词中 {{user_instruction}} 等以纯文本显示而非变量块;调试面板出现 “Formatting changed” 提示;发布后 model_config.pre_prompt 含占位符,而 model_config.user_input_form 为 [],应用没有对应输入字段。相同步骤在 1.17.1 上正常。

报错原文

Prompt Generator: Apply no longer adds the generated variables (1.18.0 regression)

Expected: variables returned by the generator are listed in the Variables section.
Actual: The Variables section stays empty. model_config.user_input_form is [].

原因分析

根据 Issue 提交者的分析,可能原因是前端状态更新顺序问题:handleAutomaticRes 先通过 PROMPT_EDITOR_UPDATE_VALUE_BY_EVENT_EMITTER 把新提示词推入编辑器,UpdateBlock 调用 editor.setEditorState() 和 editor.update(),触发编辑器 onChange;随后 handleAutomaticRes 才用 res.variables 设置 prompt_variables。onChange 调用的 handlePromptChange 会基于当前渲染的 modelConfig 重建配置,保留旧的 prompt_variables(新应用下为空)且不追加新变量。提交者推测某次 onChange 在 setModelConfig 之后执行但仍持有 Apply 前的 modelConfig,从而用 [] 覆盖生成变量;“Formatting changed” 提示也与此一致。该推测提交者未在运行时确认。讨论中另指出编辑器 onChange 传入空变量列表,而 onBlur 会通过 getVars() 扫描提示词并在缺变量时弹出确认,这构成一个独立的变量发现路径。

环境排查

  • 确认 Dify 版本:问题在 1.18.0 复现,1.17.1 正常。
  • 确认部署方式为 Self Hosted(Docker)。
  • 确认控制台语言是否影响前端交互(复现环境为日语)。
  • 在浏览器开发者工具中查看 POST /console/api/rule-generate 响应,确认 variables 数组非空。
  • 发布后检查 GET /console/api/apps/<app_id> 中 model_config.pre_prompt 与 model_config.user_input_form 的实际内容。
  • Issue 未提供 Python、CUDA、PyTorch、显卡等环境信息,无需据此排查。

解决步骤

  1. 可优先尝试(UI 临时手段,尚未经运行时验证):在 Instructions 中完成 Generate 并点击 Apply、确认覆盖后,先在生成的提示词内部点击一次,再点击编辑区外部。
  2. 若出现添加变量的确认提示,接受该确认,使 onBlur 中 getVars() 扫描到的 {{variable_name}} 变量写入配置。
  3. 检查 Variables 区是否已列出 user_instruction、programming_language、existing_code 等变量,缺失则手动补齐后再发布。
  4. 如临时手段无效,回退到 1.17.1 使用同一流程作为规避方案(Issue 记录该版本正常)。
  5. 如需定位根本原因,可在运行时确认 handlePromptChange 是否在生成配置写入之后执行、且仍持有 Apply 前的 modelConfig。

验证方法

在点击 Apply 并执行上述操作后,确认 Variables 区不再为空、提示词中的占位符以变量块显示;随后发布应用,调用 GET /console/api/apps/<app_id>,检查 model_config.user_input_form 是否包含对应变量、model_config.pre_prompt 中的变量是否可映射为输入字段;在应用对话界面确认出现相应输入框。

参考来源

langgenius/dify #45217

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 31830

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注