必须将变量绑定到会话id并写入redis或postgresql才能跨请求持久化;先用“set variable”节点注入变量,再启用持久化配置,最后通过{{session.var}}或api/conversation_id/直连redis读取。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让一次会话里的变量(比如用户姓名、订单号、偏好设置)在后续所有请求中自动携带并被不同模型、工作流甚至外部系统读取,必须绕过默认内存存储,将变量绑定到会话ID并写入Redis或PostgreSQL——否则前端传参遗漏、模型切换或服务重启都会导致变量丢失。
将变量注入会话上下文并持久化
第一步:在Dify工作流中添加“Set Variable”节点,输入变量名(如user_phone)和值(如{{inputs.phone}});【该节点必须放在会话初始化之后、首次调用LLM之前,否则变量不会被纳入上下文快照】。
第二步:确保该工作流的“运行时配置”中启用了“持久化会话状态”,并在“会话存储后端”下拉菜单中选择redis或postgresql;若选redis,需确认REDIS_URL已在.env中正确配置且连接可达。
Dify 3.9.2更新重点增强系统安全性,引入 Chainguard 安全基础镜像并同步社区版 CVE 修复,同时优化 OpenSearch 向量存储兼容性、插件参数传输机制及 Helm 部署配置。新增工作流模型节点缓存能力,可减少重复凭证查询,显著提升复杂工作流初始化速度,为企业级 AI 应用提供更稳定、高效的运行体验。
第三步:在后续任意节点(包括HTTP请求、条件判断、RAG检索)中,直接使用{{session.user_phone}}语法引用该变量——Dify会在每次请求时自动从持久化存储中加载完整会话对象,无需手动查询。
跨平台调用会话变量的两种方式
方法一:通过Dify API携带conversation_id发起请求
向/v1/chat-messages发送POST请求时,在JSON body中包含"conversation_id": "conv_xyz789"字段;Dify接收到后自动加载该会话全部变量,并注入到当前工作流的session作用域中。
方法二:从外部系统直连Redis读取
执行redis-cli -h 127.0.0.1 -p 6379 GET "session:conv_xyz789",返回值为JSON字符串;其中"variables"字段即为所有已持久化的会话级变量,结构形如{"user_phone":"138****1234","language":"zh-CN"}。
【注意:Redis中存储的session键名格式固定为session:{conversation_id},不可自行修改前缀,否则Dify无法识别】
验证变量是否真正跨请求生效
① 在浏览器开发者工具中,打开Network标签页,找到任意一次/v1/chat-messages请求;
② 查看其Response内容,定位到"session"字段下的"variables"子对象;
③ 发送第二条消息后,再次检查该字段——若变量值未变且仍存在,说明持久化成功;
④ 手动重启Dify服务容器,再发第三条消息,仍能读到相同变量值,即证明已脱离内存依赖。










