游乐游手机版
首页/AI热点日报/热点详情

Dify内置变量实现多轮对话状态管理

类型:热点整理2026-06-12
在Dify中,通过内置会话变量实现多轮对话状态管理:会话变量随conversation_id自动创建和销毁,页面刷新或跨设备重连不丢失。可在LLM节点或模板节点动态更新变量,并基于变量做条件路由与节点可见性控制,从而绕过模型无状态缺陷,维持对话状态。

一个关键要点:在 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"。这样付款节点只会在到达支付阶段时触发。

来源:https://www.php.cn/faq/2633453.html?uid=1589237

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。