Dify多轮对话状态管理:内置变量应用全攻略

2026-06-12阅读 0热度 0
其他

掌握一个核心要点:在 Dify 中搭建多轮对话时,如果不用「会话变量」机制将用户刚刚输入的预算、选定的商品或当前步骤锁定下来,AI 很快就会“失忆”——对话将退化成一连串机械的重复确认。会话变量随 conversation_id 自动创建与销毁,页面刷新、跨设备重连都不会丢失会话内的值,这才是多轮对话真正具备“状态”的底层设计。

如何在Dify中利用内置变量实现多轮对话状态管理

模型天然无状态,这个缺陷必须通过机制绕开,而 Dify 的内置变量正是为此而生的解决方案。下面直接拆解具体操作。

启用会话变量并绑定对话生命周期

进入应用编辑页面 → 左侧菜单点击「变量」→ 切换到「会话变量」标签页 → 点击「+ 新建会话变量」。

填写变量名称(例如 selected_product_id)、选择类型(推荐 String 或 Object)、输入默认值(可留空)→ 保存。

【会话变量与普通变量有本质区别:它随 conversation_id 自动创建和销毁,页面刷新、跨设备重连均不会丢失该会话内的值】

完成此步骤后,所有后续节点均可通过 {{session.selected_product_id}} 读取或写入该变量。

在LLM节点中动态更新会话变量

方法一:在 LLM 节点输出中直接赋值

在 LLM 节点配置中,勾选「启用对话记忆」→ 在 System Prompt 末尾追加提示:“请将用户确认的商品 ID 提取为 JSON 字段,并严格按以下格式输出:{"product_id": "abc123"}”。之后在节点「输出变量」中填入 parsed_result,接着接一个「变量赋值」节点,设置 session.selected_product_id = {{parsed_result.product_id}}

方法二:用模板节点一次性完成解析与赋值

插入「模板」节点,输入内容:{% set id = (query | regex_find("ID[::\s]*(\w+)"))[0] %}{{ id | default("") }} → 输出变量设为 extracted_id → 后续接变量赋值节点:session.selected_product_id = {{extracted_id}}

注意:模板节点不调用模型,执行速度更快,适合结构化文本提取;LLM 更适合语义模糊的场景(例如用户说“就买刚才看的那个”)。

基于会话变量做条件路由

第一步:在「条件判断」节点中设置分支逻辑

选择「会话变量」作为判断依据 → 输入变量路径:session.selected_product_id → 设置条件为「不为空」→ 分支 A 走「已选商品流程」,分支 B 走「引导用户选择」。

第二步:在分支内嵌套「变量赋值」节点,持续更新状态

例如在「已选商品流程」中,用户说“加购物车”,此时执行:session.cart_items = session.cart_items | default([]) + [session.selected_product_id]。数组类型变量支持追加,避免覆盖历史记录。

第三步:用变量控制节点可见性(可选)

在任意节点右上角齿轮图标 → 「高级设置」→ 勾选「仅当满足条件时执行」→ 输入表达式:session.current_step == "payment"。这样付款节点只在到达支付阶段时才触发。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策